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/ |