Hadoop Corona介绍

标签: nextgen-mapreduce 下一代MapReduce(Hadoop Corona) Hadoop 源代码研究 facebook | 发表时间:2012-11-11 22:27 | 作者:Dong
出处:http://dongxicheng.org
作者: Dong | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及 版权声明
网址: http://dongxicheng.org/hadoop-corona/hadoop-corona/

1.    背景

Hadoop Corona是facebook开源的下一代MapReduce框架。其基本设计动机和Apache的YARN一致,在此不再重复,读者可参考我的这篇文章 “下一代Apache Hadoop MapReduce框架的架构”

2.    基本组件介绍

(1)     Cluster Manager 类似于YARN中的Resource Manager,负责资源分配和调度。Cluster Manager掌握着各个节点的资源使用情况,并将资源分配给各个作业(默认调度器为Fair Scheduler)。同YARN中的Resource Manager一样,Resource Manager是一个高度抽象的资源统一分配与调度框架,它不仅可以为MapReduce,也可以为其他计算框架分配资源。

(2)     Corona Job Tracker 类似于YARN中的Application Master,用于作业的监控和容错,它可以运行在两个模式下:1) 作为JobClient,用于提交作业和方便用户跟踪作业运行状态 2)   作为一个Task运行在某个TaskTracker上。与MRv1中的Job Tracker不同,每个Corona Job Tracker只负责监控一个作业。

(3)     Corona Task Tracker 类似于YARN中的Node Manager,它的实现重用了MRv1中Task Tracker的很多代码,它通过心跳将节点资源使用情况汇报给Cluster Manager,同时会与Corona Job Tracker通信,以获取新任务和汇报任务运行状态。

(4)     Proxy Job Tracker 用于页面展示一个作业的实际运行信息。

3.    Hadoop Corona工作流程

本节介绍Hadoop Corona的工作流程。 当用户提交一个作业后,Hadoop Corona分两个阶段运行该作业,首先由RemoteJTProxy向Cluster Manager申请资源,以启动一个Corona Job Tracker,然后Corona Job Tracker向Cluster Manager申请资源,运行该作业的任务。

3.1      Corona Job Tracker介绍

Hadoop Corona的最大创新的之一是CoronaJobTracker的设计方法。CoronaJobTracker存在三种工作模式,分别是:

(1)     InProgress 此时,CoronaJobTracker是一个客户端,用户可用于提交作业或者跟踪作业运行状态。

(2)     Forwarding 此时,CoronaJobTracker是一个信息转发者,它只是将作业的信息转发给另外一个CoronaJobTracker。

(3)     Standlone 最终的CoronaJobTracker,此时,CoronaJobTracker才执行类似于MRv1中的功能(但一个CoronaJobTracker只会管理一个作业),即完成资源申请和作业监控。

当用户在JobClient端提交作业时,如果设置了使用Hadoop Corona(如果没有设置,则提交到MRv1的JobTracker上),则会创建一个CoronaJobTracker,该CoronaJobTracker此时运行在InProgress模式下。之后,该CoronaJobTracker会判断用户是否设置了强制使用Standlone模式(可通过mapred.coronajobtracker.forceremote设置,默认是flase)或者该作业的Map Task数目是否超过1000个(可通过参数mapred.coronajobtracker.remote.threshold配置),如果是,则该CoronaJobTracker便会转为Forwarding模式,进而将作业提交到一个RemoteJTProxy上,具体后续过程见下一节分析;如果不是,则说明该作业是小作业,直接在该CoronaJobTracker上运行作业即可,这就降低了小作业延时,但可能会出现负载不均衡得问题(比如多个用户同时在一个JobClient上提交大量小作业)。

3.2      启动Corona Job Tracker过程分析

为了与MRv1兼容,Hadoop Corona仍由JobClient提交作业,但里面的代码已经经过修改:如果采用Corona,则会创建一个CoronaJobTracker对象提交作业(CoronaJobTracker有可充当多个角色,其中一个角色是JobClient,即客户端),之后过程如下( 注意,本节介绍的是CoronaJobTracker远程启动方式,对于小作业,CoronaJobTracker直接在客户端启动,因此,这一节介绍的步骤会直接跳过):

步骤1 JobClient与RemoteJTProxy通信,要求并等待其启动CoronaJobTracker。

步骤2 RemoteJTProxy收到请求后,向Cluster Manager申请资源。

步骤3 Cluster Manager中的Fair Scheduler调度器为其分配合适的资源,并push给RemoteJTProxy。

步骤4 RemoteJTProxy根据分配到的资源(在哪个TaskTracker上,可使用多少资源),与对应的CoronaTaskTracker通信,要求它启动CoronaJobTracker。

步骤5 CoronaTaskTracker成功启动CoronaJobTracker后,告诉RemoteJTProxy,然后就再由RemoteJTProxy告诉JobClient。

步骤6 CoronaJobTracker(即JobClient)得知CoronaJobTracker启动成功后,向RemoteJTProxy提交作业,然后由RemoteJTProxy进一步将作业提交到刚刚启动的CoronaJobTracker上。

至此,一个作业提交成功。

3.3 资源申请与任务启动过程分析

首先需要注意的是,各个CoronaTaskTracker会通过心跳周期性的将本节点上资源使用情况汇报给Cluster Manager,因此,Cluster Manager掌握着各个节点的资源使用情况。

CoronaJobTracker负责为某个作业申请资源,并与CoronaTaskTracker通信,运行它的Task,总之,CoronaJobTracker功能如下:

(1)     向Cluster Manager申请资源

(2)     释放资源与资源重用。 Cluster Manager中的调度器支持资源抢占,可随时命令某个CoronaJobTracker释放资源,另外,CoronaJobTracker可根据需要,自行决定资源是不是重用,即某个Task运行完后,可不必归还给Cluster Manager,可再给其他Task使用。

(3)     与CoronaTaskTracker通信,以启动任务。

(4)     任务推测执行,具体可参考 “Hadoop中Speculative Task调度策略”

(5)     任务容错。当任务执行失败后,向Cluster Manager重新申请资源,以重新运行该任务。

资源申请与任务启动过程如下图所示,已经非常清楚,在此不赘述。

4.    Hadoop Corona实现

Hadoop Corona位于目录hadoop-20-yahoo\src\contrib\corona下,读者可直接从 https://github.com/facebook/hadoop-20/tree/master/src/contrib/corona上下载。Hadoop Corona代码由两部分组成:

(1)     org.apache.hadoop.corona        Hadoop Corona核心实现,用于资源分配和调度,与具体的分布式计算框架(如Storm、Spark等)无关。

(2)     org.apache.hadoop.mapred      改造后的MRv1,使之能够运行在Hadoop Corona上。用户可仿照该实现,将其他计算框架移植到Hadoop Corona中。

Hadoop Corona中CoronaJobTracker与ClusterManager的通信用到了thrift,它们既是thrift Client,也是Thrift Server,具体如下:

(1)     CoronaJobTracker需与ClusterManager通信,以申请资源,此时ClusterManager是thrfit Server,具体见ClusterManager.thrift中的service ClusterManagerService定义。

(2)     当ClusterManager中的调度器为CoronaJobTracker分配到资源后,采用push机制直接推送给CoronaJobTracker,此时CoronaJobTracker是thrift Server,具体见ClusterManager.thrift中的service SessionDriverService定义。

CoronaJobTracker与CoronaTaskTracker之间的通信机制与MRv1基本一致,在此不赘述。

此外,Hadoop Corona重新实现了JobInProgress(CoronaJobInProgress)和TaskInProgress(CoronaTaskInProgress),但重用了MRv1的Task、MapTask和ReduceTask类。

5.    总结

Hadoop Corona与Apache YARN设计动机和设计思路基本一致,但其稳定性和可用性(这里指是否可以使用,呵呵)有待进一步考证。

与Hadoop Corona类似的系统还有Apache YARN和Mesos,它们之间的异同可参考我的这篇文章: “统一资源管理与调度平台(系统)介绍”

原创文章,转载请注明: 转载自 董的博客

本文链接地址: http://dongxicheng.org/hadoop-corona/hadoop-corona/


Copyright © 2012
This feed is for personal, non-commercial use only.
The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:
)

相关 [hadoop corona] 推荐:

Hadoop Corona介绍

- - 董的博客
Dong | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及 版权声明. 网址: http://dongxicheng.org/hadoop-corona/hadoop-corona/. Hadoop Corona是facebook开源的下一代MapReduce框架. 其基本设计动机和Apache的YARN一致,在此不再重复,读者可参考我的这篇文章 “下一代Apache Hadoop MapReduce框架的架构”.

Facebook使用Corona提升Hadoop的可伸缩性

- - InfoQ cn
Facebook已经 开源了Corona,这是一款内部开发的用以改善Hadoop MapReduce调度的软件. Corona将集群管理和作业跟踪这两个关键任务分开. 这与 Apache YARN在概念上不谋而合,YARN也是MapReduce调度器和资源管理器的一个改进版本. Facebook的工程团队发表了一篇文章来 解释Corna及其背景.

跨平台工具详解之四:Ansca Mobile (Corona)

- - Web App Trend
本篇文章为大家详细介绍Ansca的核心产品Corona和Appcelerator的核心产品Titanium,其中包括包括产品&技术支持,市场份额和定位等内容. Ansca Mobile位于California,Palo Alto,成立于2008年. 2009年6年推出了Corona. Ansca Mobile约有15个员工,都拥有开发Adobe和Apple软件(包括Photoshop和Flash Lite)的资历.

浅谈Borg/YARN/Mesos/Torca/Corona一类系统

- - 董的博客
Dong | 新浪微博: 西成懂 | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及 版权声明. 网址: http://dongxicheng.org/mapreduce-nextgen/borg-yarn-mesos-torca-corona/. Borg(来自Google), YARN(来自Apache,属于Hadoop下面的一个分支,开源), Mesos(来自Twitter,开源), Torca(来自腾讯搜搜), Corona(来自Facebook,开源)一类系统被称为资源统一管理系统或者资源统一调度系统,它们是大数据时代的必然产物.

Hadoop Streaming 编程

- - 学着站在巨人的肩膀上
Hadoop Streaming是Hadoop提供的一个编程工具,它允许用户使用任何可执行文件或者脚本文件作为Mapper和Reducer,例如:. 采用shell脚本语言中的一些命令作为mapper和reducer(cat作为mapper,wc作为reducer). 本文安排如下,第二节介绍Hadoop Streaming的原理,第三节介绍Hadoop Streaming的使用方法,第四节介绍Hadoop Streaming的程序编写方法,在这一节中,用C++、C、shell脚本 和python实现了WordCount作业,第五节总结了常见的问题.

Hadoop使用(一)

- Pei - 博客园-首页原创精华区
Hadoop使用主/从(Master/Slave)架构,主要角色有NameNode,DataNode,secondary NameNode,JobTracker,TaskTracker组成. 其中NameNode,secondary NameNode,JobTracker运行在Master节点上,DataNode和TaskTracker运行在Slave节点上.

Hadoop MapReduce技巧

- - 简单文本
我在使用Hadoop编写MapReduce程序时,遇到了一些问题,通过在Google上查询资料,并结合自己对Hadoop的理解,逐一解决了这些问题. Hadoop对MapReduce中Key与Value的类型是有要求的,简单说来,这些类型必须支持Hadoop的序列化. 为了提高序列化的性能,Hadoop还为Java中常见的基本类型提供了相应地支持序列化的类型,如IntWritable,LongWritable,并为String类型提供了Text类型.

Hadoop TaskScheduler浅析

- - kouu's home
TaskScheduler,顾名思义,就是MapReduce中的任务调度器. 在MapReduce中,JobTracker接收JobClient提交的Job,将它们按InputFormat的划分以及其他相关配置,生成若干个Map和Reduce任务. 然后,当一个TaskTracker通过心跳告知JobTracker自己还有空闲的任务Slot时,JobTracker就会向其分派任务.

HADOOP安装

- - OracleDBA Blog---三少个人自留地
最近有时间看看hadoop的一些东西,而且在测试的环境上做了一些搭建的工作. 首先,安装前需要做一些准备工作. 使用一台pcserver作为测试服务器,同时使用Oracle VM VirtualBox来作为虚拟机的服务器. 新建了三个虚拟机以后,安装linux,我安装的linux的版本是redhat linux 5.4 x64版本.

Hadoop RPC机制

- - 企业架构 - ITeye博客
RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. Hadoop底层的交互都是通过 rpc进行的. 例如:datanode和namenode 、tasktracker和jobtracker、secondary namenode和namenode之间的通信都是通过rpc实现的.