从Spark架构中透视job

从Spark架构中透视job

视频学习来源:DT-大数据梦工厂 IMF传奇行动视频(后附王家林老师联系方式)

本期内容:
1、通过案例观察Spark架构
2、手动绘制Spark内部架构
3、Spark Job逻辑视图解析
4、Spark Job的物理视图解析
从Master角度讲:
    1、管理CPU、MEM等资源(也考虑网络)
    2、接收Driver端提交作业的请求,并为其分配资源(APPid等)
注:spark默认是粗粒度,即spark作业提交的时候就会为我们作业分配资源,运行的过程中一般使用已分配的资源,除非资源发生异常需要重新分配。
          Worker进程负责当前worker节点上的资源的使用。
运行作业:
    ./spark-shell --master spark://Master:7077

上图在作业运行的端口中可以看出Cores是32,Mem是4G是在Spark-env.sh中配置的,standalone模式spark-shell只是提交了一个程序,没有做任何事。默认情况下每个Worker上启动一个ExecutorBackend进程,一共有5个Executor。
配置Executor的情况(只有Application关闭,Executor才会关闭):
          CPU利用率不高的情况下;
          默认的资源分配方式在每个Worker上启动一个ExecutorBackend进程,且默认情况下会最大的占用CPU和MEM,若不加限制,集群上出了Spark还有其他程序的话,Spark现运行就会占用最大的资源,给人一种Spark很占内存的感觉,若有多套计算框架,就需要资源管理器yarn或者mesos。
使用spark-shell运行程序会在Worker上多了进程CoarseGrainedExecutorBackend进程,默认情况下Worker节点为程序分配一个Executor,而 CoarseGrainedExecutorBackend 进程里有Executor,Executor会通过并发线程池并发执行的方式执行Task。


运行程序,广告点击排名,在ReduceByKey(_+_,1)中指定并行度为1,因为只有一个作业collect,DAG如下:


         从上面运行的job 可以看出一个job产生了3个stage,两个shuffledRDD,因为shuffledRDD是宽依赖(每个父RDD都被子RDD使用),因为 遇到宽依赖就断开,遇到窄依赖就把当前的RDD加入该Stage中,所以形成三个stage。
注:一次性最多在Executor中能运行多少个并发的任务task取决于当前节点Executor中Cores数量,在实际运行的时候哪个task执行完成,就会将资源回收到线程池中进行覆用,对于一次没法全部运行的任务,就会形成task排队的情况,为了应对这种情况, 优化的方法(避免oom),指定多个Executor线程池,获取更多的MEM和资源,但前提是我们的Spark运行在 拥有 其他大数据框架的集群中。
注:如果我们的Spark集群只是作为唯一的计算框架,没有其他计算框架,为了应对oom,需要增加分片数量,每个分片运行的数据减小。
         任务在运行前具体分配给谁主要取决于数据本地性(有些机器分配的多,也有些分配的少),
spark-shell --spark 

   从总体而言,spark在集群启动的时候,有个全局的资源管理器Master,负责整个集群资源的管理以及接受程序提交并为程序分配资源,而每个Worker节点上都一个Worker process来管理当前机器上的计算资源,当应用程序提交的时候,Master就会为我们提交的应用程序在每个节点上默认分配一个CorseGrainedExecutorBackend进程,该进程默认情况下载不对MEN和CPU进行限制,会最大化的应用当前机器的MEN和CPU,当Driver实例化没有问题的时候,Driver本身会进行作业的调度来驱动CorseGrainedExecutorBackend中的Executor中的线程,来具体并发执行task,这也是Spark并发执行的过程。
         而从 CorseGrainedExecutorBackend的角度来看是Worker Process来管理当前节点上的MEM 和CPU,但是真正管理资源的是Master,Worker Process只是走个形式,因为我们的 CorseGrainedExecutorBackend进程是被Worker Process分配的,实质上是通过Master来管理Worker节点的资源。
         每个Worker上包含一个或者多个ExecutorBackend进程,而每个ExecutorBackend中包含一个Executor对象,该对象拥有一个线程池,而每个线程又可以覆用多个Task任务。
          从DAG逻辑角度来看数据在Stage内部是pipeline流过去的,因为有两次ShuffledRDD,所以job被划分成3个Stage。
         从Hadoop的MapReduce角度看stage0上stage1 的mapper;而 stage1上stage0 的mapper; stage1上stage2 的mapper;而 stage2上stage1 的mapper,我们可以将Spark看做一个MapReduce的更加具体的实现。



王家林老师是大数据技术集大成者,中国Spark第一人:

DT大数据梦工厂

新浪微博:www.weibo.com/ilovepains/

微信公众号:DT_Spark

博客:http://.blog.sina.com.cn/ilovepains

TEL:18610086859

Email:18610086859@vip.126.com






王家林老师是大数据技术集大成者,中国Spark第一人:

DT大数据梦工厂

新浪微博:www.weibo.com/ilovepains/

微信公众号:DT_Spark

博客:http://.blog.sina.com.cn/ilovepains

TEL:18610086859

Email:18610086859@vip.126.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值