我們有一個非常令人沮喪的Hadoop流內存不足的問題,我們的設置:的Hadoop 2.2.0流內存限制
- 的Hadoop 2.2.0(紗)
- 我們的計算節點有關於7 GB的RAM
- 的hadoop streaming開始bash腳本至極使用約4 GB的RAM
- 因此只可能開始一個和每個節點只一個任務
開箱即用每個hadoop實例啓動大約7個hadoop容器,默認hadoop設置。每個hadoop任務都會派生一個需要大約4 GB RAM的bash腳本,第一個分支可以工作,所有跟隨失敗,因爲他們耗盡內存。所以我們正在尋找的是限制容器數量只有一個。所以我們發現在互聯網上:
yarn.scheduler.maximum-allocation-mb
和mapreduce.map.memory.mb
設置爲值,使得至多有一個容器。這意味着,mapreduce.map.memory.mb
必須是的最大內存的一半以上(否則會有多個容器)。
做得不錯,這給了我們每節點一個容器。但它產生了一個新問題:由於我們的java進程現在至少使用了最大內存的一半,所以我們的子進程(bash)將會繼承父內存空間,並且由於我們父級使用的內存超過了一半的內存總量,我們再次耗盡內存。如果我們降低地圖內存,hadoop將爲每個節點分配2個容器,這也將耗盡內存。
我們將非常樂意爲您提供任何幫助!謝謝!
編輯:由於這個問題是我們項目中的攔截器,我們正在評估調整源代碼來解決這個問題。