学一门新鲜的技术,其实过程都是相似的,先学基本的原理和概念,再学怎么使用,最后深究这技术是怎么实现的,所以本章节就带你认识认识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

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

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

    经过一段时间的学习和测试,是时候给spark的学习经历做一个总结了,对于spark的了解相对晚了写.春节期间(预计是无大事),本博准备推出20篇左右spark系列原创文章(先把牛吹出去再说) ,尽量将 ...

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

    一.概述 在spark程序中,当一个传递给Spark操作(例如map和reduce)的函数在远程节点上面运行时,Spark操作实际上操作的是这个函数所用变量的一个独立副本.这些变量会被复制到每台机器上 ...

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

    概述 在spark程序中,当一个传递给Spark操作(例如map和reduce)的函数在远程节点上面运行时,Spark操作实际上操作的是这个函数所用变量的一个独立副本.这些变量会被复制到每台机器上,并 ...

  4. ReactNative新手学习之路02第一个RN项目

    开始第一个RN项目(iOS版)我的电影列表0.1版,后面做列表版 打开上一节项目 index.ios.js,android打开index.android.js.我这里使用的是Atom编辑器,你也可以使 ...

  5. JavaScript学习02 基础语法

    JavaScript学习02 基础语法 JavaScript中很多基础内容和Java中大体上基本一样,所以不需要再单独重复讲了,包括: 各种算术运算符.比较运算符.逻辑运算符: if else语句.s ...

  6. Java虚拟机JVM学习02 类的加载概述

    Java虚拟机JVM学习02 类的加载概述 类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对 ...

  7. Python学习02 列表 List

    Python学习02 列表 List Python列表 List Python中的列表(List)用逗号分隔,方括号包围(comma-separated values (items) between ...

  8. Android Testing学习02 HelloTesting 项目建立与执行

    Android Testing学习02 HelloTesting 项目建立与执行 Android测试,分为待测试的项目和测试项目,这两个项目会生成两个独立的apk,但是内部,它们会共享同一个进程. 下 ...

  9. Spark菜鸟学习营Day6 分布式代码运行调试

    Spark菜鸟学习营Day6 分布式代码运行调试 作为代码调试,一般会分成两个部分 语法调试,也就是确定能够运行 结果调试,也就是确定程序逻辑的正确 其实这个都离不开运行,所以我们说一下如何让开发的S ...

随机推荐

  1. X分钟速成Python3

    参考博客:Python3 从入门到开车  (与以下代码无关) 源代码下载: learnpython3-cn.py Python是由吉多·范罗苏姆(Guido Van Rossum)在90年代早期设计. ...

  2. 安卓,网页控件,显示网页 Android, web controls, display web pages

    安卓,网页控件,显示网页Android, web controls, display web pages 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq ...

  3. 【WIN32编程】利用汇编写cs1.6辅助

    这篇文章本来在2018.5.1号就写完发圈子去了,这两天跟朋友在网吧打单击才想起来,就顺便把内容发上去把 作者:admin-神风 用CE找到功能的地址 CS1.6下载地址:https://pan.ba ...

  4. memcached协议解析

    本文转载自:http://www.ccvita.com/306.html 协议memcached 的客户端使用TCP链接与服务器通讯.(UDP接口也同样有效,参考后文的 “UDP协议” )一个运行中的 ...

  5. Java内存区域与内存溢出异常--HotSpot虚拟机对象探秘

    以常用的HotSpot和常用的Java堆为例,深入探讨HotSpot虚拟机在Java堆中对象分配.布局和访问的全过程 1.对象的创建 ①虚拟机遇到一条new指令后,首先将去检查这个指令的参数是否能够在 ...

  6. 20172302《程序设计与数据结构》实验四Android程序设计实验报告

    课程:<程序设计与数据结构> 班级: 1723 姓名: 侯泽洋 学号:20172302 实验教师:王志强老师 实验日期:2018年5月30日 必修/选修: 必修 1.实验内容 (1)And ...

  7. exce中42093和日期之间的关系

    在EXECEL中数字0 代表日期 1900-1-0 ,即这个日期为起始日期,算是第0天数字1 代表日期 1900-1-1 ,即第一天数字2 代表日期 1900-1-2 ,即第二天......数字415 ...

  8. php_ssh2操作linux

    <?php /** * Created by PhpStorm. * User: Administrator * Date: 2018/9/15 * Time: 14:11 */ header( ...

  9. [YARN] 2.2 GB of 2.1 GB virtual memory used. Killing container.

    Spark程序在yarn的集群运行,出现 Current usage: 105.9 MB of 1 GB physical memory used; 2.2 GB of 2.1 GB virtual ...

  10. Windows DIB文件操作具体解释-4.使用DIB Section

    前面讲了为了提高DIB的显示性能和效率,我们将DIB转换成DDB.可是这又遇到一个问题.假设我想操作DIB的数据的话,显然是不能使用DDB:一是由于DIB转DDB时发生了颜色转换.再就是DDB无法直接 ...