赞
踩
Apache Hadoop是一种专用于批处理的处理框架。Hadoop是首个在开源社区获得极大关注的大数据框架。基于谷歌有关海量数据处理所发表的多篇论文与经验的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)的并行运算。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
读取文件信息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模式。
新版Hadoop包含多个组件,即多个层,通过配合使用可处理批数据:
HDFS:主管数据的读取和存储。HDFS是一种分布式文件系统层,可对集群节点间的存储和复制进行协调。HDFS确保了无法避免的节点故障发生后数据依然可用,可将其用作数据来源,可用于存储中间态的处理结果,并可存储计算的最终结果。
YARN:资源管理器。YARN是Yet Another Resource Negotiator(另一个资源管理器)的缩写,可充当Hadoop堆栈的集群协调组件。该组件负责协调并管理底层资源和调度作业的运行。通过充当集群资源的接口,YARN使得用户能在Hadoop集群中使用比以往的迭代方式运行更多类型的工作负载。
MapReduce:处理数据的引擎。MapReduce是Hadoop的原生批处理引擎。
批处理模式
Hadoop的处理功能来自MapReduce引擎。MapReduce的处理技术符合使用键值对的map、shuffle、reduce算法要求。基本处理过程包括:
从HDFS文件系统读取数据集
将数据集拆分成小块并分配给所有可用节点
针对每个节点上的数据子集进行计算(计算的中间态结果会重新写入HDFS)
重新分配中间态结果并按照键进行分组
通过对每个节点计算的结果进行汇总和组合对每个键的值进行“Reducing”
将计算而来的最终结果重新写入 HDFS
由于这种方法严重依赖持久存储,每个任务需要多次执行读取和写入操作,因此速度相对较慢。但另一方面由于磁盘空间通常是服务器上最丰富的资源,这意味着MapReduce可以处理非常海量的数据集。同时也意味着相比其他类似技术,Hadoop的MapReduce通常可以在廉价硬件上运行,因为该技术并不需要将一切都存储在内存中。MapReduce具备极高的缩放潜力,生产环境中曾经出现过包含数万个节点的应用。
MapReduce的学习曲线较为陡峭,虽然Hadoop生态系统的其他周边技术可以大幅降低这一问题的影响,但通过Hadoop集群快速实现某些应用时依然需要注意这个问题。
围绕Hadoop已经形成了辽阔的生态系统,Hadoop集群本身也经常被用作其他软件的组成部件。很多其他处理框架和引擎通过与Hadoop集成也可以使用HDFS和YARN资源管理器。
Apache Hadoop及其MapReduce处理引擎提供了一套久经考验的批处理模型,最适合处理对时间要求不高的非常大规模数据集。通过非常低成本的组件即可搭建完整功能的Hadoop集群,使得这一廉价且高效的处理技术可以灵活应用在很多案例中。与其他框架和引擎的兼容与集成能力使得Hadoop可以成为使用不同技术的多种工作负载处理平台的底层基础。
combine和partition都是函数,中间的步骤应该只有shuffle!
combine分为map端和reduce端,作用是把同一个key的键值对合并在一起,可以自定义的。
combine函数把一个map函数产生的<key,value>对(多个key,value)合并成一个新的<key2,value2>.将新的<key2,value2>作为输入到reduce函数中
这个value2亦可称之为values,因为有多个。这个合并的目的是为了减少网络传输。
partition是分割map每个节点的结果,按照key分别映射给不同的reduce,也是可以自定义的。这里其实可以理解归类。
我们对于错综复杂的数据归类。比如在动物园里有牛羊鸡鸭鹅,他们都是混在一起的,但是到了晚上他们就各自牛回牛棚,羊回羊圈,鸡回鸡窝。partition的作用就是把这些数据归类。只不过在写程序的时候,mapreduce使用哈希HashPartitioner帮我们归类了。这个我们也可以自定义。
shuffle是map和reduce之间的过程,包含了两端的combine和partition。
Map的结果,会通过partition分发到Reducer上,Reducer做完Reduce操作后,通过OutputFormat,进行输出
shuffle阶段的主要函数是fetchOutputs(),这个函数的功能就是将map阶段的输出,copy到reduce 节点本地。
Shuffle的正常意思是洗牌或弄乱,Shuffle描述着数据从map task输出到reduce task输入的这段过程。partition,是划分,分区,归类,是shuffle的一部分。Shuffle描述着数据从map task输出到reduce task输入的这段过程。
参考:
1.https://www.jianshu.com/p/8301d49595f7
2.shuffle:https://blog.csdn.net/firemaple_li/article/details/67657855
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。