1. 程式人生 > >Spark任務執行過程簡介

Spark任務執行過程簡介

--executor-memory 每一個executor使用的記憶體大小
--total-executor-cores    整個application使用的核數

1.提交一個spark程式到spark叢集,會產生哪些程序?
    SparkSubmit(也叫做Driver),主要作用是提交任務,也可以排程任務
    Executor    用於執行需要計算的任務
    
2.在提交spark-submit任務的時候,已經用 --master指定了master節點,如果在提交任務的時候,該master宕機了,怎麼辦?
    如果是高可用叢集,可以在--master後面可以指定多個master節點,寫法要注意:    --master spark://hadoop101:7077,hadoop102:7077 
    提交任務可以指定多個master地址,目的是為了提交任務高可用
3.sc是spark core(RDD)的執行入口

4.spark任務執行流程
    1).首先master啟動,然後workers啟動
    workers首先跟master建立連線(進行註冊),進行RPC通訊,每個worker會把自己現有的記憶體跟核數彙報給master
    master接收到workers彙報的資訊後,如果只有一個master,那麼這些資訊會被master儲存在記憶體,然後持久化到磁碟,如果有兩個(或多個)master, 則會將這些資訊持久化到zookeeper,用於做故障切換
    2).master反饋給workers已經註冊成功,接下來workers會定時傳送心跳給master,目的是為了告訴master自己還活著,可以將任務分配給自己
    3).當客戶端SparkSubmit(Driver)提交任務的時候,首先要跟master通訊,然後向master申請資源
        master的功能就是負責資源排程,分配資源(就是指定 Executor啟動在哪些workers上),master資源分配的策略就是儘量讓任務執行在更多的機器上
    4).master收到Driver的請求後,再去跟workers進行RPC通訊,讓worker啟動Executor (各個Executor會接收到資源引數)
    5).Executor接下來會跟提交任務的Driver(通過master告訴worker,worker告訴Executor,進而Executor知道Driver的位置)進行通訊,因為真正的計算邏輯是在Driver端的,Driver端會將計算邏輯生成具體的任務(task),通過網路傳送給每一個Executor(每一個Executor可以接收並執行多個task任務),然後Executor會執行真正的計算邏輯