当前位置:   article > 正文

【大数据】计算引擎之三:Hadoop处理框架_hadoop是引擎

hadoop是引擎

1.什么是hadoop处理框架?

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)的并行运算。

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 如何进行文件的读写操作:

文件写入

  1. Client 向 NameNode 发起文件写入的请求
  2. NameNode 根据文件大小和文件块配置情况,返回给 Client 它所管理部分 DataNode 的信息。
  3. Client 将文件划分为多个文件块,根据 DataNode 的地址信息,按顺序写入到每一个 DataNode 块中。

文件读取

  1. Client 向 NameNode 发起文件读取的请求
  2. NameNode 返回文件存储的 DataNode 的信息
  3. 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模式。

2.hadoop框架包含哪些组件及其功能

新版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

3.优势和局限

  由于这种方法严重依赖持久存储,每个任务需要多次执行读取和写入操作,因此速度相对较慢。但另一方面由于磁盘空间通常是服务器上最丰富的资源,这意味着MapReduce可以处理非常海量的数据集。同时也意味着相比其他类似技术,Hadoop的MapReduce通常可以在廉价硬件上运行,因为该技术并不需要将一切都存储在内存中。MapReduce具备极高的缩放潜力,生产环境中曾经出现过包含数万个节点的应用。

  MapReduce的学习曲线较为陡峭,虽然Hadoop生态系统的其他周边技术可以大幅降低这一问题的影响,但通过Hadoop集群快速实现某些应用时依然需要注意这个问题。

  围绕Hadoop已经形成了辽阔的生态系统,Hadoop集群本身也经常被用作其他软件的组成部件。很多其他处理框架和引擎通过与Hadoop集成也可以使用HDFS和YARN资源管理器。

4.总结

  Apache Hadoop及其MapReduce处理引擎提供了一套久经考验的批处理模型,最适合处理对时间要求不高的非常大规模数据集。通过非常低成本的组件即可搭建完整功能的Hadoop集群,使得这一廉价且高效的处理技术可以灵活应用在很多案例中。与其他框架和引擎的兼容与集成能力使得Hadoop可以成为使用不同技术的多种工作负载处理平台的底层基础。

5.其他 combine、partition和shuffle怎么理解

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/545841
推荐阅读
相关标签
  

闽ICP备14008679号