從Spark架構中透視Job(DT大資料夢工廠)

來源:互聯網
上載者:User

標籤:從spark架構中透視job

內容:

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控制台

650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />

為什麼是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是存在的:

650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />

和下面的圖也能對應起來:

650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />

一個Worker上預設一個executor,也可以多個executor,如果只有一個executor的時候CPU利用率不高,則可以配置多個。

無論Spark有多少作業,都是在註冊的時候分配的資源。預設資源的分配方式,在每個Worker上為當前程式分配一個executorbackend,且預設情況下會最大化的使用cores和memory。如果不加限制,Spark一旦運行,直接把資源佔滿,這個時候就需要yarn或者mesos等資源管理員。

650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />

task運行在executor上面:

650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />

一次能運行多少個並發的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

650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />

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的介面來運行封裝的代碼的。

650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />

當叢集啟動的時候,首先啟動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。。。

650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />

資料在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大資料夢工廠)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.