2017-07-04 40 views
0

我試圖在配置Spark應用程序時從羣集中擠出每一個位,但似乎我並沒有完全理解所有的東西。因此,我正在AWS EMR集羣上運行應用程序,其中包含1個主節點和2個來自m3.xlarge的核心節點(每個節點15G RAM和4個vCPU)。這意味着默認情況下每個節點上預留11.25 GB的紗線計劃應用程序。因此,主節點僅由資源管理器(紗線)使用,這意味着其餘2個核心節點將用於安排應用程序(因此我們有22.5G用於此目的)。到現在爲止還挺好。但是,我得不到這個部分。我開始用下面的參數火花應用:使用YARN進行Spark流應用程序配置

--driver-4G內存--num執行人4 --executor核芯7 --executor-4G內存

這是什麼意味着我的看法(從我發現的信息)是,司機將被分配4G和4個執行者將啓動與4G每一個。所以粗略的估計是5 * 4 = 20G(讓21G帶上預期的內存儲備),這應該沒問題,因爲我們有22.5G的應用程序。下面是來自Hadoop的紗線的UI截圖後推出:

enter image description here

我們可以看到的是,17.63由應用程序使用,但這個有點低於預期〜21G少,這觸發了對第一個問題 - 這裏發生了什麼?

然後我去火花UI的執行者頁面。這裏談到的更大的問題:

enter image description here

的執行者3(不是4),爲它們分配內存和驅動程序是2.1G(不指定4G)。所以hadoop紗線說17.63G被使用,但火花說8.4G被分配。那麼,這裏發生了什麼?這是否與容量調度程序有關(從文檔中我無法得出這個結論)?

回答

0

你能檢查是否打開spark.dynamicAllocation.enabled。如果是這種情況,那麼激發您的應用程序可能會將資源返回到羣集,如果它們不再使用。在啓動時啓動的執行程序的最小數量將由spark.executor.instances決定。

如果情況並非如此,Spark應用程序的源代碼是什麼,爲此設置的分區大小是多少,如果您的源只有10個分區,spark會將分區大小從字面上映射到spark核心,你嘗試分配15個內核,它將只使用10個內核,因爲這是需要的。我想這可能是火花推出3個執行者而不是4的原因。關於我建議重新訪問的內存,因爲你要求4個執行者和1個驅動程序,每個驅動程序都是4Gb,這將是5*4+5*384MB大約等於22GB,並且您正試圖用盡一切,沒有太多的東西留給你的操作系統和nodemanager運行,這不是理想的方式。

+0

動態分配打開,沒關係(它從30g-2節點中分配22g,每節點15G)。所以這22G只能分配給紗線資源管理器,而且我在每個節點上都有4G操作系統。所以這5 * 4 + 5 * 384MB絕對沒問題。問題是,它不會像從屏幕截圖中看到的那樣分配整個內存。 –

相關問題