1. 程式人生 > >hadoop streaming記憶體超限解決方案

hadoop streaming記憶體超限解決方案

場景:執行的一個streaming的mapper-reducer任務需要讀入一個2g大小的詞表作為輔助分析資料,然後不出意外的,記憶體超限。

解決方案:
1.提高記憶體上限:
增加配置,將上限調高到8000M,這樣就解決了,如下:
-D stream.memory.limit=8000

2.將讀入詞表的操作轉到reducer階段完成:
這樣需要點思路轉換,我需要對比的key是地理位置,詞表的key也是地理位置,可以在reducer階段將它們歸併起來做處理,缺點就是麻煩了些。

3.優化讀入資料:
提高記憶體上限到底是治標不治本,應當避免讀入這種大資料,舉個例子,我的解決方案是把詞表用hash的方式轉化為數字,大小從原來的2g變為400m,順利執行,速度提高。

以上,就是個人碰到hadoop記憶體超限的解決方法了。