[hadoop] 一些基础概念

时间:2021-01-31 19:40:39

一、云的概念

1、云计算的概念

随时
随地
使用任何设备
获得任何服务

2、趋势

)资料开始回归集中处理(存储大量资料)
随时存取
降低遗失风险
减少传输成本
促进团队协作
)网页变为预设开发平台(网页开放性)
网页是开放标准
浏览器的跨平台特性
web application 的普遍性
)高速计算
平行运算(parallel computing)
分散运算(distribute computing)
多核心程序设计
处理大资料的技能

3、云计算的关键特性

)超大规模
)高可靠度
)高扩充性
)虚拟化
)成本低
)高通用性
)使用者付费

二、Hadoop

1、Hadoop是什么?

Hadoop是一套由apache 贡献的开源软件平台。
用来让开发者轻易的编写和运行处理海量数据的应用
)基于Java开发
)是apache的 * 开源 项目
)全世界有上千个节点
)petabyte级别的资料量

2、特点

巨量 - 拥有存储和处理大量资料的能力
经济 - 在一般由PC所架构的集群环境内就可以使用
效率 - 手机用平行分散的档案处理机制以便得到快速的回应
可靠 - 当某节点发生错误,系统能即时自动的取得备份资料以及部署运算资源

3、Hadoop最核心的内容是什么?

)HDFS
存储空间的资源管理
从分布的多台机器上读取数据副本 )MapReduce
记忆体空间与行程分配
对副本数据进行拆分和整合

4、学习Hadoop必须掌握的关键术语

===================================
、Job 任务
、Task 工作
===================================
、JobTracker 任务分派者
、TaskTracker 工作执行者
、Client 发起任务的客户端
===================================
、Namenode 名称节点 (the master)
、Datenode 资料节点 (slaves)
===================================
、Namespace 名称空间
、Blocks 档案区块(64M)
、Replication 副本
、Metadata 属性资料
===================================
、Map - 资料拆解、构建Map对应
、Reduce - group by key - 构建无重复key的Map
===================================

5、重要的几组关系

)管理资料 - Namenode 和 Datanode

Namenode - 控制欲极强
()Master - 只能有一个
()控制对象的读/写
()配置副本策略 - 多个副本的先后存放位置规则
()管理HDFS的Namespace 和 对Namespace做检查和记录 Datanode - 执行力极强
()Workers/Slave - 可以有多个
()执行读/写操作
()执行Namenode的副本策略 )分派程序 - Jobtracker 和 TaskTracker Jobtracker - 包工头
()Master - 只能有一个
()发起工作
()为某些TaskTrackers指派工作
()主要任务是 - 排程决策/工作分配/错误处理 TaskTracker - 工人
()Workers/Slave - 可以有多个
()执行 Map 与 Reduce 的工作
()管理存储、回复运算结果

6、每一层的主从关系

HDFS layer :Namenode作为唯一的至高无上的 Master 管理着 多个 Datanode slave
MapReduce layer :Jobtracker作为唯一的至高无上的 Master 管理着 多个 TaskTracker slave

7、永远要记住一点:

不管有多少个机柜M,每个机柜有多少台电脑N,每台电脑有多少虚拟机P,
Namenode 和 JobTracker 只有其中的某一个节点有,其他的(MNP-)个节点都只包含 Datanode 和 TaskTracker

8、Client说:虽然我不属于云端架构,你也不能忘了我哦~

Client 需要做两件事
)提交 Job 给 JobTracker TaskTracker执行一系列的操作后 取得Datanode 通过 Namenode的调配后,
)接收 Block 的 location

9、hadoop-2.6.0.tar.gz 的目录结构

bin     可执行命令 start-all.sh 、stop-all.sh 、hadoop等
conf 配置文件 hadoop-env.sh、 hadoop-site.xml、slaves等
docs api文档
contrib 拓展套件
lib 一些jar
src 源码
build 编译后的文档
logs 日志

三、HDFS

1、定义

HDFS (Hadoop Distributed File System)——基于 Hadoop 的 分布式文件管理系统

2、为何而生?

为数据采集!
为MapReduce准备易于分析的数据!

3、同类 - GFS - Google File System

GFS:一个【易于扩充】的【分布式】档案系统,目的是为了对【大量资料】进行分析。
它运作在【廉价】的【普通】硬件上,且可以提供【容错】功能,
因此,可以为【大量用户】提供【总体性能】较好的服务。

4、设计目标

)良好的硬件错误容错和自动恢复能力
)串流式的资料存取 - 批次处理 多于 用户交互处理 - 高Throughput(吞吐量) 大于 低 Latency 延迟
)大规模资料集 - 支持 (perabytes)千万亿字节 等级的磁盘空间 1千万亿字节 = 909.4947018(TB)
)一致性模型 - 一次写入 多次存取 - 简化一次性处理问题
)在地运算 - 相比于传统的取数据进行计算 HDFS 是移动到资料所在的位置进行计算 减少IO的时间
)良好的平台移植 - 即使硬件不同也可以移植和扩充

5、来自Namenode的召唤

主服务器如何取得所需的从服务器的数据块的副本?[如何把需要的基础数据找到并复制为副本元数据供MapReduce 计算]

首先明确一点:
Namenode 只有一个 是master
Datanode 可以有多个 是存放数据的多个数据节点,这些节点里的数据可能是重复的 ()定义 Datanode(slaves) 包含的 数据块
Datanode_1 拥有 DataBlock_1 DataBlock_2
Datanode_2 拥有 DataBlock_2
Datanode_3 拥有 DataBlock_1 DataBlock_4
Datanode_4 拥有 DataBlock_2 DataBlock_5
Datanode_5 拥有 DataBlock_3 DataBlock_5 ()现在我们需要找到这两个档案路径
name:/users/yeqing/myFile
name:/users/yeqing/myFile/someData.gzip ()Client 去 执行 I/O 操作后 从上面五个数据节点中找到了包含有这两个档案的数据块 并复制出副本 作为元数据
name:/users/yeqing/myFile - copies:,blocks:{DataBlock_1,DataBlock_3}
name:/users/yeqing/myFile/someData.gzip - copies:,blocks:{DataBlock_2,DataBlock_4,DataBlock_5}

6、Namenode,你召唤我干嘛

Namenode 拿到了副本元数据块后做了什么操作
明确一点:Namenode 为一个文件档案路径获取一个或多个备份,是为了提高系统的可靠性和读取的速率
可靠性:当某个节点失效的时候,读取副本用以维持正常的运转
高效率:多个副本的存在可以分散读取的流量,达到负载的均衡(但是却增加了写入时的效能瓶颈,因为要写入多个副本) ()Namenode 已经获取到file1的副本块为 {DataBlock_1,DataBlock_3}
file1 {DataBlock_1,DataBlock_3} ()此时,jobTracker 就会 分配给 Tasktracker 任务
根据file1 在节点上的存在关系
去找到 DataBlock_1 和 DataBlock_3 封装成元数据 供MapReduce操作了

7 、一些HDFS机制的实现思路

()可靠性机制
常见的三种错误情况:
资料破损
网络或资料节点失效
名称失效 解决方法:
资料破损 - 【副本】用副本取代出错资料
网络或资料节点失效 - 【Datanode】定期向Namenode 更新 Datanode
名称失效 - 【Namenode】记录日志、多份存储,当Namecode坏点可以根据日志手动复原 ()副本备份机制
第1个副本备份位置:同Client的电脑上
第2个副本备份位置:不同机柜的某台电脑上
第3个副本备份位置:第2个副本备份位置的机柜 的 另一台电脑上
More备份位置: 随机选取 ()一致性机制
文本档案一致性:
新增、删除、读取档案都是Namenode负责 空间和效能一致性:
以 64M(Block)为单位
在HDFS上的档文本档案大小可能大于一张磁碟的容量
大区块可以提高存取效率
区块均匀分布各节点(电脑)用来分散读取数据

四、MapReduce

1、简介

MapReduce is a framework for computing certain kinds of distribution problems using a large number of computers or nodes.collectively referred to as a cluster.
MapReduce 是使用 【大量计算机或者节点】 来【计算】 某些【分布式】类型问题的 【架构】统称为集群

说白了:input date 经过 MapReduce 的计算和整合 产出 计算整理后的 output data。所以 MapReduce 就是用来分析整合数个HDFS block数据的

2、核心:divide and conquer (分布解决)

3、MapDeduce 运作流程:

)JobTracker 和 Namenode 取得需要运算的HDFS blocks 作为运算元数据(采集数据)【input HDSF】
)JobTracker 选择数个 TaskTracker 来作Map运算 产生一些计算后的中间文档(数据计算)【Map】
)JobTracker 将这些中间文档整合排序后,复制到需要的 TaskTracker 去(数据整理)
)JobTracker 派遣 TaskTracker 作 reduce 操作 (数据整合)【Reduce】
)reduce 完成后 通知 JobTracker 和 Namenode 已经产生 output (数据产出)【output HDSF】

4、Map和Reduce运算到底做了什么

)元数据分解为可重复的键值对:Map 将 某个 Row Data 映射成(中间文档)
key1 - val_1
key1 - val_2
key2 - val_3
key1 - val_4
key3 - val_5
key4 - val_6
key4 - val_7
.... - ...
作为Reduce的处理数据 )键值对数据整合成key不重复的键值对:Reduce 用这些映射好的Map数据做整合(group by key)
key1 - val_1 val_2 val_4 ...
key2 - val_3 ...
key3 - val_5 ...
key4 - val_6 val_7 ...
... - ...

五、拓展概念

1、hadoop机器感知

通过什么方式能够告知hadoop namenode哪些slaves机器属于哪个rack(机架)?
默认情况下,hadoop的机架感知是没有被启用的。所以,在通常情况下,hadoop集群的HDFS在选机器的时候,是随机选择的。
开启机器感知配置,能降低rack之间的网络流量。 机架感知是一种计算不同计算节点(TT)的距离的技术,用以在任务调度过程中尽量减少网络带宽资源的消耗。
这里用尽量,想表达的是当一个TT申请不到本地化任务时,JT会尽量调度一个机架的任务给他,因为不同机架的网络带宽资源比同一个机架的网络带宽资源更可贵。
当然,机架感知不仅仅用在MR中,同样还用在HDFS数据块备份过程中(第一个replica选择本节点【如果上传是DataNode】或者随机的一个DN(系统会尽量避免存储太满和太忙的节点),第二个节点选择于第一个节点不同机架的DN,第三个选择放在第二个DN同一个机架的另一个DN上)。
http://www.cnblogs.com/ggjucheng/archive/2013/01/03/2843015.html

2、hadoop各版本官方文档地址

http://hadoop.apache.org/docs/
http://hadoop.apache.org/docs/r2.7.3/

3、数据仓库

作用:存储历史数据,进而对数据进行分析,只提供查询,不提供修改。

4、Hive

1、hive只是由facebook 开源提供的hadoop生态圈的一个数据仓库工具,它本身并不是数据仓库。使用Hive能把SQL语句转化为MapReduce程序,用以进行数据清洗,筛选,统计等相关的操作。

2、Hive实时性很低,不适合直接连接BI前端。hive需要和mysql等数据库配合使用。

3、Hive 的目标是做成数据仓库,所以它提供了SQL,提供了文件-表的映射关系,又由于Hive基于HDFS,所以不提供Update,因为HDFS本身就不支持。

4、如果用户只是需要完成大规模数据的分析这件事情,那么,你只要有一套hadoop环境 + 一个hive数据库,只要你懂SQL,你不必懂MapReduce程序如何编程、hadoop如何工作,你的SQL需求将自动被编译到整个集群中去进行分布式计算,以提高分析效率。

 5、Hive四种数据导入方式

hive> load data local inpath 'wyp.txt' into table wyp;

hive> load data inpath '/home/wyp/add.txt' into table wyp;

5、YARN - Yet Another Resource Negotiator (新一代的资源管理器)

Hadoop 新 MapReduce 框架 Yarn 详解