分布式系统Hadoop源码阅读与分析(一):作业调度器实现机制

标签: 分布 系统 hadoop | 发表时间:2011-09-04 16:33 | 作者:大圆那些事 otter
出处:http://www.cnblogs.com/

上一篇博文对Hadoop的作业调度器进行了介绍,我们知道,JobTracker和TaskTracker是Hadoop作业调度过程中最核心的两个部分,前者负责map/reduce作业的调度与分派,后者负责map/reduce作业的实际执行,它们之间通过RPC机制进行通讯。下面将对Hadoop 0.20.2版本中作业调度相关源码进行分析,至于JobTracker和TaskTracker中与作业调度无关的源码部分,并未进行详细介绍。

1.     JobTracker部分

1.1 JobTracker

JobTracker是作业调度的控制类,实现了InterTrackerProtocolTaskTrackerManager接口(当然,还有其他接口,这里我们只关心调度相关的接口),维护一个TaskScheduler的实例,并托管其生命周期。

JobTracker的主方法中,首先,构造JobTracker实例对象,在过程中,TaskScheduler实例会伴随JobTracker一起被构造,另外,通过RPC,构造RPC服务器interTrackerServer;当完成JobTracker的构造后,接着给JobTrackerTaskScheduler类型变量taskScheduler设置TaskTrackerManager实例字段为当前的JobTracker实例。然后,调用JobTrackerofferService方法开始提供服务。

JobTracker.heartbeat方法主要是TaskTracker端远程调用时用到的方法,其主要作用就是分派具体任务(将Task封装成LaunchTaskAction),并将封装后的Task分发到TaskTracker端。

1.2 TaskScheduler

      TaskScheduler是作业调度器的抽象基类,实现了Configurable接口,具体的实现有JobQueueTaskSchedulerLimitTasksPerJobTaskScheduler

      TaskScheduler中,通过维护ConfigurationTaskTrackerManager成员变量,实现对作业队列中所有Job的调度过程,具体见assignTasks方法。

1.3 JobQueueTaskScheduler

      JobQueueTaskScheduler继承于TaskScheduler,为Hadoop中的默认调度器,实现FIFO调度队列,作业队列按优先级和提交时间进行排序。

1.4 LimitTasksPerJobTaskScheduler

      LimitTasksPerJobTaskScheduler继承于JobQueueTaskScheduler,在JobQueueTaskScheduler基础上,可以对每个JobTask总数作限制。

1.5 TaskTrackerManager

      TaskTrackerManager接口用于管理运行中的Cluster的所有TaskTracker信息,它被JobTracker实现,同时供TaskScheduler调度使用。

1.6 InterTrackerProtocol

      InterTrackerProtocol接口是JobTrackerTaskTracker之间通信的协议接口, JobTracker作为RPC调用的Server端,实现InterTrackerProtocol接口,供TaskTracker远程调用。

1.7 Configurable

      Configurable接口用于配置Configuration对象。

2.     TaskTracker部分

2.1 TaskTracker

Task的执行实际是由TaskTracker发起的,TaskTracker会定期(缺省为3秒钟,参见MRConstants类中定义的HEARTBEAT_INTERVAL变量)与JobTracker进行一次通信,报告自己Task的执行状态,接收JobTracker的指令等,TaskTracker里面会通过循环的方式查找。

2.2 TaskTrackerStatus

      TaskTrackerStatusTaskTracker的状态类,记录了TaskTracker的资源使用情况。

2.3 HeartbeatResponse

      HeartbeatResponse是心跳回复信息类,记录了经TaskTracker发出的心跳,由JobTracker处理后产生的回复信息。

2.4 TaskTrackerAction

TaskTrackerAction记录TaskTrackeraction,它有四个子类,分别是KillJobActionKillTaskActionLaunchTaskActionCommitTaskAction

2.5 TaskTracker$TaskInProgress

TaskInProgressTaskTracker的内部类,它主要负责对每个执行中的Task任务的监控和具体调度。

2.6 TaskTracker$TaskLauncher

TaskLauncher是个继承于ThreadTaskTracker的内部类,在这里面会维护一个TaskInProgress的链表:

private List<TaskInProgress> tasksToLaunch;

该列表中的每个TaskInProgress 实例对应一个TaskUnit任务。

该类的run方法才是主体关键之处,它会循环判断是否tasksToLaunch中有新任务要做,有就从该列表中拿出来,然后去调用TaskTracker.startNewTask(TaskInprogress)去开启一个新任务。

2.7 Task

Task为抽象类,代表任务,它有两个子类:MapTask ReduceTask

2.8 TaskRunner

      TaskRunnerTask的执行类,它有两个子类:MapTaskRunnerReduceTaskRunner

3.     RPC过程

3.1 RPC.getServer()

       RPC服务端接口。为指定协议的实例,在指定的地址和端口上启动服务。

3.2 RPC.waitForProxy()

       RPC客户端接口,创建一个指定服务端的代理。

作者: 大圆那些事 发表于 2011-09-04 16:33 原文链接

评论: 0 查看评论 发表评论


最新新闻:
· 大学生开设斗鸡网店月入数千元(2011-09-05 08:35)
· 史玉柱发起首个网游下乡计划 亿元拓荒农村市场(2011-09-05 08:34)
· 对赌协议多家企业均失败:四问题困扰协议企业(2011-09-05 08:31)
· 国外多家大型网站遭受黑客攻击 DNS解析记录被篡改(2011-09-05 08:29)
· Best Buy或于10月21日开售iPhone 5(2011-09-05 08:25)

编辑推荐:JavaScript 设计模式

网站导航:博客园首页  我的园子  新闻  闪存  小组  博问  知识库

相关 [分布 系统 hadoop] 推荐:

Hadoop分布式文件系统HDFS和OpenStack对象存储系统Swift有何不同?

- - ITeye博客
HDFS使用 集中式单一节点架构(NameNode)来维护文件系统元数据,而在Swift中,元数据 分布在整个集群中并拥有多个副本. 注意:集中式元数据存储使HDFS存在单点故障和扩展性问题,因此规模越大就性能越低,就越难扩展甚至不能扩展,所幸的是HDFS2使用NameNode HA和HDFS Federation解决了这两个问题.

Facebook的实时Hadoop系统

- wangjia - Solrex Shuffling
Facebook 在今年六月 SIGMOD 2011 上发表了一篇名为“Apache Hadoop Goes Realtime at Facebook”的会议论文 (pdf),介绍了 Facebook 为了打造一个实时的 HBase 系统使用到的独门秘技. 由于该论文提到的应用场景与小弟负责的系统要解决的问题域有相似之处,因而抽时间仔细阅读了这篇论文.

Hadoop与分布式计算

- 透明 - 丕子
写本文由leftnoteasy发布于http://leftnoteasy.cnblogs.com 本文可以被全部或者部分的使用,但请注明出处,如果有问题,可以联系wheeleast (at) gmail.com, 也可以加作者的新浪微博:http://weibo.com/leftnoteasy. 很久没有写写博客了,之前主要是换工作,耽误了很多的时间,让人也变得懒散,不想花大时间来写东西.

hadoop分布式配置

- - CSDN博客云计算推荐文章
一、前面的部分见伪分布式配置. 二、实现SSH无密码登录远程主机(只在源主机上配置). 注意:以上scp命令表示把authoriezd_keys远程复制到对应主机的相应目录下. slave2是目的主机的名字,需要在源主机的/etc/hosts下配置slave2以及对应的IP地址 192.168.0.5.

分布式系统Hadoop源码阅读与分析(一):作业调度器实现机制

- otter - 博客园-首页原创精华区
上一篇博文对Hadoop的作业调度器进行了介绍,我们知道,JobTracker和TaskTracker是Hadoop作业调度过程中最核心的两个部分,前者负责map/reduce作业的调度与分派,后者负责map/reduce作业的实际执行,它们之间通过RPC机制进行通讯. 下面将对Hadoop 0.20.2版本中作业调度相关源码进行分析,至于JobTracker和TaskTracker中与作业调度无关的源码部分,并未进行详细介绍.

ubuntu下hadoop全分布安装

- - CSDN博客云计算推荐文章
个人历时3天遭遇各种问题才安装好,虽然网上很多教程,但是还是自己写一个总结一下. 转载请注明出处: http://hanlaiming.freetzi.com/?p=77. 1.在所有机器上安装ubuntu12.04,过程不赘述. 在安装过程中命名所有的用户名是hadoop,机器名分别为minglaihan,node1,node2,其中minglaihan作为主节点,其他两个是从节点.

从问题域出发认识Hadoop生态系统

- - 董的博客
Dong | 新浪微博: 西成懂 | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及 版权声明. 网址: http://dongxicheng.org/mapreduce-nextgen/rethinking-hadoop-from-problems-solved/. 本博客的文章集合: http://dongxicheng.org/recommend/.

文章: Hadoop in 360——专访360系统部总监唐会军

- - InfoQ cn
在前不久的Hadoop in China 2011大会上,360系统部总监 唐会军接受了InfoQ的专访,谈到360公司内部对Hadoop的使用,并对Hadoop项目和HBase面临的挑战提出了自己的看法. QClub(西安站)——前端崛起(2月25日 免费报名中. Inedo合作伙伴Alex Papadimoulis谈代码之丑之美.

基于Hadoop的Clearinghouse系统架构设计

- - CSDN博客架构设计推荐文章
1 Clearinghouse(数据交换中心)介绍.        Clearinghouse(数据交换中心)是随着异构组织之间共享空间数据而产生的,它的目标是建立一个虚拟空间数据机制,用来收集空间数据的元数据和发布服务,以便高效的获取空间数据,同时利用空间数据提供决策支持. 通常建立Clearinghouse的基本途径是通过一套元数据标准,收集各个组织中空间数据的元数据,通过服务接口帮助用户确定存在哪些数据,以及获取这些数据的方式等.

hadoop集群调优-OS和文件系统部分

- - 开源软件 - ITeye博客
根据Dell(因为我们的硬件采用dell的方案)关于hadoop调优的相关说明,改变几个Linux的默认设置,Hadoop的性能能够增长大概15%. 文件描述符是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表. 当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符.