从Spark架构中透视Job(DT大数据梦工厂)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Spark架构中透视Job(DT大数据梦工厂)相关的知识,希望对你有一定的参考价值。

内容:

1、通过案例观察Spark架构;

2、手动绘制Spark内部架构;

3、Spark Job的逻辑视图解析;

4、Spark Job的物理视图解析;

Action触发的Job或者checkpoint触发Job

==========通过案例观察Spark架构 ============

jps看到的master,作用:管理集群的计算资源,主要指内存、CPU,也会考虑磁盘或者网络;还做接受客户端提交的作业请求,分配资源。说明:作业粗粒度,提交的时候就分配资源,作业运行的过程时候,一般用已分配的资源,除非运行过程发生异常。

Worker进程,主要负责当前节点每寸和CPU的资源使用。

Spark是主从分布式的。

启动spark-shell

./spark-shell --master spark://Master:7077,Worker1:7077,Worker2:7077

再刷新web控制台

技术分享

为什么是24个cores,每个节点的内存1024M呢?

spark-env.sh里面有配置

[email protected]:/usr/local/spark/spark-1.6.0-bin-hadoop2.6/conf# cat spark-env.sh

export JAVA_HOME=/usr/java/jdk1.8.0_71

export SCALA_HOME=/usr/local/scala-2.10.4

export HADOOP_HOME=/usr/local/hadoop-2.6.0

export HADOOP_CONF_DIR=/usr/local/hadoop-2.6.0/etc/hadoop

#export SPARK_MASTER_IP=Master

export SPARK_WORKER_MEMORY=2g

export SPARK_EXCUTOR_MEMORY=2g

export SPARK_DRIVER_MEMORY=2g

export SPARK_WORKER_CORES=8

export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=Master:2181,Worker1:2181,Worker2:2181 -Dspark.deploy.zookeeper.dir=/spark"

启动spark-shell分配了资源了吗?

当然分配了,standalone的模式是粗粒度分配资源的。

spark-shell默认情况下没有任何的job,此时stage等都没有,但是还是会分配资源的。

但是executors是存在的:

技术分享

和下面的图也能对应起来:

技术分享

一个Worker上默认一个executor,也可以多个executor,如果只有一个executor的时候CPU利用率不高,则可以配置多个。

无论Spark有多少作业,都是在注册的时候分配的资源。默认资源的分配方式,在每个Worker上为当前程序分配一个executorbackend,且默认情况下会最大化的使用cores和memory。如果不加限制,Spark一旦运行,直接把资源占满,这个时候就需要yarn或者mesos等资源管理器。

技术分享

task运行在executor上面:

技术分享

一次能运行多少个并发的task,取决于当前的executor能够使用的cores的数量。

sc.textFile("/historyserverforSpark/README.md", 3).flatMap(_.split(" ")).map(word=>(word,1)).reduceByKey(_+_,1).cache

并行度也是继承的

sc.textFile("/historyserverforSpark/README.md", 3).flatMap(_.split(" ")).map(word=>(word,1)).reduceByKey(_+_).sortByKey().cache

技术分享

3个并行作业被继承了。

==========手动绘制Spark内部架构 ============

Master、Driver、Worker、Executor

/usr/local/spark/spark-1.6.0-bin-hadoop2.6/bin/spark-submit --class com.dt.spark.SparkApps.cores.WordCount_Cluster --master spark://Master:7077 /root/Documents/SparkApps/SparkAppsInJava.jar

提交作业,即drvier是由spark-submit来提交的

E xecutor里面的线程 是否关心运行啥代码?线程只是计算资源,所以由于线程不关心具体Task中运行什么代码,所以Task和Thread是解耦合的。所以Thread是可以被复用的。

具体运行什么,通过Runner的接口来运行封装的代码的。

技术分享

当集群启动的时候,首先启动master进程,负责整个集群资源的管理和分配,并接收作业的提交,且为作业分配计算资源。即每个工作节点,默认情况下都会启动一个Worker Process来管理当前节点的memory、CPU等计算资源。并且向master汇报Worker还能够正常工作。

当用户作业提交给Master时,Master会为程序分配ID并分配计算资源,默认情况下为当前应用程序在每个Process分配一个GoarseGrainedExecutorBackend进程,该进程默认情况下会最大化的使用当前节点上的内存和CPU。

每个线程可以被复用执行多个task

每个appication都包含一个driver和多个executors,每个executor里面运行的多个

==========Spark Job的逻辑视图解析 ============

整个集群是master和worker节点,是master-slave结构

worker是worknode上的守护节点,worker节点上有work process

work process会为接收master的指令,为当前要运行的应用程序分配GoarseGrainedExecutorBackend进程

worker process会不会管理计算资源?不会。worker process 知识走一趟形式,看上去是它管理的资源,但是真正管理资源的是master!!!master管理每台机器上的计算资源的。

Drvier里面有main方法,有SparkContext。。。

技术分享

数据在stage内部是流过去的。一个stage里面有多个transformation

==========Spark Job的物理视图解析 ============

上图中,stage5是stage6的mapper。stage6是stage5的reducer.

Spark是一个更加精致和更加高效的Map Reduce思想的具体实现。

最后一个stage里面的task是result task类型,前面的所有stage中的task的类型都是shuffleMapTask类型的

stage里面的内容一定是在executor中执行的。

而且stage必须是从前往后执行。

Spark的一个应用程序,可以为不同的Action产生众多的Job,每个Job至少有一个Stage

本讲课程的重要作用:巩固前面的重要内容,且开启下面Spark的密码之旅。

王家林老师名片:

中国Spark第一人

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

微信公众号:DT_Spark

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

手机:18610086859

QQ:1740415547

邮箱:[email protected]


本文出自 “一枝花傲寒” 博客,谢绝转载!

以上是关于从Spark架构中透视Job(DT大数据梦工厂)的主要内容,如果未能解决你的问题,请参考以下文章

Spark Runtime(DriverMassterWorkerExecutor)内幕解密(DT大数据梦工厂)

Spark内核架构解密(DT大数据梦工厂)

SparkRDD解密(DT大数据梦工厂)

Spark 1.6 RPC内幕解密:运行机制源码详解Netty与Akka等(DT大数据梦工厂)

Spark运行原理和RDD解析(DT大数据梦工厂)

DT大数据梦工厂