【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),是管不来的,心有余而力不足。

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

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

总结起来,就是前辈mapreduce太忙,yarn就是这么横空出世的,老大需要秘书,那我就成为那个秘书。

(2)yarn的架构及其技能

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

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

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

还有很多故事要书写,下个章节来完善......

三、参考资料

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

时间: 2024-12-23 05:40:33

【Spark 深入学习 02】- 我是一个凶残的spark的相关文章

【Spark 深入学习 01】 Spark是什么鬼?

经过一段时间的学习和测试,是时候给spark的学习经历做一个总结了,对于spark的了解相对晚了写.春节期间(预计是无大事),本博准备推出20篇左右spark系列原创文章(先把牛吹出去再说) ,尽量将枯燥无味的技术讲的通俗易懂- r.kelly 2013年的时候第一次听说spark这么个神器,那时候它还幼小,没什么人鸟它,但是它强大基因注定了它不是个凡夫俗子, 故事就是从那一小撮人群中开始的. 一.Spark何许人也 姓名:Spark 性别:未知 出生地:加州大学伯克利分校AMP实验室 出生年月

Spark学习之路 (四)Spark的广播变量和累加器

一.概述 在spark程序中,当一个传递给Spark操作(例如map和reduce)的函数在远程节点上面运行时,Spark操作实际上操作的是这个函数所用变量的一个独立副本.这些变量会被复制到每台机器上,并且这些变量在远程机器上的所有更新都不会传递回驱动程序.通常跨任务的读写变量是低效的,但是,Spark还是为两种常见的使用模式提供了两种有限的共享变量:广播变(broadcast variable)和累加器(accumulator) 二.广播变量broadcast variable 2.1 为什么

Spark学习之路 (四)Spark的广播变量和累加器[转]

概述 在spark程序中,当一个传递给Spark操作(例如map和reduce)的函数在远程节点上面运行时,Spark操作实际上操作的是这个函数所用变量的一个独立副本.这些变量会被复制到每台机器上,并且这些变量在远程机器上的所有更新都不会传递回驱动程序.通常跨任务的读写变量是低效的,但是,Spark还是为两种常见的使用模式提供了两种有限的共享变量:广播变量(broadcast variable)和累加器(accumulator) 广播变量broadcast variable 为什么要将变量定义成

【Spark深入学习 -14】Spark应用经验与程序调优

----本节内容------- 1.遗留问题解答 2.Spark调优初体验 2.1 利用WebUI分析程序瓶颈 2.2 设置合适的资源 2.3 调整任务的并发度 2.4 修改存储格式 3.Spark调优经验 3.1 Spark原理及调优工具 3.2 运行环境优化 3.2.1 防止不必要的分发 3.2.2 提高数据本地性 3.2.3 存储格式选择 3.2.4 选择高配机器 3.3 优化操作符 3.3.1 过滤操作导致多小任务 3.3.2 降低单条记录开销 3.3.3 处理数据倾斜或者任务倾斜 3.

【Spark深入学习 -16】官网学习SparkSQL

----本节内容-------1.概览        1.1 Spark SQL        1.2 DatSets和DataFrame2.动手干活        2.1 契入点:SparkSession        2.2 创建DataFrames        2.3 非强类型结果集操作        2.4 程序化执行SQL查询        2.5 全局临时视图        2.6 创建DataSets        2.7 与RDD交互操作        2.8 聚集函数3.Sp

【Spark深入学习 -13】Spark计算引擎剖析

----本节内容------- 1.遗留问题解答 2.Spark核心概念 2.1 RDD及RDD操作 2.2 Transformation和Action 2.3 Spark程序架构 2.4 Spark on Yarn运行流程 2.5 WordCount执行原理 3.Spark计算引擎原理 3.1 Spark内部原理 3.2 生成逻辑执行图 3.3 生成物理执行图 4.Spark Shuffle解析 4.1 Shuffle 简史 4.2  Spark Shuffle ·Shuffle Write

spark 深入学习 05】RDD编程之旅基础篇-01

---------------- 本节内容 1.RDD的工作流程 2.WordCount解说  · shell版本WordCount  · java版本WordCount ---------------- 一.RDD工作流程 1. RDD是spark特有的数据模型,谈到RDD就会提到什么弹性分布式数据集,什么有向无环图,本文暂时不去展开这些高深概念,在阅读本文时候,大家可以就把RDD当作一个数组,这样的理解对我们学习RDD的API是非常有帮助的.本文所有示例代码都是使用scala语言编写的.RD

我们该怎么学习?做一个学者还是习者?

今天我们来谈的话题是"学习".本文的部分构成素材来自网友:"lesini" (乐死你?还是累死你?). 我们从出身到将来多年后的"走人",每个环节.时间段都穿插了一个与社会.环境.人有极高互动性的要素,那就是"学习". 据翻查资料,原来"学习"这个词是孔子发明的,最早时期"学"和"习"是分开的两个独立字.孔子在<论语.学而>提出了"学而时习之,不

【Spark深入学习 -10】基于spark构建企业级流处理系统

----本节内容------- 1.流式处理系统背景 1.1 技术背景 1.2 Spark技术很火 2.流式处理技术介绍 2.1流式处理技术概念 2.2流式处理应用场景 2.3流式处理系统分类 3.流式处理技术关键技术 3.1流式处理系统管道构建 3.2流式处理系统关键技术 3.3用户行为分析系统介绍 4.问题答疑 5.参考资料 --------------------- 1.流式处理技术 1.1 技术背景 业务驱动技术发展,脱了了业务的技术,最多就是一个研究性的东西,流式处理技术的火爆源于业内