HaLoop:Efficient Iterative Data Processingon Large Clusters(大型集群上的高效迭代数据处理)
HaLoop?
是一个Hadoop MapReduce框架的修改版本,其目标是为了高效支持迭代,递归数据分析任务。
-
MapReduce做什么
Mapper负责“分”,即把复杂的任务分解为若干个“简单的任务”来处理。“简单的任务”包含三层含义:
一是数据或计算的规模相对原任务要大大缩小;二是就近计算原则,即任务会分配到存放着所需数据的节点上进行计算;三是这些小任务可以并行计算,彼此间几乎没有依赖关系。
Reducer负责对map阶段的结果进行汇总。至于需要多少个Reducer,用户可以根据具体问题,通过在mapred-site.xml配置文件里设置参数mapred.reduce.tasks的值。
一个比较形象的语言解释MapReduce:
我们要数图书馆中的所有书。你数1号书架,我数2号书架。这就是“Map”。我们人越多,数书就更快。
现在我们到一起,把所有人的统计数加在一起。这就是“Reduce”。
-
与Hadoop比较的四点改变
1.提供了一套新的编程接口,简化了迭代表达式的表达;
2.HaLoop的master节点包含了一个新的loop控制模块用于指定迭代的停止条件;
3.为迭代计算使用了一个新的任务调度器,可以将数据本地化。
4.Haloop的缓存和索引应用程序在slave节点上。
摘要—HaLoop的优秀表现
数据挖掘、网页排名、图像分析、模型拟合等超大规模的数据挖掘与分析需求的增长使得MapReduce和Dryad处理平台自然的出现。
但以上两种平台对于迭代程序的内嵌支持较为缺乏,而本文章中呈现的基于Hadoop MapReduceframework改进的HaLoop则在编程上支持迭代的应用并通过使任务调度器循环感知和添加各种缓存机制显著提高了它们的效率。
通过真实的评估,与Hadoop相比HaLoop减少了1.85倍的查询时间,而且在mapper和reducers之间shuffles的数据只有4%。
-
shuffles?
在处理过程中需要把mapper阶段的数据传递给reducer阶段,这个过程可以广义地称为Shuffle,是 MapReduce 框架中最关键的一个流程。
介绍—Hadoop对迭代程序薄弱的支持
在对高度可扩展的并行数据处理平台的需求日益上升的情况下,Hadoop作为MapReduce实现,在许多地方得到应用。但Hadoop并没有直接支持这些迭代的数据分析应用,程序员必须通过手动发布多个MapReduce作业并使用驱动程序来编写执行程序从而实现迭代程序。
而在手动编写迭代程序中有两个损失性能的问题:
- 尽管许多数据在迭代之间可能保持不变,但每次迭代都必须重新加载和处理数据,浪费I/O、网络带宽和CPU资源。
- 终止条件可能涉及检测何时达到fixpoint(当应用的输出在连续两次迭代中不改变时)。这种情况本身可能需要在每次迭代中执行一个额外的作业,这同样会在调度额外任务、从磁盘读取额外数据以及在网络上移动数据方面产生开销。
举🌰
在网页排名、后代查询中,MapReduce作业所需要的数据(网页指向表,朋友表)是不变的,但Hadoop会在每次迭代中都被处理和shuffled。这种情况在大多数迭代的模型拟合算法、大多数网页/图像排名算法或网络查询等都有体现。
HaLoop的出现
基于前两个例子中出现的问题**,HaLoop便出现了,它被设计用来高效地处理上述类型的应用。**
HaLoop扩展了MapReduce,并基于两个简单的直觉:
- 一个MapReduce集群可以缓存第一次迭代的固定数据,这些数据在之后的迭代中会重复利用。
- 一个MapReduce集群可以缓存reducer的输出,这些输出使得检查fixpoint变得更加高效,而不需要额外的MapReduce作业。
接下来文章的看点
- 迭代程序的模型和架构。(第2节)
- 循环感知任务调度。(第2节)
- 缓存循环中不变的数据。(第4.1、4.3节)
- 缓存用于判断fixponit的数据。(第4.2节)
- 真实环境下的实验与结果。(第5节)
HaLoop概述
结构
HaLoop继承了Hadoop的基本分布式计算模型和体系结构,依靠分布式文件系统(HDFS)存储每个作业的输入和输出。
HaLoop(集群)主要由两部分组成:
-
一个master结点
客户端提交作业到master结点上。对于每个被提交的作业,master都会安排一些并行任务在slave节点上运行。
-
多个slave结点
每个slave节点都有一个任务跟踪守护进程,用于与主节点通信并管理每个任务的执行。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7ShSot8R-1656124723417)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/e54ae24b-0f43-4706-a496-96a3202492ce/Untitled.png)]
在这张示例图中,有3个job,每个job有3个tasks在slave节点上运行。
编程模型
核心结构
HaLoop的迭代任务被抽象为: