执行MapReduce报错:无法分配内存 (errno=12)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了执行MapReduce报错:无法分配内存 (errno=12)相关的知识,希望对你有一定的参考价值。

执行MapReduce报错:无法分配内存 (errno=12)


0. 写在前面

  • Linux: Ubuntu Kylin16.04
  • Hadoop: Hadoop2.7.2
  • IDE: Eclipse3.8

1. 程序介绍

程序执行一个MapReduce,该MapReduce实现了自定义分区,总共分为4个分区,且在Driver端自定义设置reducer端num个数为4

2. 报错解决

代码的错误信息如下:

OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000f5a9b000, 66166784, 0) failed; error=无法分配内存 (errno=12)

查找了资料发现是​​/proc/sys/vm/​​目录下的​​max_map_count​​初始值太小,需要将其增大,设置为1000000

# 查看大小
root@node01:~$ cat /proc/sys/vm/max_map_count
65530
# 加一个配置
root@node01:~$ echo 1000000 > /proc/sys/vm/max_map_count

这并没有解决问题,依旧报错

尝试继续增大该值,依然无效

既然如此,那造成​​无法分配内存​​的原因应该是虚拟机分配的内存本身就不够 果不其然,我的虚拟机只分配了2G的内存,满足不了该程序的资源要求

我将虚拟机内存调整为4G,最后顺利执行成功

3. 参考

​https://www.cnblogs.com/acm-bingzi/p/ubuntuErrno12.html​

以上是关于执行MapReduce报错:无法分配内存 (errno=12)的主要内容,如果未能解决你的问题,请参考以下文章

明明还有大量内存,为啥报错“无法分配内存”?

明明还有大量内存,为啥报错“无法分配内存”?

mapreduce on yarn简单内存分配解释

无法在分配的内存中执行查询[关闭]

C++程序,内存占用一直增加,最后无法分配内存而中断

WSL2 上的设备内存分配失败