成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Apache Spark源碼走讀之2:Job的提交與運(yùn)行

數(shù)據(jù)庫 Spark
本文以wordCount為例,詳細(xì)說明spark創(chuàng)建和運(yùn)行job的過程,重點(diǎn)是在進(jìn)程及線程的創(chuàng)建。

實(shí)驗(yàn)環(huán)境搭建

在進(jìn)行后續(xù)操作前,確保下列條件已滿足。

  1. 下載spark binary 0.9.1

  2. 安裝scala

  3. 安裝sbt

  4. 安裝java

啟動spark-shell

單機(jī)模式運(yùn)行,即local模式

local模式運(yùn)行非常簡單,只要運(yùn)行以下命令即可,假設(shè)當(dāng)前目錄是$SPARK_HOME

  1. MASTER=local bin/spark-shell 

"MASTER=local"就是表明當(dāng)前運(yùn)行在單機(jī)模式

local cluster方式運(yùn)行

local cluster模式是一種偽cluster模式,在單機(jī)環(huán)境下模擬standalone的集群,啟動順序分別如下

  1. 啟動master

  2. 啟動worker

  3. 啟動spark-shell

master

  1. $SPARK_HOME/sbin/start-master.sh 

 注意運(yùn)行時(shí)的輸出,日志默認(rèn)保存在$SPARK_HOME/logs目錄。

master主要是運(yùn)行類 org.apache.spark.deploy.master.Master,在8080端口啟動監(jiān)聽,日志如下圖所示

修改配置

  1. 進(jìn)入$SPARK_HOME/conf目錄

  2. 將spark-env.sh.template重命名為spark-env.sh

  3. 修改spark-env.sh,添加如下內(nèi)容

 

  1. export SPARK_MASTER_IP=localhost 
  2. export SPARK_LOCAL_IP=localhost 

運(yùn)行worker

  1. bin/spark-class org.apache.spark.deploy.worker.Worker spark://localhost:7077 -i 127.0.0.1  -c 1 -m 512M 


worker啟動完成,連接到master。打開maser的web ui可以看到連接上來的worker. Master WEb UI的監(jiān)聽地址是http://localhost:8080

啟動spark-shell

MASTER=spark://localhost:7077 bin/spark-shell

如果一切順利,將看到下面的提示信息。

Created spark context..
Spark context available as sc.

可以用瀏覽器打開localhost:4040來查看如下內(nèi)容

  1. stages

  2. storage

  3. environment

  4. executors

wordcount

上述環(huán)境準(zhǔn)備妥當(dāng)之后,我們在sparkshell中運(yùn)行一下最簡單的例子,在spark-shell中輸入如下代碼

scala>sc.textFile("README.md").filter(_.contains("Spark")).count

上述代碼統(tǒng)計(jì)在README.md中含有Spark的行數(shù)有多少

部署過程詳解

Spark布置環(huán)境中組件構(gòu)成如下圖所示。

Spark cluster components

  • Driver Program 簡要來說在spark-shell中輸入的wordcount語句對應(yīng)于上圖的Driver Program.

  • Cluster Manager 就是對應(yīng)于上面提到的master,主要起到deploy management的作用

  • Worker Node 與Master相比,這是slave node。上面運(yùn)行各個(gè)executor,executor可以對應(yīng)于線程。executor處理兩種基本的業(yè)務(wù)邏輯,一種就是driver programme,另一種就是job在提交之后拆分成各個(gè)stage,每個(gè)stage可以運(yùn)行一到多個(gè)task

Notes: 在集群(cluster)方式下, Cluster Manager運(yùn)行在一個(gè)jvm進(jìn)程之中,而worker運(yùn)行在另一個(gè)jvm進(jìn)程中。在local cluster中,這些jvm進(jìn)程都在同一臺機(jī)器中,如果是真正的standalone或Mesos及Yarn集群,worker與master或分布于不同的主機(jī)之上。

JOB的生成和運(yùn)行

job生成的簡單流程如下

  1. 首先應(yīng)用程序創(chuàng)建SparkContext的實(shí)例,如實(shí)例為sc

  2. 利用SparkContext的實(shí)例來創(chuàng)建生成RDD

  3. 經(jīng)過一連串的transformation操作,原始的RDD轉(zhuǎn)換成為其它類型的RDD

  4. 當(dāng)action作用于轉(zhuǎn)換之后RDD時(shí),會調(diào)用SparkContext的runJob方法

  5. sc.runJob的調(diào)用是后面一連串反應(yīng)的起點(diǎn),關(guān)鍵性的躍變就發(fā)生在此處

 調(diào)用路徑大致如下

  1. sc.runJob->dagScheduler.runJob->submitJob

  2. DAGScheduler::submitJob會創(chuàng)建JobSummitted的event發(fā)送給內(nèi)嵌類eventProcessActor

  3. eventProcessActor在接收到JobSubmmitted之后調(diào)用processEvent處理函數(shù)

  4. job到stage的轉(zhuǎn)換,生成finalStage并提交運(yùn)行,關(guān)鍵是調(diào)用submitStage

  5. 在submitStage中會計(jì)算stage之間的依賴關(guān)系,依賴關(guān)系分為寬依賴窄依賴兩種

  6. 如果計(jì)算中發(fā)現(xiàn)當(dāng)前的stage沒有任何依賴或者所有的依賴都已經(jīng)準(zhǔn)備完畢,則提交task

  7. 提交task是調(diào)用函數(shù)submitMissingTasks來完成

  8. task真正運(yùn)行在哪個(gè)worker上面是由TaskScheduler來管理,也就是上面的submitMissingTasks會調(diào)用TaskScheduler::submitTasks

  9. TaskSchedulerImpl中會根據(jù)Spark的當(dāng)前運(yùn)行模式來創(chuàng)建相應(yīng)的backend,如果是在單機(jī)運(yùn)行則創(chuàng)建LocalBackend

  10. LocalBackend收到TaskSchedulerImpl傳遞進(jìn)來的ReceiveOffers事件

  11. receiveOffers->executor.launchTask->TaskRunner.run

代碼片段executor.lauchTask


def launchTask(context: ExecutorBackend, taskId: Long, serializedTask: ByteBuffer) {
    val tr = new TaskRunner(context, taskId, serializedTask)
    runningTasks.put(taskId, tr)
    threadPool.execute(tr)
  }

說了這么一大通,也就是講最終的邏輯處理切切實(shí)實(shí)是發(fā)生在TaskRunner這么一個(gè)executor之內(nèi)。

運(yùn)算結(jié)果是包裝成為MapStatus然后通過一系列的內(nèi)部消息傳遞,反饋到DAGScheduler,這一個(gè)消息傳遞路徑不是過于復(fù)雜,有興趣可以自行勾勒。

 

責(zé)任編輯:彭凡 來源: 博客園
相關(guān)推薦

2014-07-23 10:02:11

Spark源碼

2014-07-03 15:40:09

Apache Spar

2014-07-15 10:59:58

Spark代碼跟讀

2011-12-02 13:04:06

Java

2021-08-09 09:00:00

Kubernetes云計(jì)算架構(gòu)

2014-02-14 15:43:16

ApacheSpark

2016-12-20 09:47:38

Apache SparLambda架構(gòu)

2024-07-22 08:57:58

2019-04-08 17:11:46

大數(shù)據(jù)框架Spark

2016-11-15 14:07:28

Apache SparLambdaHadoop

2014-03-26 10:52:24

Apache Spar

2018-02-02 15:50:07

決策樹Apache Spar數(shù)據(jù)

2017-10-10 17:00:11

SparkHadoop數(shù)據(jù)處理

2017-04-01 14:01:50

Apache Spar內(nèi)存管理

2011-07-08 15:41:43

oracle job

2022-06-01 13:52:11

開源大數(shù)據(jù)

2021-08-30 18:09:57

鴻蒙HarmonyOS應(yīng)用

2017-06-26 15:00:17

2011-03-11 14:02:53

Apache配置

2017-03-10 16:32:44

Apache Spar大數(shù)據(jù)工具
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日韩资源 | 国产一区二区自拍 | 自拍偷拍亚洲欧美 | 亚洲人成人一区二区在线观看 | 亚洲色在线视频 | 中文字幕在线一区 | 伊人99 | 日日干日日 | 久久久精品国产 | 欧美一区二区三区在线视频 | 天天色官网 | 免费a在线| 成人免费观看男女羞羞视频 | 91.色 | 国产精品视频在线观看 | 午夜小视频在线观看 | 欧美激情va永久在线播放 | 午夜国产羞羞视频免费网站 | 日本久久精品视频 | 91秦先生艺校小琴 | 久久精品亚洲一区二区三区浴池 | 成人在线中文字幕 | 亚洲免费在线观看视频 | 国产91在线 | 中日 | 久久综合一区二区三区 | 丁香婷婷成人 | 香蕉视频91| 午夜影院视频在线观看 | 日韩电影中文字幕在线观看 | 一区二区三区四区免费在线观看 | 国产精品久久久久久久久免费桃花 | 在线观看成年人视频 | 麻豆视频国产在线观看 | 国产91在线 | 中日 | 国产精品一区二区三区四区 | a级黄色网 | 日韩视频 中文字幕 | 欧美一区二区三区国产精品 | 在线观看国产视频 | 狠狠亚洲| 国产精品一区二区久久精品爱微奶 |