我試圖在配置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截圖後推出:
我們可以看到的是,17.63由應用程序使用,但這個有點低於預期〜21G少,這觸發了對第一個問題 - 這裏發生了什麼?
然後我去火花UI的執行者頁面。這裏談到的更大的問題:
的執行者3(不是4),爲它們分配內存和驅動程序是2.1G(不指定4G)。所以hadoop紗線說17.63G被使用,但火花說8.4G被分配。那麼,這裏發生了什麼?這是否與容量調度程序有關(從文檔中我無法得出這個結論)?
動態分配打開,沒關係(它從30g-2節點中分配22g,每節點15G)。所以這22G只能分配給紗線資源管理器,而且我在每個節點上都有4G操作系統。所以這5 * 4 + 5 * 384MB絕對沒問題。問題是,它不會像從屏幕截圖中看到的那樣分配整個內存。 –