2017-09-08 118 views
0

我一直在努力研究一段時間,但一些領域對我來說依然灰暗,如果有人能深入研究這一點,那將是一個很大的幫助。 1)如果我有下面的spark提交配置,並且spark創建了大約100個分區,那麼這個分區如何在一個執行器中被逐個或者並行地處理? > 1執行者將會是什麼情況。Apache Spark:如何在執行器中處理分區

--master yarn \ 
--deploy-mode cluster \ 
--num-executors 1 \ 
--executor-memory 3g \ 
--executor-cores 3 \ 

2)我們可以控制spark中的分區處理嗎? 3)我理解執行者核心幫助並行分區中的任務,如果我有一個用例,我有一個foreachPartition方法,我正在做一些處理消息,如最大和最小併發送此消息給卡夫卡,什麼角色執行器核心將在此操作中發揮作用。

回答

0
  1. 現在你已經指定遺囑執行人的數量爲1,執行內核是3所以你的機器只有一個執行程序將運行 將在同一時間最多3個任務運行。執行程序內存指定Spark可以緩存的數據量。 因此,最多3個執行器上的100個分區可並行處理。

  2. 我們可以使用重新分區方法來更改spark中RDD的分區。另外reduceByKey和其他一些方法有一個選項 來傳遞輸出RDD中的分區數作爲參數傳遞。

  3. 我完全不明白你最後的問題。但執行程序核心將扮演與上述相同的角色,在一個執行程序上並行運行任務 。

+1

'執行程序內存指定了Spark可以緩存的數據量,我不認爲這是真的,執行程序內存用於緩存和執行代碼。 –

+0

好吧,這意味着如果我從1增加執行器到2,那麼可以並行處理的最大分區數將是6,因爲我正在爲每個執行器分配3個內核。 – nilesh1212

+0

@RaphaelRoth感謝您的補充。我在回答時錯過了執行代碼的觀點。 – SagarKhandagale

相關問題