![](/img/trans.png)
[英]org.apache.hadoop.mapred.TaskTracker: Error running child : java.lang.OutOfMemoryError: Java heap space
[英]org.apache.hadoop.mapred.YarnChild: Error running child : java.lang.OutOfMemoryError: Java heap space
我有一個90MB的快照壓縮文件,試圖將其用作AWS EMR中AMI 3.0.4上Hadoop 2.2.0的輸入。
嘗試讀取文件后,我的記錄讀取器立即收到以下異常:
2014-05-06 14:25:34,210 FATAL [main] org.apache.hadoop.mapred.YarnChild: Error running child : java.lang.OutOfMemoryError: Java heap space
at org.apache.hadoop.io.compress.BlockDecompressorStream.getCompressedData(BlockDecompressorStream.java:123)
at org.apache.hadoop.io.compress.BlockDecompressorStream.decompress(BlockDecompressorStream.java:98)
at org.apache.hadoop.io.compress.DecompressorStream.read(DecompressorStream.java:85)
at java.io.InputStream.read(InputStream.java:101)
at org.apache.hadoop.util.LineReader.readDefaultLine(LineReader.java:211)
at org.apache.hadoop.util.LineReader.readLine(LineReader.java:174)
at org.apache.hadoop.util.LineReader.readLine(LineReader.java:365)
...
我正在使用默認內存和io.sort.mb在AWS中的m1.xlarge上運行。 如果我們解壓縮文件並將其用作輸入,則一切正常。 問題是我們有大量的壓縮文件,並且不想四處解壓縮。
我不確定我們的代碼中是否缺少配置設置或接線。 不知道如何進行。
根據您提供的日志,似乎解壓縮塊的大小大於可用堆的大小。
我不了解EMR上的m1.large實例規范,但是您可以嘗試以下一些方法來避免此錯誤。
通常錯誤運行子意味着, 產生了紗線的子找不到足夠的堆空間來繼續其MR工作 。
可以嘗試的選項:
1)增加mapred.java.child.opts
大小。 這是子級作為其單獨的JVM進程獲得的默認大小。 默認情況下,它的200mb,對於任何合理的數據分析而言都是很小的。 更改參數-XmxNu
(以u為單位的N的最大堆大小)和-XmsNu
(以u為單位的N的初始堆大小)。 嘗試使用1Gb即-Xmx1g並查看效果,如果成功,則變小
2)將mapred.child.ulimit
設置為先前設置的最大堆大小的1.5或2倍。 它設置進程的虛擬內存量。
3)減少mapred.tasktracker.map.tasks.maximum
和mapred.tasktracker.reduce.tasks.maximum
以設置一次運行的並行映射器和化mapred.tasktracker.reduce.tasks.maximum
器的最大數量。
4) io.sort.mb
您已經嘗試過了。 嘗試將其設置為0.25*mapred.child.java.opts < io.sort.mb < 0.5*mapred.child.java.opts
。
最后,這是一種反復試驗的方法,因此請嘗試看看哪一個是正確的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.