測试版本号:CDH5.0,(Hadoop2.3)

在使用windows调用Hadoop yarn平台的时候,一般都会遇到例如以下的错误:

2014-05-28 17:32:19,761 WARN org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor: Exception from container-launch with container ID: container_1401177251807_0034_01_000001 and exit code: 1
org.apache.hadoop.util.Shell$ExitCodeException: /bin/bash: line 0: fg: no job control at org.apache.hadoop.util.Shell.runCommand(Shell.java:505)
at org.apache.hadoop.util.Shell.run(Shell.java:418)
at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:650)
at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:195)
at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:300)
at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:81)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)

这个错误在Hadoop mapreduce bug的信息页面(https://issues.apache.org/jira/browse/MAPREDUCE-5655)已经攻克了,且影响的版本号是Hadoop2.2、Hadoop2.3,并且已经解决(并没有说在Hadoop2.4已经修复了)。

在http://blog.csdn.net/fansy1990/article/details/22896249 博客中,lz依照 https://issues.apache.org/jira/browse/MAPREDUCE-5655的解决方式进行了解决。这里想给出这个问题的一般解决思路。

1. 首先这个问题是在windows的eclipse作为client提交任务到linux Hadoop集群才会出现的问题,假设是linux的eclipse提交任务到linux Hadoop集群则不会出现这种问题。那么一个非常直观的想法就是同一时候使用两个client执行一个任务,然后每一个步骤都调试,来确定当中的不同点。这么做,肯定是能够的。可是这么做肯定也是比較费时的(并且还要自己在一个linux上装个eclipse,麻烦);

2. 依照1的做法,一般就能够看到有两点的不同,一个是java命令的不同,另一个就是classpath的不同。先说下断点的地方:

(1)java命令的断点:

YarnRunner.java的390行(cdh5.0 Hadoop2.3版本号源代码)

// Setup the command to run the AM
List<String> vargs = new ArrayList<String>(8);
vargs.add(Environment.JAVA_HOME.$() + "/bin/java");

这里打上断点后,然后执行到445这一行,就能够看到vargs是例如以下的样子(或者看vargsFinal这个变量):

[%JAVA_HOME%, -Dlog4j.configuration=container-log4j.properties, -Dyarn.app.container.log.dir=<LOG_DIR>, -Dyarn.app.container.log.filesize=0, -Dhadoop.root.logger=INFO,CLA, , -Xmx1024m, org.apache.hadoop.mapreduce.v2.app.MRAppMaster, 1><LOG_DIR>/stdout, 2><LOG_DIR>/stderr, null, null]

(2)classpath的断点:

YarnRunner.java的466行,查看environment的值,能够看到起值为:

{CLASSPATH=%PWD%;$HADOOP_CONF_DIR;$HADOOP_COMMON_HOME/*;$HADOOP_COMMON_HOME/lib/*;$HADOOP_HDFS_HOME/*;$HADOOP_HDFS_HOME/lib/*;$HADOOP_MAPRED_HOME/*;$HADOOP_MAPRED_HOME/lib/*;$HADOOP_YARN_HOME/*;$HADOOP_YARN_HOME/lib/*;%HADOOP_MAPRED_HOME%\share\hadoop\mapreduce\*;%HADOOP_MAPRED_HOME%\share\hadoop\mapreduce\lib\*;job.jar/job.jar;job.jar/classes/;job.jar/lib/*;%PWD%/*}

3. 看到2中的两个值就能够确定,windows和linux的不同之处了,主要有两个:

(1)%%和$的差别;

(2)正反斜杠的差别(这个好像不差别也行);
4. 看出上面两个地方的差别后,假设直接把这两个值改为:

[$JAVA_HOME/bin/java -Dlog4j.configuration=container-log4j.properties -Dyarn.app.container.log.dir=<LOG_DIR> -Dyarn.app.container.log.filesize=0 -Dhadoop.root.logger=INFO,CLA  -Xmx1024m org.apache.hadoop.mapreduce.v2.app.MRAppMaster 1><LOG_DIR>/stdout 2><LOG_DIR>/stderr ]

{CLASSPATH=$PWD:$HADOOP_CONF_DIR:$HADOOP_COMMON_HOME/*:$HADOOP_COMMON_HOME/lib/*:$HADOOP_HDFS_HOME/*:$HADOOP_HDFS_HOME/lib/*:$HADOOP_MAPRED_HOME/*:$HADOOP_MAPRED_HOME/lib/*:$HADOOP_YARN_HOME/*:$HADOOP_YARN_HOME/lib/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*:job.jar/job.jar:job.jar/classes/:job.jar/lib/*:$PWD/*}

那么应该是能够执行的;

5. 怎么改呢?

(1)在我们的project中新建一个YarnRunner类,该类与源代码的YarnRunner类一模一样(包路径,代码内容都一样);

(2)把390行替换为(这里默认Hadoop 集群是在linux环境下的):

即把

 vargs.add(Environment.JAVA_HOME.$() + "/bin/java");

替换为

vargs.add("$JAVA_HOME/bin/java");

(3)在466行加入�:

replaceEnvironment(environment);

这种方法放在最后面,为:

private void replaceEnvironment(Map<String, String> environment) {
String tmpClassPath = environment.get("CLASSPATH");
tmpClassPath=tmpClassPath.replaceAll(";", ":");
tmpClassPath=tmpClassPath.replaceAll("%PWD%", "\\$PWD");
tmpClassPath=tmpClassPath.replaceAll("%HADOOP_MAPRED_HOME%", "\\$HADOOP_MAPRED_HOME");
tmpClassPath= tmpClassPath.replaceAll("\\\\", "/" );
environment.put("CLASSPATH",tmpClassPath);
}

这样替换完毕后,在windows的eclipse中向linux Hadoop集群中提交任务就能够执行了。

最后,在执行的时候,eclipse终端没有日志打印出来;直接在src以下加上一个log4j.properties文件(能够在linux 集群的/etc/hadoop/conf/里面下载)。

分享,成长,快乐

转载请注明blog地址:http://blog.csdn.net/fansy1990

/bin/bash: line 0: fg: no job control一般解决方法的更多相关文章

  1. 在使用windows调用Hadoop 错误 /bin/bash: line 0: fg: no job control一般解决方法

    在使用windows调用Hadoop yarn平台的时候,一般都会遇到如下的错误: 2014-05-28 17:32:19,761 WARN org.apache.hadoop.yarn.server ...

  2. 【解决】org.apache.hadoop.util.Shell$ExitCodeException: /bin/bash: line 0: fg: no job control

    [环境信息] Hadoop版本:2.4.0 客户端OS:Windows Server 2008 R2 服务器端OS:CentOS 6.4 [问题现象] 在通过Windows客户端向Linux服务器提交 ...

  3. Exception message: /bin/bash: line 0: fg: no job control

    这个错误是 我本地idea 远程调试hadoop集群出现的 Diagnostics: Exception from container-launch. Container id: container_ ...

  4. Yarn报错:Exception message: /bin/bash: line 0: fg: no job control

    Exception message: /bin/bash: line 0: fg: no job control 这个错误是 本地idea跨平台远程调试hadoop集群出现的,在使用windows调用 ...

  5. Sublime Text 无法使用Package Control的解决方法 以及 常用的插件安装过程

    大概一个月之前给 Macbook air 装 Sublime Text 3 的时候,遇到过这个问题,当时解决了,现在回想,感觉忘的七七八八了,赶紧趁着还没有全忘光的时候记下来,当时的过程记得不一定准确 ...

  6. IIS6.0服务器搭建网站无法访问解决方法

    IIS6.0服务器搭建网站无法访问解决方法     IIS6.0服务器搭建网站无法访问解决方法很多朋友在用IIS6架网站的时候遇到不少问题,而这些问题有些在过去的IIS5里面就遇到过,有些是新出来的, ...

  7. CentOS下php使用127.0.0.1不能连接mysql的解决方法

    这篇文章主要介绍了CentOS下php使用127.0.0.1不能连接mysql的解决方法,本文原因是SELINUX导致的连接失败,需要的朋友可以参考下 php代码很简单: 复制代码代码如下: $ser ...

  8. error at ::0 can't find referenced pointcut...解决方法

    error at ::0 can't find referenced pointcut...解决方法 学习了:http://dyldragon.iteye.com/blog/512612 升级aspe ...

  9. mysql(8.0连接navicat发生的错误解决方法)

    关于mysql(8.0连接navicat发生的错误解决方法)数据库安装图形化界面无法更改加密的方式导致无法连接问题为解决; Alter user 'root'@'localhost' identifi ...

随机推荐

  1. 分布式数据库hbase详解

    新霸哥注意到了在人类随着计算机技术的发展,数据的存储量发生了很大的变化,可以用海量来形容,同时,存储的数据类型也是有多种多样的,网页,图片,视频,音频,电子邮件等等,所以在这中情况下以谷歌旗下的Big ...

  2. linux c下mysql编程样例

    /* ============================================================================ Name : mysql1.c Auth ...

  3. AudioPolicyManager::setDeviceConnectionState 流程(一)

    当有线耳机插入/拔出或蓝牙耳机的插入/拔出等,这些事件都会引起Audio Route的重新配置.重新配置的过程实在AudioPolicyManager::setDeviceConnectionStat ...

  4. PV3D学习笔记-导入DAE模型

      网上关于PV3D导入DAE模型的例子都非常多,可惜我研究了半天,一个都没成功,或者是破面问题,或者是贴图不显示,再或者贴图乱掉了.今天晚上终于搞定,心得发上来. 制作模型的软件是SketchUp ...

  5. 消除QQ表情小游戏

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  6. 【Excel】Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046}:

    [Excel]Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-0000000000 ...

  7. UDP广域网,局域网通信-原理分析,穿透技术

    一.UDP局域网通信. 这个比较简单,关于局域网中的2台或者更多的计算机之间的UDP通信,网络上一大把,直接复制粘贴就可以使用,原理也非常简单.所以,本文不做详细介绍. 二.UDP广域通信(包括路由器 ...

  8. 转】Maven学习总结(九)——使用Nexus搭建Maven私服

    原博文出自于:http://www.cnblogs.com/xdp-gacl/p/4068967.html 感谢! 一.搭建nexus私服的目的 为什么要搭建nexus私服,原因很简单,有些公司都不提 ...

  9. MecAnim

    [MecAnim] MecAnim是Unity 4.0推出的新的动画系统,新系统使用Animator组件来控制动画,老系统使用Animation组件来控制动画.此篇讲述MecAnim系统. What ...

  10. POJ 2318 TOYS (计算几何,叉积判断)

    TOYS Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8661   Accepted: 4114 Description ...