美文网首页
hadoop伪分布模式下报:Stack traceExitCod

hadoop伪分布模式下报:Stack traceExitCod

作者: 672f0d15e313 | 来源:发表于2018-02-01 10:43 被阅读0次

1、运行环境:

CentOS6.8(Linux hadoop101 2.6.32-642.el6.x86_64 #1 SMP Tue May 10 17:27:01 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux),java version "1.8.0_144",Hadoop 2.7.2;

2、问题描述与分析过程:

在hadoop的伪分布模式,在Yarn上面执行MapReduce(wordcount)的时候报如下错误:

18/01/31 23:48:30 INFO mapreduce.Job: Job job_1517413416343_0001 running in uber mode : false

18/01/31 23:48:30 INFO mapreduce.Job:  map 0% reduce 0%

18/01/31 23:48:35 INFO mapreduce.Job: Task Id : attempt_1517413416343_0001_m_000000_0, Status : FAILED

Exception from container-launch.

Container id: container_1517413416343_0001_01_000002

Exit code: 1

Stack trace: ExitCodeException exitCode=1:

at org.apache.hadoop.util.Shell.runCommand(Shell.java:545)

at org.apache.hadoop.util.Shell.run(Shell.java:456)

at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:722)

at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:212)

at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:302)

at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:82)

at java.util.concurrent.FutureTask.run(FutureTask.java:266)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

at java.lang.Thread.run(Thread.java:748)

Container exited with a non-zero exit code 1

18/01/31 23:48:41 INFO mapreduce.Job: Task Id : attempt_1517413416343_0001_m_000000_1, Status : FAILED

Exception from container-launch.

Container id: container_1517413416343_0001_01_000003

Exit code: 1

Stack trace: ExitCodeException exitCode=1:

at org.apache.hadoop.util.Shell.runCommand(Shell.java:545)

at org.apache.hadoop.util.Shell.run(Shell.java:456)

at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:722)

at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:212)

at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:302)

at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:82)

at java.util.concurrent.FutureTask.run(FutureTask.java:266)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

at java.lang.Thread.run(Thread.java:748)

Container exited with a non-zero exit code 1

18/01/31 23:48:47 INFO mapreduce.Job: Task Id : attempt_1517413416343_0001_m_000000_2, Status : FAILED

Exception from container-launch.

Container id: container_1517413416343_0001_01_000004

Exit code: 1

Stack trace: ExitCodeException exitCode=1:

at org.apache.hadoop.util.Shell.runCommand(Shell.java:545)

at org.apache.hadoop.util.Shell.run(Shell.java:456)

at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:722)

at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:212)

at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:302)

at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:82)

at java.util.concurrent.FutureTask.run(FutureTask.java:266)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

at java.lang.Thread.run(Thread.java:748)

初步判断是container容器创建出错了,从网上多方查询,非正确答案,都不能解决问题,后面查看container容器日志的时候发现如下问题描述:

[lyh@hadoop101 userlogs]$ more application_1517413416343_0001/container_1517413416343_0001_01_000003/stderr

Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000f4d80000, 105381888, 0) failed; error='无法分配内存' (errno=12)

[lyh@hadoop101 userlogs]$ more application_1517413416343_0001/container_1517413416343_0001_01_000003/stdout

#

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

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

很明显了,显示JVM内存分配出错了,于是就想到执行free命令查看一下内存使用情况,在执行free -h和df -h,显示如下结果:

[AAA@BBB hsperfdata_AAA]$ free -h

            total      used      free    shared    buffers    cached

Mem:          1.9G      1.4G      541M      256K        30M        63M

-/+ buffers/cache:      1.3G      636M

Swap:          0B        0B        0B

[AAA@BBB hsperfdata_AAA]$ df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda2        15G  3.4G  11G  25% /

tmpfs          996M    0  996M  0% /dev/shm

/dev/sda1      190M  39M  142M  22% /boot

/dev/sda3      2.0G  3.0M  1.9G  1% /swap

通过以上结果发现,实际内存才使用了1.4g,还有500多m呢,就比较纳闷为什么还出现内存的问题,最后将问题信息发送到stackoverflow上面,说是因为swap分区的问题;回头通过free和df再次查看,发现swap分区使用0和0,通过cat查看/etc/fstab文件发现/dev/sda3是ext4类型的,不是swap类型的,相当于swap分区没有启用,至于为什么swap分区没有启用就会出现内存的问题,怎么就不够用还需要进一步的研究。

3、解决办法与步骤:

思路:先将/dev/sda3分区转换成swap类型,在将/dev/sda3启用swap分区,重启就解决问题,整个过程需要root权限。

步骤:

3.1、将/dev/sda3分区转换成swap类型;

fdisk /dev/sda  选择 p t 3 L 82 w完成转换

3.2、将/dev/sda3启用swap分区

由于/dev/sda3是装系统的时候安装的,已经挂载在了系统上,需要先卸载后启用;

卸载:umount /dev/sda3 

制作swap区:mkswap /dev/sda3

启用swap分区:swapon /dev/sda3

编辑/etc/fstab文件:将原来的/sda3分区的uuid行注释掉,在最后一行添加如下信息后保存退出(此步骤很重要,否则重启报错)

/dev/sda3     swap                    swap    defaults        0 0

3.3、重启电脑,执行free和df命令,swap分区有了。

3.4、再次运行hadoop,完美解决问题。

4、补充说明:

本次swap分区没有启用,是因为在Linux系统安装的时候配置/swap分区的时候没有将文件系统类型改为swap,使用了默认的ext4。当然也可以通过创建swapfile文件添加swap分区解决问题。

5、部分截图:

相关文章

网友评论

      本文标题:hadoop伪分布模式下报:Stack traceExitCod

      本文链接:https://www.haomeiwen.com/subject/rfarzxtx.html