2016-08-19 140 views
2

爲了更好地理解Apache Hadoop Spark中的大數據概念,我提出了一個問題。不知道在這個論壇上是否是脫離主題,但讓我知道。Jupyter筆記本執行器是否在Apache Spark中動態分發?

想象一下Apache Hadoop集羣包含8個由Yarn資源管理器管理的服務器。我上傳了一個文件到HDFS(文件系統),該文件配置了64MB的塊大小和3的複製計數。然後將該文件分割成64MB的塊。現在我們來想象塊被HDFS分發到節點1,2和3.

但是現在我正在用Jupyter筆記本編寫一些Python代碼。因此,筆記本啓動與此命令:

PYSPARK_DRIVER_PYTHON = jupyter PYSPARK_DRIVER_PYTHON_OPTS = 「筆記本」 pyspark --master紗線客戶--num-執行人3 --executor-鐵芯4 --executor存儲器16G

在筆記本內我從HDFS加載文件做一些分析。當我執行我的代碼時,我可以在YARN Web UI中看到我有3個執行者,以及這些作業是如何提交(分發)給執行者的。

有趣的部分是,我的執行者在啓動命令後立即修復了特定的計算節點(見上文)。例如節點6,7和8

我的問題是:

  1. 是我的假設是正確的,即執行節點被固定爲計算節點,一次我的HDFS塊將被轉移到執行人m從HDFS訪問(加載)文件?
  2. 或者,執行者是在數據所在的節點(節點1,2和3)中動態分配和啓動的。在這種情況下,我在YARN web-ui中的觀察必定是錯誤的。

我真的有興趣更好地理解這一點。

cluster setup

回答

4

是在Apache的星火

動態分佈式爲了清楚起見Jupyter筆記本執行人,讓我們區分

  • Jupyter筆記本電腦及其相關的內核 - 內核是筆記本UI背後的Python過程。內核執行你在你的筆記本上鍵入並提交的任何代碼。內核由Jupyter管理,而不是由Spark管理。

  • 星火執行人 - 這些都是分配的紗線集羣上執行火花的作業

  • HDFS數據節點的計算資源 - 這些都是在您的數據駐留。數據節點可能與執行程序節點相同也可能不相同。

是我的假設是正確的,即執行節點被固定爲計算節點,一次我從HDFS

訪問(裝載)該文件的HDFS塊將被轉移到執行人

是和否 - 是的,當模擬工作時,Spark需要考慮data locality。不,沒有保證。根據Spark documentation

(...)有兩種選擇:a)等到一個繁忙的CPU釋放,以便在同一臺服務器上的數據上啓動一個任務,或b)立即開始一個新的任務那裏需要移動數據。 Spark通常會做的是等待繁忙CPU釋放的希望。一旦該超時到期,它就開始將數據從遠處移動到空閒的CPU。 (...)

或者,執行者是動態分配並在數據所在的節點(節點1,2和3)處啓動的。

這取決於配置。一般來說,執行者動態分配給Spark應用程序(即SparkContext),並在不再使用時解除分配。然而,執行人的一段時間維持生命,按照該Job scheduling documentation

(...)的火花申請刪除時,它已閒置超過spark.dynamicAllocation.executorIdleTimeout秒鐘執行人(...。 )

爲了更好地控制哪裏運行什麼,您可以使用Scheduler Pools