您的位置:首页 > 运维架构

20150814-hadoop学习笔记

2015-08-14 10:13 281 查看
1、hadoop 1.0 的 MapReduce作业机制

可以通过一行代码来运行一个MapReduce作业。

客户端:提交MapReduce作业。
jobtracker:协调作业的运行。jobtracker是一个java应用程序,他的主类是JobTracker。
tasktracker:运行作业划分后的任务。tasktracker是java应用程序,他的主类是TaskTracker。
分布式文件系统,用来在其他实体间共享作业文件。



作业提交:







作业的初始化:

(步骤5)JobTracker接收了submitJob()的方法调用后,会把此调用列入 作业调度器 (job scheduler) 进行调度,并初始化一个表示正在运行作业的对象--封装任务和记录信息,以便跟踪任务的状态和进程。

(步骤6)为了创建任务运行列表,作业调度器 首先从hdfs获取 JobClient 已算好的输入分片信息,每个分片一个map,创建reduce任务的数量。

任务的分配:

tasktracker运行一个简单的循环来定期发送“心跳”给jobtracker来告知其是否还存活。心跳是两者之间的消息通道。例如tasktracker已经准备好了去接收新的任务。
对于map任务,jobtracker会考虑tasktracker的网络位置,并选取一个距离其输入分片文件最近的tasktracker。尽量做到 数据本地化、机架本地化。
对于map和reduce任务,tasktracker有固定数量的任务槽。例如:一个tasktracker可以同时运行2个map和2个reduce。准确的数量由核的数量和内存大小决定。

任务的执行:

通过HDFS把作业的JAR文件复制到tasktracker所在的文件系统。实现JAR包本地化。
tasktracker新建一个Taskrunner实例来运行任务。

作业的调度:

FIFO先进先出调度。
每个任务都会最大限度的利用集群的资源,也就是说一个很大任务,就会霸占整个集群的资源。
通过mapred.job.priority属性或者JobClient的setJobPriority()方法来设定优先级别(可以选择),但是不支持抢占。所以高优先级的任务也要等已经开始了的低优先级任务跑完了才能开始。

Fair Scheduler让每个用户公平的共享集群能力。

它能让某个用户的短的作业在合理的时间内完成,即便是另一个用户的长时间作业正在运行。
每个用户获得的资源不会因为任务的多少而有所不同。
每个用户都有自己的作业池。
Fair Scheduler支持抢占,如果一个作业池没有得到足够的资源,它会终止其他池的资源过多的任务,以便把作业槽分给运行资源不足的池。
Fair Scheduler是一个后续模块。要使用它,需要把JAR包放在Hadoop的类路径(classpath),即把它从hadoop的contrib/fairscheduler目录下复制到lib目录下。设置mapred.jobtracker.taskScheduler=org.apache.hadoop.mapred.FairScheduler

2、hadoop 2.0 的 MapReduce作业机制
http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: