Apache Hadoop
Apache Hadoop 是一种专用于批处理的处理框架。Hadoop 是首个在开源社区获得极大关注的大数据框架。基于谷歌有关海量数据处理所发表的多篇论文与经验的 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
-
优势和局限
-
由于这种方法严重依赖持久存储,每个任务需要多次执行读取和写入操作,因此速度相对较慢。但另一方面由于磁盘空间通常是服务器上最丰富的资源,这意味着 MapReduce 可以处理非常海量的数据集。同时也意味着相比其他类似技术,Hadoop 的 MapReduce 通常可以在廉价硬件上运行,因为该技术并不需要将一切都存储在内存中。MapReduce 具备极高的缩放潜力,生产环境中曾经出现过包含数万个节点的应用。
-
MapReduce 的学习曲线较为陡峭,虽然 Hadoop 生态系统的其他周边技术可以大幅降低这一问题的影响,但通过 Hadoop 集群快速实现某些应用时依然需要注意这个问题。
-
围绕 Hadoop 已经形成了辽阔的生态系统,Hadoop 集群本身也经常被用作其他软件的组成部件。很多其他处理框架和引擎通过与 Hadoop 集成也可以使用 H