关闭

MapReduce的工作机制

230人阅读 评论(0) 收藏 举报
分类:


    最近开始学习Hadoop和Hbase的相关内容,把自己在看的《Hadoop:The Definitive Guide》里的内容总结一下,有助于理解,也就是温故而知新了。首先是了解Hadoop中的MapReduce工作机制。MapReduce作业的运行过程如图6-1所示。包含4个独立的实体:(1)Client:提交MapReduce作业,(2)JobTracker:协调作业的运行。(3)TaskTracker:运行作业划分后的Map任务或Reduce任务。(4)Shared FileSystem(一般为HDFS),用来在其他实体间共享作业文件。

                    

 1.作业的提交

Job的waitForCompletion(true)方法所实现的作业提交过程如下:向jobtracker请求一个新的作业ID,见步骤2。检查作业的输出说明。计算作业的InputSplit。将运行作业所需要的资源(包括作业JAR文件、配置文件和计算所得的输入文件)复制到一个以作业ID命名的目录下jobtracker的文件系统。作业JAR的副本由mapred.submit.replication属性控制(默认值为10),见步骤3。告知jobtracker作业准备执行,见步骤4。

2.作业初始化

JobTracker会把作业放入一个内部队列中,交由job scheduler进行调度,并对其进行初始化(见步骤5)。为了创建任务运行列表,作业调度器首先从共享文件系统中获取Job已计算好的InputSplit的信息(见步骤6)。然后为每个InputSplit创建一个map任务。

3.任务的分配

TaskTracker定期发送“心跳”(heartbeat)给JobTracker.“心跳”告知jobtracker,tasktracker是否还存活,同时也充当两者之间的消息通道(见步骤7)。在jobtracker为tasktracker选择任务之前,jobtracker必须先选定任务所在的作业。在Hadoop中,MapReduce的调度器可以选择,默认的调度器是原始的基于队列的FIFO调度器,还有两个多用户调度器,分别名为Fair Scheduler和 Capacity Scheduler。一旦选择好作业,jobtracker就可以为该作业选定一个任务。对于map任务和reduce任务,tasktracker有固定数量的任务槽。

4.任务的执行

tasktracker已经被分配一个任务,下一步是运行该任务。第一步,通过从共享文件系统把作业的JAR文件复制到tasktracker所在的文件系统。同时,tasktracker将应用程序所需要的全部文件从分布式缓存复制到本地磁盘(见步骤8)。第二步,tasktracker为任务新建一个本地工作目录,并把JAR文件中的内容解压到这个文件夹下。第三步,tasktracker新建一个TaskRunner实例来运行该任务。TaskRunner启动一个新的child JVM(见步骤9)来运行每个任务。

shuffle和排序

map函数开始产生输出时,它利用缓冲的方式写到内存,并处于效率的考虑进行预排序。图6-4展示了这个过程。

每个map任务都有一个环形内存缓冲区,用于存储任务的输出。

Continue

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3189次
    • 积分:60
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:8篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档