MapReduce 在Shuffle阶段 内存溢出原因分析及处理方法
生活随笔
收集整理的這篇文章主要介紹了
MapReduce 在Shuffle阶段 内存溢出原因分析及处理方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在Reduce運行中,有時出現內存溢出錯誤,拋出的異常信息如下:
Error: org.apache.hadoop.mapreduce.task.reduce.Shuffle$ShuffleError: error in shuffle in fetcher#1 at org.apache.hadoop.mapreduce.task.reduce.Shuffle.run(Shuffle.java:134) at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:387) at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:422) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1754) at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158) Caused by: java.lang.OutOfMemoryError: Java heap space at org.apache.hadoop.io.BoundedByteArrayOutputStream.(BoundedByteArrayOutputStream.java:56) at org.apache.hadoop.io.BoundedByteArrayOutputStream.(BoundedByteArrayOutputStream.java:46) at org.apache.hadoop.mapreduce.task.reduce.InMemoryMapOutput.(InMemoryMapOutput.java:63) at org.apache.hadoop.mapreduce.task.reduce.MergeManagerImpl.unconditionalReserve(MergeManagerImpl.java:309) at org.apache.hadoop.mapreduce.task.reduce.MergeManagerImpl.reserve(MergeManagerImpl.java:299) at org.apache.hadoop.mapreduce.task.reduce.Fetcher.copyMapOutput(Fetcher.java:511) at org.apache.hadoop.mapreduce.task.reduce.Fetcher.copyFromHost(Fetcher.java:333) at org.apache.hadoop.mapreduce.task.reduce.Fetcher.run(Fetcher.java:193)解析Redue Shuffle過程和參數
MergeManager
MergeManager是重要的數據結構,用于管理shuffle的數據。它盡量使用內存來緩存shuffle的數據,提高效率,如果緩存不了,則輸出到硬盤上。
MergeManager的幾個重要參數
我們把reduce過程中的內存到磁盤的門限降低,防止內存溢出。因此修改mapred-site.xml文件內容如下:
<configuration><property><name>mapreduce.reduce.shuffle.merge.percent</name><value>0.3</value></property> </configuration>總結
以上是生活随笔為你收集整理的MapReduce 在Shuffle阶段 内存溢出原因分析及处理方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: YARN环境部署
- 下一篇: 提交官方MapReduce作业到YARN