Taiwan Hadoop Forum

台灣 Hadoop 技術討論區
現在的時間是 2018-01-20, 01:05

所有顯示的時間為 UTC + 8 小時




發表新文章 回覆主題  [ 2 篇文章 ] 
發表人 內容
 文章主題 : 問一個記憶體控制的問題..
文章發表於 : 2016-03-02, 20:49 
離線

註冊時間: 2014-06-03, 11:56
文章: 4
寫mapreduce程式遇到2個狀況..

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

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

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


回頂端
 個人資料 E-mail  
 
 文章主題 : Re: 問一個記憶體控制的問題..
文章發表於 : 2016-03-03, 10:44 
離線

註冊時間: 2009-11-09, 19:52
文章: 2895
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


回頂端
 個人資料 E-mail  
 
顯示文章 :  排序  
發表新文章 回覆主題  [ 2 篇文章 ] 

所有顯示的時間為 UTC + 8 小時


誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客


不能 在這個版面發表主題
不能 在這個版面回覆主題
不能 在這個版面編輯您的文章
不能 在這個版面刪除您的文章
不能 在這個版面上傳附加檔案

搜尋:
前往 :  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
正體中文語系由 竹貓星球 維護製作