Taiwan Hadoop Forum
http://forum.hadoop.tw/

問一個記憶體控制的問題..
http://forum.hadoop.tw/viewtopic.php?f=7&t=38307
1 頁 (共 1 頁)

發表人:  ncuelab117 [ 2016-03-02, 20:49 ]
文章主題 :  問一個記憶體控制的問題..

寫mapreduce程式遇到2個狀況..

1.有兩個不同的檔案需要比較,兩個檔案都很大,超過100MB
第一個檔案每一個input需要搜尋第二個檔案搜尋一遍
我的做法是先把第二個檔案在mapper開始前,先把它每一條資料存到一個ArrayList
但是當data2過大時會發生記憶體不足的問題

2.有一隻mapreduce程式是在記憶體建一棵FP-tree,跑FP-growth找出購物車紀錄的frequence item set
但當input資料過大時,一樣有記憶體不夠的問題。

想問一下mapreduce程式是怎麼解決把資料存在記憶體,而記憶體有限制的情況??

發表人:  jazz [ 2016-03-03, 10:44 ]
文章主題 :  Re: 問一個記憶體控制的問題..

ncuelab117 寫:
寫mapreduce程式遇到2個狀況..
1.有兩個不同的檔案需要比較,兩個檔案都很大,超過100MB
第一個檔案每一個input需要搜尋第二個檔案搜尋一遍
我的做法是先把第二個檔案在mapper開始前,先把它每一條資料存到一個ArrayList
但是當data2過大時會發生記憶體不足的問題
2.有一隻mapreduce程式是在記憶體建一棵FP-tree,跑FP-growth找出購物車紀錄的frequence item set
但當input資料過大時,一樣有記憶體不夠的問題。
想問一下mapreduce程式是怎麼解決把資料存在記憶體,而記憶體有限制的情況??


聽起來是單一 map() 就已經會遇到單機記憶體上限的問題(也許跟 HeapSize 設定有關)
這種問題需要看的參數很多,跟應用特徵也有很大的關聯。
因此初步只能建議:

A. 針對問題一:

根據描述,這種檔案比對的問題,常用的手法是 DistributedCache
也就是如果有一個檔案是類似「查表法」的「表」,那就把該檔視為每個 Task 的附加資料。

B. 針對問題二:

記憶體不足的問題,通常要配合其他工具,像是 Java Profiler
因為縱使有 log 也只是呈現出記憶體不足的表徵,但記憶體使用量的動態特徵無法呈現於 Log (除非在程式碼中加入對應追蹤)

初步建議:

1. 檢查由外而內檢查是否有辦法透過修改記憶體上限的方式,來讓程式繼續執行下去:
(A) 放大 yarn.nodemanager.resource.memory-mb
(B) 放大 yarn.scheduler.maxium-allocation-mb
(C) 放大 mapreduce.map.memory-mb
(D) 放大 mapreduce.map.java.opts

圖檔

2. 使用 VisualVM 觀察 java process 的特徵 (除錯階段可以使用 local mode 會比較容易 debug)

圖檔

- Jazz

1 頁 (共 1 頁) 所有顯示的時間為 UTC + 8 小時
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/