首先,我说说碰到这个问题的原因
造成在tasktracker的log中出现错误:
2012-01-04 13:49:27,734 INFO org.apache.hadoop.mapred.TaskTracker: JVM with ID: jvm_201112211104_0002_m_1605380604 given task: attempt_201112211104_0002_m_000002_0
2012-01-04 13:49:28,245 WARN org.apache.hadoop.mapred.DefaultTaskController: Exit code from task is : 134
2012-01-04 13:49:28,245 INFO org.apache.hadoop.mapred.DefaultTaskController: Output from DefaultTaskController's launchTask follows:
2012-01-04 13:49:28,245 INFO org.apache.hadoop.mapred.TaskController:
2012-01-04 13:49:28,364 INFO org.apache.hadoop.mapred.JvmManager: JVM : jvm_201112211104_0002_m_1605380604 exited with exit code 134. Number of tasks it ran: 0
2012-01-04 13:49:28,367 WARN org.apache.hadoop.mapred.TaskRunner: attempt_201112211104_0002_m_000002_0 : Child Error
java.io.IOException: Task process exit with nonzero status of 134.
at org.apache.hadoop.mapred.TaskRunner.run(TaskRunner.java:258)
2012-01-04 13:49:28,245 WARN org.apache.hadoop.mapred.DefaultTaskController: Exit code from task is : 134
2012-01-04 13:49:28,245 INFO org.apache.hadoop.mapred.DefaultTaskController: Output from DefaultTaskController's launchTask follows:
2012-01-04 13:49:28,245 INFO org.apache.hadoop.mapred.TaskController:
2012-01-04 13:49:28,364 INFO org.apache.hadoop.mapred.JvmManager: JVM : jvm_201112211104_0002_m_1605380604 exited with exit code 134. Number of tasks it ran: 0
2012-01-04 13:49:28,367 WARN org.apache.hadoop.mapred.TaskRunner: attempt_201112211104_0002_m_000002_0 : Child Error
java.io.IOException: Task process exit with nonzero status of 134.
at org.apache.hadoop.mapred.TaskRunner.run(TaskRunner.java:258)
是由于服务器上面试64bit的集群,自己测试的集群是32位的,在自己测试机上跑wordcount没有问题,不过在服务器上一跑job,就一直卡在
mapred.JobClient: map 0% reduce 0%
试过挺多方法,都没有解决,感到挺奇怪的,正在试下面这篇文章中说下ant重编,不过重编的过程很慢,希望能解决问题。。
下面这篇文章是转载的
======================================================================
解决hadoop抛出的Task process exit with nonzero status of 134异常(原创)
- 博客分类:
- 云计算
转载请注明出处,谢谢:
http://jackiee-cn.iteye.com/blog/1192526
问题:
hadoop安装完毕后,拿着hadoop的示例程序,尝试在单机环境下运行,先修改/etc/profile文件,增加如下内容:
export JAVA_HOME=/opt/jdk1.6.0_29
export HADOOP_HOME=/opt/hadoop-0.20.203.0
export HADOOP_CLASSPATH="$HADOOP_HOME/javademo"
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH
然后执行如下命令,让配置生效:
$. /etc/profile
再执行示例程序(或执行hadoop自带的wordcount示例):
hadoop demo.MaxTemperature input/sample.txt output
发现日志总停在如下状态:
mapred.JobClient: map 0% reduce 0%
通过查看hadoop的启动进程:
$ps -ef|grep hadoop
发现有一个进程异常终止,hadoop正常启动应该启动5个进程(namenode, datanode, secondary namenode, jobtracker, tasktracker),其中tasktracker异常终止了,通过查看 hadoop-root-tasktracker-***.log 日志,发现抛出了一个异常:
java.io.IOException: *Task process exit with nonzero status of 134.*
at org.apache.hadoop.mapred.TaskRunner.run(TaskRunner.java:258)
解决办法:
网上搜索了一番,最终终于把此问题解决掉了,把思路说明一下:
1、通过反编译查看org.apache.hadoop.mapred.TaskRunner类的258行附近的代码:
static
{
LOG.debug("Trying to load the custom-built native-hadoop library...");
try {
System.loadLibrary("hadoop");
LOG.info("Loaded the native-hadoop library");
nativeCodeLoaded = true;
}
catch (Throwable t) {
LOG.debug("Failed to load native-hadoop with error: " + t);
LOG.debug("java.library.path=" + System.getProperty("java.library.path"));
}
if (!nativeCodeLoaded)
LOG.warn("Unable to load native-hadoop library for your platform... using builtin-java classes where applicable");
}
感觉是加载本地库出了问题。
2、发现在$HADOOP_HOME目录下生成了如下日志文件:
hs_err_pid***.log
这个异常日志,打开一看,看不太懂,又从网上学习了一下,发现了一些线索,其中文件头的内容是这样的:
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGFPE (0x8) at pc=0x40008026, pid=31393, tid=2283477936
#
# JRE version: 6.0_29-b08
# Java VM: Java HotSpot(TM) Client VM (20.4-b01 mixed mode linux-x86 )
# Problematic frame:
# C [ld-linux.so.2+0x8026] double+0xb6
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
说明确实是加载本地库导致的异常。
3、网上学习了Hadoop本地库的一些介绍,发现有两种方法解决本地库的问题:
方法一是通过配置让本地库设置失效,在Hadoop的配置文件conf/core-site.xml中可以设置是否使用本地库:
<property>
<name>hadoop.native.lib</name>
<value>false</value>
</property>
测试后发现问题依然存在。
方法二是重新编译本地库:
于是下载了个ant,在/etc/profile中添加如下内容:
export ANT_HOME=/opt/apache-ant-1.8.0
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$ANT_HOME/bin:$PATH
执行如下命令,让配置生效:
$. /etc/profile
在$HADOOP_HOME目录下,使用如下命令:
$ant compile-native
编译完成后,可以在$HADOOP_HOME/build/native目录下找到相应的文件,然后移动编译好的文件到默认目录下。
最后重启hadoop服务,重新执行测试示例,终于看到了任务执行完毕的日志:
11/10/18 08:01:33 INFO mapred.JobClient: map 0% reduce 0%
11/10/18 08:01:55 INFO mapred.JobClient: map 50% reduce 0%
11/10/18 08:01:58 INFO mapred.JobClient: map 100% reduce 0%
11/10/18 08:02:10 INFO mapred.JobClient: map 100% reduce 100%
11/10/18 08:02:15 INFO mapred.JobClient: Job complete: job_201110180800_0001
最后别忘了将build目录移走或删除,否则有些意想不到的结果。
至此,纠结的问题得以解决,来杯
http://jackiee-cn.iteye.com/blog/1192526
问题:
hadoop安装完毕后,拿着hadoop的示例程序,尝试在单机环境下运行,先修改/etc/profile文件,增加如下内容:
export JAVA_HOME=/opt/jdk1.6.0_29
export HADOOP_HOME=/opt/hadoop-0.20.203.0
export HADOOP_CLASSPATH="$HADOOP_HOME/javademo"
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH
然后执行如下命令,让配置生效:
$. /etc/profile
再执行示例程序(或执行hadoop自带的wordcount示例):
hadoop demo.MaxTemperature input/sample.txt output
发现日志总停在如下状态:
mapred.JobClient: map 0% reduce 0%
通过查看hadoop的启动进程:
$ps -ef|grep hadoop
发现有一个进程异常终止,hadoop正常启动应该启动5个进程(namenode, datanode, secondary namenode, jobtracker, tasktracker),其中tasktracker异常终止了,通过查看 hadoop-root-tasktracker-***.log 日志,发现抛出了一个异常:
java.io.IOException: *Task process exit with nonzero status of 134.*
at org.apache.hadoop.mapred.TaskRunner.run(TaskRunner.java:258)
解决办法:
网上搜索了一番,最终终于把此问题解决掉了,把思路说明一下:
1、通过反编译查看org.apache.hadoop.mapred.TaskRunner类的258行附近的代码:
static
{
LOG.debug("Trying to load the custom-built native-hadoop library...");
try {
System.loadLibrary("hadoop");
LOG.info("Loaded the native-hadoop library");
nativeCodeLoaded = true;
}
catch (Throwable t) {
LOG.debug("Failed to load native-hadoop with error: " + t);
LOG.debug("java.library.path=" + System.getProperty("java.library.path"));
}
if (!nativeCodeLoaded)
LOG.warn("Unable to load native-hadoop library for your platform... using builtin-java classes where applicable");
}
感觉是加载本地库出了问题。
2、发现在$HADOOP_HOME目录下生成了如下日志文件:
hs_err_pid***.log
这个异常日志,打开一看,看不太懂,又从网上学习了一下,发现了一些线索,其中文件头的内容是这样的:
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGFPE (0x8) at pc=0x40008026, pid=31393, tid=2283477936
#
# JRE version: 6.0_29-b08
# Java VM: Java HotSpot(TM) Client VM (20.4-b01 mixed mode linux-x86 )
# Problematic frame:
# C [ld-linux.so.2+0x8026] double+0xb6
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
说明确实是加载本地库导致的异常。
3、网上学习了Hadoop本地库的一些介绍,发现有两种方法解决本地库的问题:
方法一是通过配置让本地库设置失效,在Hadoop的配置文件conf/core-site.xml中可以设置是否使用本地库:
<property>
<name>hadoop.native.lib</name>
<value>false</value>
</property>
测试后发现问题依然存在。
方法二是重新编译本地库:
于是下载了个ant,在/etc/profile中添加如下内容:
export ANT_HOME=/opt/apache-ant-1.8.0
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$ANT_HOME/bin:$PATH
执行如下命令,让配置生效:
$. /etc/profile
在$HADOOP_HOME目录下,使用如下命令:
$ant compile-native
编译完成后,可以在$HADOOP_HOME/build/native目录下找到相应的文件,然后移动编译好的文件到默认目录下。
最后重启hadoop服务,重新执行测试示例,终于看到了任务执行完毕的日志:
11/10/18 08:01:33 INFO mapred.JobClient: map 0% reduce 0%
11/10/18 08:01:55 INFO mapred.JobClient: map 50% reduce 0%
11/10/18 08:01:58 INFO mapred.JobClient: map 100% reduce 0%
11/10/18 08:02:10 INFO mapred.JobClient: map 100% reduce 100%
11/10/18 08:02:15 INFO mapred.JobClient: Job complete: job_201110180800_0001
最后别忘了将build目录移走或删除,否则有些意想不到的结果。
至此,纠结的问题得以解决,来杯