服务器是一个云服务器,内存为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,所以准备做个2G的Swap空间。
我在网上找了一些增加swap的步骤,发现阿里云的用户遇到过类似的问题,参考URL:https://yq.aliyun.com/ziliao/5443
下面是我执行的步骤(我使用的是root用户,当然如果你有sudo权限的话,也可以):
-
在 / 目录下建立swap 目录
-
使用dd命令生成一个空文件,因为我准备建立一个2G的swap空间,所以我准备把空文件设置为2G
-
接下来使用mkswap 命令把这个空文件格式化为swap格式
-
激活swap
-
再次使用free -m 命令查看swap分区信息,可以发现已经配置成功
-
目前虽然已经配置好了缓存分区,但是我们的服务器重启之后会失去缓存分区,需要重新挂在,所以需要设置为开机就自动挂载
到/etc/fstab 中添加下面的内容: /swap/swap.img swap swap defaults 0 0
经过这样处理之后,再次运行任务后就没有出现过内存不足的情况了。不过,运行速率是降下来了,毕竟不是真正的物理内存,所以其实是牺牲了速度换取了空间。