今天在跑一个hive任务的时候,遇到了这个错误,很明显这个错误是在shuffle阶段出现了问题,报错为java.lang.OutOfMemoryError:java heap space
从网上找到了解决办法,这里记录一下:
异常原因:很可能是因为数据倾斜导致的栈溢出。
在shuffle阶段,会将map的output数据给取下来,然后根据设定的参数决定是放进内存中,还是存储到磁盘里面进行操作。而mapreduce.reduce.shuffle.memory.limit.percent这个参数默认值是0.25,代表单个shuffle能够消耗的内存占reduce所有内存的比例。所以将这个参数进行调小操作,那么单个shuffle能够消耗的内存就没办法满足将数据进行处理,就会使用磁盘来慢慢操作。
解决办法:在跑批脚本中加入
set mapreduce.reduce.shuffle.memory.limit.percent=0.10;
原文链接:https://blog.csdn.net/u013084266/article/details/8076404