您现在的位置 >> Hadoop教程 >> Hadoop实战 >> yarn专题  
 

Apache Spark源码走读之8

【作者:Hadoop实战专家】【关键词:分布式计算 】 【点击:37499次】【2013-07-1】
上述说了一大堆,说白了在编写YARN Application时,主要是实现Client和ApplicatonMaster。 结合Spark Standalone的部署模式和YARN编程模型的要求,做了一张表来显示Spark Standalone和Spark on Yarn的对比。 将SparkPi部署到Yarn上,下述是具体指令。 更多知识库文章.  

相关热门搜索:

大数据标签:hadoop yarn spark storm bigdata

富贵有定数,学问则无定数。求一分,便得一分

快乐源于简单

* 博客园
* 首页
* 博问
* 闪存
* 新随笔
*
* 订阅
* 管理

随笔-50  文章-0  评论-21

Apache Spark源码走读之8 -- Spark on Yarn

欢迎转载,转载请注明出处,徽沪一郎。

概要

Hadoop2中的Yarn是一个分布式计算资源的管理平台,由于其有极好的模型抽象,非常有可能成为分布式计算资源管理的事实标准。其主要职责将是分布式计算集群的管理,集群中计算资源的管理与分配。

Yarn为应用程序开发提供了比较好的实现标准,Spark支持Yarn部署,本文将就Spark如何实现在Yarn平台上的部署作比较详尽的分析。

Spark Standalone部署模式回顾

上图是Spark Standalone Cluster中计算模块的简要示意,从中可以看出整个Cluster主要由四种不同的JVM组成

1. Master 负责管理整个Cluster,Driver Application和Worker都需要注册到Master
2. Worker 负责某一个node上计算资源的管理,如启动相应的Executor
3. Executor RDD中每一个Stage的具体执行是在Executor上完成
4. Driver Application driver中的schedulerbackend会因为部署模式的不同而不同

换个角度来说,Master对资源的管理是在进程级别,而SchedulerBackend则是在线程的级别。

启动时序图

YARN的基本架构和工作流程

YARN的基本架构如上图所示,由三大功能模块组成,分别是1) RM (ResourceManager) 2) NM (Node Manager) 3) AM(Application Master)

作业提交

1. 用户通过Client向ResourceManager提交Application, ResourceManager根据用户请求分配合适的Container,然后在指定的NodeManager上运行Container以启动ApplicationMaster
2. ApplicationMaster启动完成后,向ResourceManager注册自己
3. 对于用户的Task,ApplicationMaster需要首先跟ResourceManager进行协商以获取运行用户Task所需要的Container,在获取成功后,ApplicationMaster将任务发送给指定的NodeManager
4. NodeManager启动相应的Container,并运行用户Task

实例

上述说了一大堆,说白了在编写YARN Application时,主要是实现Client和ApplicatonMaster。实例请参考github上的simple-yarn-app.

Spark on Yarn

结合Spark Standalone的部署模式和YARN编程模型的要求,做了一张表来显示Spark Standalone和Spark on Yarn的对比。

Standalone YARN Notes
Client Client standalone请参考spark.deploy目录
Master ApplicationMaster
Worker ExecutorRunnable
Scheduler YarnClusterScheduler
SchedulerBackend YarnClusterSchedulerBackend

作上述表格的目的就是要搞清楚为什么需要做这些更改,与之前Standalone模式间的对应关系是什么。代码走读时,分析的重点是ApplicationMaster, YarnClusterSchedulerBackend和YarnClusterScheduler

一般来说,在Client中会显示的指定启动ApplicationMaster的类名,如下面的代码所示

    ContainerLaunchContext amContainer =
        Records.newRecord(ContainerLaunchContext.class);
    amContainer.setCommands(
        Collections.singletonList(
            "$JAVA_HOME/bin/java" +
            " -Xmx256M" +
            " com.hortonworks.simpleyarnapp.ApplicationMaster" +
            " " + command +
            " " + String.valueOf(n) +
            " 1>" + ApplicationConstants.LOG_DIR_EXPANSION_VAR + "/stdout" +
            " 2>" + ApplicationConstants.LOG_DIR_EXPANSION_VAR + "/stderr"
            )
        );

但在yarn.Client中并没有直接指定ApplicationMaster的类名,是通过ClientArguments进行了封装,真正指定启动类的名称的地方在ClientArguments中。构造函数中指定了amClass的默认值是org.apache.spark.deploy.yarn.ApplicationMaster

实例说明

将SparkPi部署到Yarn上,下述是具体指令。

$ SPARK_JAR=./assembly/target/scala-2.10/spark-assembly-0.9.1-hadoop2.0.5-alpha.jar     ./bin/spark-class org.apache.spark.deploy.yarn.Client       --jar examples/target/scala-2.10/spark-examples-assembly-0.9.1.jar       --class org.apache.spark.examples.SparkPi       --args yarn-standalone       --num-workers 3       --master-memory 4g       --worker-memory 2g       --worker-cores 1

从输出的日志可以看出, Client在提交的时候,AM指定的是org.apache.spark.deploy.yarn.ApplicationMaster

13/12/29 23:33:25 INFO Client: Command for starting the Spark ApplicationMaster: $JAVA_HOME/bin/java -server -Xmx4096m -Djava.io.tmpdir=$PWD/tmp org.apache.spark.deploy.yarn.ApplicationMaster --class org.apache.spark.examples.SparkPi --jar examples/target/scala-2.9.3/spark-examples-assembly-0.8.1-incubating.jar --args  'yarn-standalone'  --worker-memory 2048 --worker-cores 1 --num-workers 3 1> /stdout 2> /stderr

小结

spark在提交时,所做的资源申请是一次性完成的,也就是说对某一个具体的Application,它所需要的Executor个数是一开始就是计算好,整个Cluster如果此时能够满足需求则提交,否则进行等待。而且如果有新的结点加入整个cluster,已经运行着的程序并不能使用这些新的资源。缺少rebalance的机制,这点上storm倒是有。

参考资料

1. Launch Spark On YARN http://spark.apache.org/docs/0.9.1/running-on-yarn.html
2. Getting started Writing YARN Application http://hortonworks.com/blog/getting-started-writing-yarn-applications/
3. 《Hadoop技术内幕 深入解析YARN架构设计与实现原理》 董西成著
4. YARN应用开发流程  http://my.oschina.net/u/1434348/blog/193374 强烈推荐!!!

分类: Apache Spark

标签: Apache Spark

绿色通道: 好文要顶 关注我 收藏该文与我联系

徽沪一郎
关注 - 4
粉丝 - 55

+加关注

0

0

(请您对文章做出评价)

? 上一篇:Apache Spark源码走读之7 -- Standalone部署方式分析
? 下一篇:Apache Spark源码走读之9 -- Spark源码编译

posted @ 2014-05-15 10:48 徽沪一郎 阅读(575) 评论(0) 编辑 收藏

刷新评论刷新页面返回顶部

注册用户登录后才能发表评论,请 登录 或 注册,访问网站首页。

博客园首页博问新闻闪存程序员招聘知识库

最新IT新闻:
· 宋卫平看马云五味杂陈 为什么是恒大不是绿城
· 搜狗搜索APP上线 或与微信深度合作
· 京东现货开卖红米手机,加价100-200元
· 诺基亚与小鸟之后,Supercell成芬兰科技新大佬
· 蘑菇街完成2亿美元融资 估值10亿美元
? 更多新闻...

最新知识库文章:

· 面对“问题员工”:用其长,容其短
· 高效程序员的特征:聪明,懒惰
· 一个技术团队就像一个UGC社区
· 不懂技术的人不要对懂技术的人说这很容易实现
· 我所经历的“余额宝”的那些故事

? 更多知识库文章...

公告

邮箱: hs_xp@163.com

QQ: 58506256

QQ群: Spark零基础学习 367106111

昵称:徽沪一郎
园龄:1年6个月
粉丝:55
关注:4
+加关注

< 2014年6月 >

日 一 二 三 四 五 六
25 26 27 28 29 30 31
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 1 2 3 4 5

搜索

随笔分类(45)

* Apache Spark(14)
* Apache Storm(18)
* archlinux(1)
* Database(1)
* GDB(9)
* Hadoop(1)
* memory management(1)

随笔档案(50)

* 2014年6月 (1)
* 2014年5月 (9)
* 2014年4月 (6)
* 2014年3月 (1)
* 2014年2月 (4)
* 2014年1月 (4)
* 2013年12月 (3)
* 2013年11月 (3)
* 2013年10月 (1)
* 2013年9月 (7)
* 2013年8月 (1)
* 2013年6月 (1)
* 2013年5月 (2)
* 2013年4月 (3)
* 2013年3月 (4)

积分与排名

* 积分 - 15429
* 排名 - 9835

阅读排行榜

* 1. Apache Spark源码走读之1 -- Spark论文阅读笔记(1698)
* 2. Apache Spark源码走读之2 -- Job的提交与运行(1174)
* 3. Apache Storm源码阅读笔记(1137)
* 4. Apache Spark源码走读之3 -- Task运行期之函数调用关系分析(1062)
* 5. emacs+ensime+sbt打造spark源码阅读环境(876)

评论排行榜

* 1. Apache Storm 衍生项目之1 -- storm-yarn(5)
* 2. Apache Spark源码走读之9 -- Spark源码编译(4)
* 3. Apache Storm源码阅读笔记(2)
* 4. twitter storm源码走读之2 -- tuple消息发送场景分析(2)
* 5. Apache Spark源码走读之1 -- Spark论文阅读笔记(2)

Copyright ?2014 徽沪一郎

大数据系列yarn相关文章:

最新评论
宁静,致远2014-09-09 08:41:41
【中国联通成功部署大数据平台】12月14日消息,中国联通研究院副院长黄文良表示,今年中国联通成功将大数据和Hadoop技术引入到移动通信用户上网记录集中查询与分析支撑系统。截止到目前,我们已经部署了4.5PB的存储空间。其中,4.5PB存储分布在300个数据节点上,即每个节点配备15TB的存储空间。
renkerwin2014-09-09 05:16:04
@Brian O'Connor
砧木上的鱼2014-09-08 08:00:18
这个可以访问
淘宝玄侯2014-09-07 06:22:00
北京红象云腾系统技术有限公司招聘hadoop C++图像算法工程师,工作地点:北京,薪资待遇:5000及以上,详情请查看: http://t.cn/RvhC3Mc
新仔2014-09-06 12:43:43
百亿级实时大数据分析项目,为什么不用Hadoop?http://t.cn/8FhJXMj
DataCoder2014-09-05 07:35:16
为什么我运行hadoop jar hadoop-examples-1.1.2.jar 显示command not found
zoliy2014-09-04 05:13:51
话不多小妞2014-09-04 09:42:25
Hadoop web编程--REST API WebHDFS
戀と寂寞2014-09-03 04:54:42
认为终于把最近delay 的工作补完的时候,一个hadoop job 出了core,这个core 出在封装的python c 扩展上,很难调试,这是在考验一个人的耐性吗???
叶仔2014-09-02 03:28:10
利用hadoop mapreduce 做数据排序 - jkh753的专栏 - 博客频道 - CSDN.NET RPQNZQa
 
  • Hadoop生态系统资料推荐