Corona 笔记

2013-05-12 by Leon

Corona 初探

本周关注了一下另一种号称下一代MapReduce的框架:Corona。它是facebook的开源框架,代码在:

https://github.com/facebook/hadoop-20/tree/master/src/contrib/corona

Cornna的设计需求与Apache的YARN框架十分相似,它的发布文档:

Under the Hood: Scheduling MapReduce jobs more efficiently with Corona

其中提到,当前Map-Reduce所使用的single Job Tracker在Facebook的运行环境下已经遇到瓶颈,在Hadoop Corona中,集群的资源是由central Cluster Manager统一分配调度,每个job拥有各自单独的Corona Job Tracker,这些与YARN框架的设计思路非常相近,解决了Map-Reduce中存在的扩展性、单点故障等不足。

相比于YARN,Corona似乎更贴近Map-Reduce的原版,其代码在原版Map-Reduce基础上修改而来,似乎更贴近原有Map-Reduce的用户;另一大优势在于Corona所采用的Push-based通信机制,在原版Map-Reduce和YARN中,采用轮询方式使client获取信息,比如心跳机制,当规模过大后,会产生一定延迟,而Corona采用Push-based通信机制,server直接把信息推送至client,为实现这一通信机制,Corona似乎采用了更多的通信协议(待考证)。

Corona相比与Yarn的缺点也是由于它更贴近原版所产生,比如Corona不能提供Yarn的用户设置所需内存、CPU等特性;任务调度中仍采用slot作为资源分配元,资源利用率不如Yarn;Corona也不支持Yarn那种灵活的多计算框架支持,因为它的TaskTracker还是执行Map和Reduce task。 总的来说,Corona更像是对原版Map-Reduce的升级,从代码量上也可见一斑,Yarn的代码 十五万行代码完全重构,与原版Map-Reduce没有任何复用,而Corona相对原版有大量的重复,更接近与改进了部分框架的升级。

Corona说明书上宣称的特点

  • Better scalability and cluster utilization
  • Lower latency for small jobs
  • Ability to upgrade without disruption
  • Scheduling based on actual task resource requirements rather than a count of map and reduce tasks

Corona的基本组件

Corona架构Corona

  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 用于离线展示一个作业的历史运行信息,包括Counter、metrics、各个任务运行信息等。

Corona框架的搭建(single node)

Source

https://github.com/facebook/hadoop-20/tree/master/src/contrib/corona

Building

Start in the hadoop-20 parent path and compile the code with:

ant -Dversion=0.20 clean jar bin-package

Starting up the cluster

  • First, set up the required environment and useful aliases.

    source singleNodeHadoop/singleNodeSwitch.sh corona

  • If this is the first time, format the namespace in /tmp with

    hadoop namenode -format
    Start HDFS:
    start-dfs
    Start Corona:
    start-corona
    
  • There are corresponding commands to stop the clusters stop-dfs

    stop-corona

At this point you will be able to look at the local Corona Cluster Manager UI.

Example Job

export HADOOP_CLASSPATH=$HADOOP_HOME/build/contrib/corona/lib/libthrift-0.7.0.jar hadoop jar build/hadoop-0.20-examples.jar sleep -Dmapred.fairscheduler.pool=group_a.pool_sla -m 10 -r 2

Comments