Hadoop java运行时内存不足

服务器是一个云服务器,内存为1G,CPU为1核。

然后执行一个Hadoop本身自带的example报错的。报错信息如下:

There is insufficient memory for the Java Runtime Environment to continue.

Native memory allocation (mmap) failed to map 12288 bytes for committing reserved memory.

执行的命令是:

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar grep /input/hadoop/core-site.xml /user/test1 'dfs[a-z.]+'

  

  

发现云服务器加内存加资源太贵,所以首先准备做一个Swap,这样的话可以变相的增加我的服务器的内存。

刚申请的云服务器一开始默认貌似是没有swap空间的,如果不确定的话,可以通过下面的命令来查看自己的服务器的swap分区的情况:

free -m

  

可以看到我的服务器的swap分区为大小0

  

因为我的系统的内存是1G,所以准备做个2GSwap空间。

  

我在网上找了一些增加swap的步骤,发现阿里云的用户遇到过类似的问题,参考URLhttps://yq.aliyun.com/ziliao/5443

  

下面是我执行的步骤(我使用的是root用户,当然如果你有sudo权限的话,也可以):

  1. / 目录下建立swap 目录

  2. 使用dd命令生成一个空文件,因为我准备建立一个2Gswap空间,所以我准备把空文件设置为2G

  3. 接下来使用mkswap 命令把这个空文件格式化为swap格式

      

  4. 激活swap

  5. 再次使用free -m 命令查看swap分区信息,可以发现已经配置成功

  6. 目前虽然已经配置好了缓存分区,但是我们的服务器重启之后会失去缓存分区,需要重新挂在,所以需要设置为开机就自动挂载

    /etc/fstab 中添加下面的内容: /swap/swap.img swap swap defaults 0 0

  

经过这样处理之后,再次运行任务后就没有出现过内存不足的情况了。不过,运行速率是降下来了,毕竟不是真正的物理内存,所以其实是牺牲了速度换取了空间。

  

猜你喜欢

转载自blog.csdn.net/shikenian520/article/details/79896639