【Spark你妈喊你回家吃饭-02】-我是一个凶残的spark

    学一门新鲜的技术,其实过程都是相似的,先学基本的原理和概念,再学怎么使用,最后深究这技术是怎么实现的,所以本章节就带你认识认识spark长什么样的,帅不帅,时髦不时髦(这货的基本概念和原理),接着了解spark有什么必杀技(spark的各种大招),我们如何使用它的必杀技,最后看看spark如何更加高效的组合它的必杀技,以及spark是如何练就这一身必杀技的。

         

一、spark帅不帅


· 五官长相-spark架构图

鼻子、眼睛、耳朵、眉毛、口,缺一不可,这斯就经长什么鸟样,先上照片,如下所示


  前文说到spark是分布式内存计算模型,既然是分布式,那就得明确老大(master) ,要不然各个小弟(worker)还不打起来,所以:

  master节点是老大,控制、管理和监督一帮小弟弟们正常衣食住行和生老病死(老大的地位是明显的:1.管理,2.监督,3.使唤),

  worker是小弟弟,接收老大的命令并且领取砍杀的任务,汇报砍杀的进度和结果给老大,

  Executor是马仔,就是那个真刀实枪去看人的小弟弟的小弟弟。

  client是客户,要干什么事情,都是它提出来,有什么活要干,他告知老大master

  driver:老大的司机,老大那么多事情,不可能每个事情都亲自监督,所以不同的事情(不同的应用),它都有driver来跟踪,driver来负责具体事务,一件事情拍一个司机(一个应用一个driver),司机是做事的入口(application的main方法)。

  sparkContext:做这件事情的流水帐本,什么时候搞事、谁搞事、搞的怎么样、是不是不搞了,都是sparkContext来记录。所以没有了sparkContext,那这个事情就没法搞了,一笔糊涂账。

  DAG Scheduler:老大做事的计划,所有的事情都是老大(master)来规划的,事情这么多,小弟也是有限的,所以老大必须规划做事的方式和方法-DAG Scheduler,这样才能将这些小弟更好的用起来

  RDD:具体计划执行的细节,记录了每个具体的做事方法,怎么做,在哪里做,拿什么做。

  所以事来了基本是这个流程:

  client(我要搞事)-> master(生意来了)->driver(老大会先思考好下面哪个小弟弟有能力去办,想好了之后就派司机去执行[driver申请资源、管理和跟踪])->Work(收到老大要搞事的指令,司机driver带来的老大指令)-> executor(一堆人马去搞事)。worker可能是群殴(多个worker执行),也可能是单挑(单个worker执行).


二、spark做事的套路


    spark考虑了多种情况的做事套路,这几种情况的区分在于司机(driver)在哪里工作:

    · 老大临时安排工作地点,

    · 在客户现场工作(client端),

    · 在老大的秘书办公室工作(yarn或mesos),所以工作地不一样,做事的套路也不同。

   下面一一介绍各种工作场景下的做事套路。


  (1)老大临时安排driver工作地点

  

作业执行流程描述:

 1.客户提交作业给老大Master,说一起搞事。

 2.老大master深思熟虑,决定搞事,并且确定了搞事办公地点(从众多小弟中选一个worker),让driver去选定的办公地点筹备并执行(选定的办公地点有个霸气的名号:Spark AppMaster)。driver先扎根下来(启动DriverRunner线程),然后正式启动做事计划(SchedulerBackend)。

3.老大master怕司机driver搞不定,与此同时,它也在通知其他兄弟们(其他worker)抄家伙(Work纠结马仔Exeuctor即ExecutorBackend

4. 兄弟们work都会带领马仔去司机driver那里报到,driver会结合每个worker的情况告诉具体的做事计划和做事方式DAGScheduler(计划分成多个步骤stage),小弟弟work用TaskScheduler记好,让马仔Exeuctor去执行,去砍杀。马仔们砍杀的时候,driver会密切注视,如果发现哪个马仔砍杀效率低,会让其他的马仔顶上,看谁砍杀效率更高(推测执行)。

5.计划中的所有stage被执行完了之后,各个worker汇报给driver,driver确定都做完了,就向master汇报战果。另外客户也会跳过master直接和driver联系关注砍杀的进度。

 (2)driver在客户现场办公





作业执行流程描述:

  1.司机driver到了客户现场,做好搞事准备工作,如计划好做事的策略和方式(DAGScheduler),回忆一下各个小弟都有什么装备和技能 (BlockManagerMaster);

2.司机dirver一切准备妥当,就去老大master那里汇报,可以号召小弟们干活了。

3.老大master号召小弟们(所有work节点)抄家伙(Work纠结马仔Exeuctor即ExecutorBackend

4. 后面的工作和前面的工作模式一样:兄弟们work都会带领马仔去司机driver那里报到,driver会结合每个worker的情况告诉具体的做事计划和做事方式DAGScheduler(计划分成多个步骤stage),小弟弟work用TaskScheduler记好,让马仔Exeuctor去执行,去砍杀。马仔们砍杀的时候,driver会密切注视,如果发现哪个马仔砍杀效率低,会让其他的马仔顶上,看谁砍杀效率更高(推测执行)。

5.计划中的所有stage被执行完了之后,各个worker汇报给driver,driver确定都做完了,就向master汇报战果。此时driver在客户现场,所有搞事的进度,客户也一目了然。

(3)在老大的秘书办公室工作-基于yarn



既然老大master选定了秘书yarn,那么主要的事情都是yarn来安排、管理和监控,所以yarn是整个业务的颜值和主事担当。让yarn主事之前,先看看yarn是何人,有什么本事,凭什么她就能成为老大的秘书。

  (1)yarn出世的背景

  

yarn的出现,完全是因为前辈mapreduce太忙太累导致的,mapreduce既要管理家务事(管理集群资源)还要为外面的业务操碎心(job的调度、监控和执行),叫谁都扛不住,所以为前辈mapreduce v1分忧,是yarn出现的主要原因。那前辈有哪些困扰的事情呢,总结起来有如下困恼:

   a.不能发展新的小弟 - 可扩展行不好,前辈MRV1因为又里里外外都去管,精力有限,如果来更多的小弟(slave),是管不来的,心有余而力不足,超过4000个小弟,再增加就会力不从心。

   b.随时都会面临解散- 可靠性差,因为是老大管小弟的机制,而老大Jobtracker只有一个,一旦老大哪天挂了,大家(tasktracker)都完蛋,随时可能卷铺盖回家。

   c.全体办事效率低-资源利用率低,这个不能怪前辈mapreduce,要怪就怪能管事的人太少了,事太多了,每天都忙的天昏地暗,忙尘够,所以做出点错误的决策,不了解小弟们的思想等等是时有发生的,下面的小弟抱怨也没办法,运作机制就这样。而且还有一个该死的机制,就是每件事情都分成2个包(map和reduce,当然也可以只有一个map),必须做了第一个才能去做第二个,或者第一个完成了百分之多少,才能去做第二个(map和reduce slot),并且要分先后,有先有后,就必然会有等待,有等待j就有资源,简直就是变态。

    总结起来,就是前辈mapreduce太忙,忙成狗,yarn就是为优化MR V1低效率的工作模式而生,就是这么横空出世、闪亮登场的。

   (2)yarn的架构及其技能


 yarn总结了前辈mapreduce v1工作累的原因:a.事无巨细的做事方式-又是管理家务,又是打理外面业务;b.任务分包的方式有问题(map slot和reduce slot),因此做了一些改进和优化

 (1) 明确分工,专业的人做专业的事 

    专业的人做专业的事情,首先分清出有哪些事情,才好安排专业人

    a,资源的管理,资源谁来统一分配和监控,资源被分配后如何监控与上报,怎么将资源的使用情况告知任务分配人员

    b.任务的管理,任务谁来统一分配和监控,领到任务的人如何监控自己的任务运行情况以及上报

     所以总结起来就2件屁事:资源的分配、监控和管理,任务的分配、监控和管理,以前这些事情都是jobtracker分配、监控和管理资源及任务,所有的东西都找他汇报,效率低的很。前车之鉴,惨不忍睹,因此,天才的hadoop设计者重新规划,将资源的管理和任务的管理剥离开。确定了三个角色

  · 统筹者:resourceManager,他负责资源的分配、管理和监控,同时也负责分配任务,但是不负责任务的具体监控。为什么他还要负责任务的分配,还不单独任务分配也交给其他人做,主要是因为,分配任务要结合资源的使用情况,需要时时刻刻知晓资源的情况,所以,就让resourceManger也负责分配任务。

    单个资源管理的马仔-nodeManager,集群中的每个节点都有nodemanager,负责监控节点中每个container的生老病死以及每个节点的健康状况。

     监控的马仔-applicationMaster,来了一个任务,resourceManager确定是不是要做,一旦做了,就会从众多兄弟中选一个人做为applicationMaster,由它来全场安排和监控任务的执行情况,applicationMaster一旦接到任务肯定要知道是由哪些兄弟来做事(resourceManager会规划好),然后挨个去通知兄弟们:各位在老大点过名的兄弟们,抄家伙上,让你扑街啊。

   applicationMaster带领人去执行任务的时候会密切和nodeManager保持联系,掌握各小弟们的情况,如果某个小弟生病了,那它就会及时选出备选,不让其出战。  

(2)优化任务分包方式-container

   这里需要提到的是以前的map和reduce的分包方式已经被彻底抛弃,现在所有的资源都叫做container,谁需要资源,谁向resourceManager申请,用完了就还过去,只要你需要就去申请,在也没有排队等候浪费资源的问题了。

   整体上,yarn是怎么来的,是个什么样的,有什么本事就是这样,她的主要能力:能够很好的将资源和任务分配、管理和监控起来,办事效率高,老板很放心。


  (3)在老大的秘书办公室工作(yarn或mesos)


 · 客户端提出要搞事,将要做的事情打好草稿(生成作业信息),发送给统筹人员resourceManager。

 ·  resourceManager从它的爪牙nodeManager中选一个出来做该事件的主要负责人,办公地址名都选好了,美其名曰Spark AppMaster

  · 被选中的nodeManger,开始做准备工作了,准备工作做好了之后,向resourceManger申请要找帮手。

   resourceManager结合要做的事情以及各个小弟的实际情况,确认参加人员

 · Spark AppMaster 去老大确定的人员nodeManager上部署任务。

 · 参加人员收到任务之后,纠结马仔 spark executor,开始砍杀,并且向Spark AppMaster砍杀进度。所以AppMaster掌握整个事情的发展情况,client通过Appmaster沟通获得任务最新执行进展。


  


三、参考资料


1.http://www.tuicool.com/articles/qaEVFb

2.http://www.csdn.net/article/2013-12-04/2817706--YARN

3.http://www.cnblogs.com/cxzdy/p/5494929.html-yarn 的架构和原理

4.http://www.aboutyun.com/thread-6785-1-1.html-为什么会产生yarn



【Spark你妈喊你回家吃饭】系列为本博原创文章,同时发布在微信公众号:大数据梅峰谷,转载请注明, 想了解更多精彩大数据技术文章,请关注微信公众号:大数据梅峰谷 ,也可以扫描二维码








  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值