hadoop学习笔记之深入了解map-reduce

map-reduce作业

map-reduce是hadoop分布式应用操作的核心,其中心思想是,基于分布式hdfs存储系统,map任务在hdfs各个节点中独立并行,对数据进行分布式处理,处理结果交由reduce任务进行整合处理。这样看来,MapReduce分布式处理的高效主要体现在map任务中。

mapreduce工作时以job为单位进行,在客户端配置job相关信息类JobConf,配置完成后,JobClient.runJob(jobConf)即可运行mapreduce作业。其过程大致如下:

1.客户端将job提交到JobTracker节点
2.JobTracker将job相关信息封装成一个对象,加入到作业队列中
3.JobTracker内作业调度器根据JobClient计算好的数据分区信息,为每个分区创建一个map任务,reduce任务数量由配置决定
4.JobTracker根据分区数据所在节点分配最近的TaskTracker执行map任务,最佳情况下,二者在同一节点
5.TaskTracker中有固定数量的槽,用来运行map和reduce任务;TaskTracker接到任务后默认会创建TaskRunner对象,创建新的jvm执行任务,为了避免干扰,一个jvm对应一个任务;可以配置每个jvm最多执行任务数,默认为1
6.TaskTracker通过每隔一段时间与JobTracker发送“心跳”进行通信,其中包括任务执行进度和状态等。当任务失败时,JobTracker会重新分配任务给其他节点。
7.Map任务中将map函数执行完毕之后,会对输出的值进行shuffle,默认是进行按键排序。
8.map任务会设置一个缓冲区用来存放中间输出,缓冲区中数据量达到一定百分比之后,会将数据写入到磁盘中。combiner会在这之前执行
9.map执行完成后,输出通过网络传递到reduce任务节点作为输入数据。

map任务分配方式

在hdfs中,每个文件分区地存储在不同DataNode中,NameNode中存放这些位置信息。JobTracker内作业调度器分配map任务时,先根据客户端计算好的分区信息,根据分区数量,划分并分配map任务;理想情况下,每一个map任务执行节点TaskTracker与其数据存放节点DataNode是同一个节点。

TaskTracker

TaskTraceker中有一定数量的槽,用来执行map或reduce任务。当任务分配下来之后,创建一个TaskRunner来启动JVM虚拟机执行任务。执行任务过程中,每隔段时间向JobTracker发送任务进度以及状态,JobTracker也由此判断TaskTracker是否可用。若TaskTracker遇到异常执行任务失败,将任务状态设置为失败并通知JobTracker,JobTracker将重新分配该任务给其他节点。如果JobTracker十分钟(可以设置)未收到TaskTracker的反馈,则判定任务失败。

发展

在集群节点超过4000个时,JobTracker将达到极限,影响可伸缩性,由此在hadoop2.2版本之后,map-reduce基于yarn进行实现,将JobTracker和TaskTracker替换为ResourceManager、NodeManager、ApplicationMaster。

参考资料:《hadoop权威指南》第六、七、八章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值