Hadoop框架
1、Hadoop的整体框架
Hadoop
由 HDFS
、 MapReduce
、 HBase
、 Hive
和 ZooKeeper
等成员组成,其中最基础最重要元素为底层用于存储集群中所有存储节点文件的文件系统 HDFS(Hadoop Distributed File System)
来执行 MapReduce
程序的 MapReduce
引擎。
Pig
是一个基于Hadoop
的大规模数据分析平台,Pig
为复杂的海量数据并行计算提供了一个简单的操作和编程接口Hive
是基于Hadoop
的一个工具,提供完整的SQL
查询,可以将sql
语句转换为MapReduce
任务进行运行ZooKeeper
:高效的,可拓展的协调系统,存储和协调关键共享状态;HBase
是一个开源的,基于列存储模型的分布式数据库;HDFS
是一个分布式文件系统,有着高容错性的特点,适合那些超大数据集的应用程序;MapReduce
是一种编程模型,用于大规模数据集(大于1TB)的并行运算。
下图是一个典型的 Hadoop
集群的部署结构:
接着给出 Hadoop
各组件依赖共存关系:
2、Hadoop的核心设计
1、HDFS
HDFS
是一个高度容错性的分布式文件系统,可以被广泛的部署于廉价的 PC
上。它以流式访问模式访问应用程序的数据,这大大提高了整个系统的数据吞吐量,因而非常适合用于具有超大数据集的应用程序中。
HDFS
的架构如图所示。 HDFS
架构采用主从架构(master/slave)
。一个典型的 HDFS
集群包含一个 NameNode
节点和多个 DataNode
节点。 NameNode
节点负责整个 HDFS
文件系统中的文件的元数据的保管和管理,集群中通常只有一台机器上运行 NameNode
实例, DataNode
节点保存文件中的数据,集群中的机器分别运行一个 DataNode
实例。在 HDFS
中, NameNode
节点被称为名称节点, DataNode
节点被称为数据节点。 DataNode
节点通过心跳机制与 NameNode
节点进行定时的通信。
NameNode
NameNode
可以看作是分布式文件系统中的管理者,存储文件系统的 meta-data
,主要负责管理文件系统的命名空间,集群配置信息,存储块的复制。
DataNode
DataNode
是文件存储的基本单元。它存储文件块在本地文件系统中,保存了文件块的 meta-data
,同时周期性的发送所有存在的文件块的报告给 NameNode
。
Client
Client
就是需要获取分布式文件系统文件的应用程序。
以下来说明 HDFS
如何进行文件的读写操作:
文件写入
Client
向NameNode
发起文件写入的请求NameNode
根据文件大小和文件块配置情况,返回给Client
它所管理部分DataNode
的信息。Client
将文件划分为多个文件块,根据DataNode
的地址信息,按顺序写入到每一个DataNode
块中。
文件读取
Client
向NameNode
发起文件读取的请求NameNode
返回文件存储的DataNode
的信息Client
读取文件信息
2、MapReduce
MapReduce
是一种编程模型,用于大规模数据集的并行运算。Map
(映射)和 Reduce
(化简),采用分而治之思想,先把任务分发到集群多个节点上,并行计算,然后再把计算结果合并,从而得到最终计算结果。多节点计算,所涉及的任务调度、负载均衡、容错处理等,都由 MapReduce
框架完成,不需要编程人员关心这些内容。
下图是 MapReduce
的处理过程:
用户提交任务给 JobTracer
, JobTracer
把对应的用户程序中的 Map
操作和 Reduce
操作映射至 TaskTracer
节点中;输入模块负责把输入数据分成小数据块,然后把它们传给 Map
节点; Map
节点得到每一个 key/value
对,处理后产生一个或多个 key/value
对,然后写入文件; Reduce
节点获取临时文件中的数据,对带有相同 key
的数据进行迭代计算,然后把终结果写入文件。
如果这样解释还是太抽象,可以通过下面一个具体的处理过程来理解:( WordCount
实例)
Hadoop
的核心是 MapReduce
,而 MapReduce
的核心又在于 map
和 reduce
函数。它们是交给用户实现的,这两个函数定义了任务本身。
map
函数:接受一个键值对(key-value pair)
(例如上图中的 Splitting
结果),产生一组中间键值对(例如上图中 Mapping
后的结果)。 Map/Reduce
框架会将 map
函数产生的中间键值对里键相同的值传递给一个 reduce
函数。
reduce
函数:接受一个键,以及相关的一组值(例如上图中 Shuffling
后的结果),将这组值进行合并产生一组规模更小的值(通常只有一个或零个值)(例如上图中 Reduce
后的结果)
但是, Map/Reduce
并不是万能的,适用于 Map/Reduce
计算有先提条件:
- 待处理的数据集可以分解成许多小的数据集
- 每一个小数据集都可以完全并行地进行处理
若不满足以上两条中的任意一条,则不适合适用Map/Reduce模式。