一. 对hadoop eclipse plugin认识不足

http://zy19982004.iteye.com/blog/2024467曾经说到我最hadoop eclipse plugin作用的认识。但事实上我犯了一个错误,Win7 Eclipse里的MyWordCount程序一直在本地运行,没有提交到集群环境上运行(查看192.168.1.200:50030)没有这个Job。运行方式分为两种,右键Run As

  1. Java Application
  2. Run on Hadoop

如果说Run As Java Application在本地运行还好说,它直接使用项目下的依赖的Hadoop Jar,使用Hdfs作为input,对MyWordCount main方法的一步步调用,把输出结果写入Hdfs完成。这一切都跟MapReduce集群无关。

但Run on Hadoop为什么不行呢,难道这个插件的作用仅仅如http://zy19982004.iteye.com/blog/2024467说到的这么简单?

二. Hadoop2.x eclispe-plugin

再次下载源码https://github.com/winghc/hadoop2x-eclipse-plugin。简单看了几个类,如

  1. Wizard for publishing a job to a Hadoop server
  2. public class RunOnHadoopWizard extends Wizard {}
  3. Representation of a Map/Reduce running job on a given location
  4. public class HadoopJob {}

从注释就可以看出来插件是支持远程提交Job的。那是我使用不当吗?

三. Hadoop2.x eclispe-plugin工作原理

Run on Hadoop时

  1. 会在EclipseWorkspace\.metadata\.plugins\org.apache.hadoop.eclipse\下生成一个MapReduce Jar和一个对应文件夹(包含core-site.xml)。我们在Eclipse里配置的Hadoop集群信息会写到core-site.xml里面。
  2. 然后把此Job依据配置信息提交到本地或者集群。

我去看了下Job对应的core-site.xml,mapreduce.framework.name居然是local,yarn.resourcemanager.address居然是0.0.0.0:8032,于是回到Eclispe配置集群环境的地方,发现果然是这样的,也就是说插件根本没有把集群环境下的配置信息全部copy到Eclipse下。把Eclipse下这两项修改后,还是在本地运行,我就奇怪了,于是我在程序里加上

  1. conf.set("mapreduce.framework.name", "yarn");
  2. conf.set("yarn.resourcemanager.address", "192.168.1.200:8032");

终于正常提交到集群环境了。我怀疑插件最后在什么地方还是读取到了local和0.0.0.0:8032,写入了core-site.xml,有时间再去看看插件的源码。

四. 继续出问题

Job虽然是提交到了集群环境,但运行失败了。查看日志如下

  1. 2014-04-01 19:50:36,731 INFO org.apache.hadoop.yarn.server.resourcemanager.amlauncher.AMLauncher: Command to launch container container_1396351641800_0005_02_000001 :
  2. %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
  3. 2014-03-13 22:50:41,317 INFO  org.apache.hadoop.mapreduce.Job - Job job_1394710790246_0003 failed with state FAILED due to: Application application_1394710790246_0003 failed 2 times due to AM Container for appattempt_1394710790246_0003_000002 exited with  exitCode: 1 due to: Exception from container-launch:
  4. org.apache.hadoop.util.Shell$ExitCodeException: /bin/bash: line 0: fg: no job control
  5. at org.apache.hadoop.util.Shell.runCommand(Shell.java:464)
  6. at org.apache.hadoop.util.Shell.run(Shell.java:379)
  7. at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:589)
  8. at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:195)
  9. at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:283)
  10. at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:79)
  11. at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
  12. at java.util.concurrent.FutureTask.run(FutureTask.java:166)
  13. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
  14. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
  15. at java.lang.Thread.run(Thread.java:722)

上网找答案,发现是Hadoop本身的问题。

https://issues.apache.org/jira/browse/YARN-1298

https://issues.apache.org/jira/browse/MAPREDUCE-5655

五. 自己编译Hadoop2.2

  1. 下载Hadoop2.2源码http://apache.fayea.com/apache-mirror/hadoop/common/hadoop-2.2.0/hadoop-2.2.0-src.tar.gz
  2. 下载https://issues.apache.org/jira/i#browse/MAPREDUCE-5655两个patch
  3. 下载https://issues.apache.org/jira/i#browse/HADOOP-10110这个patch
  4. patch指令。patch -p0 < MRApps.patch。p0的0代表进去层次。不会的参考http://hi.baidu.com/thinkinginlamp/item/0ba1d051319b5ac09e2667f8
  5. 然后按照http://my.oschina.net/yiyuqiuchi/blog/188510去编译。hadoop-2.2.0-src/hadoop-dist/targethadoop-2.2.0.tar.gz就是编译好的。

给两张patch前后的对照图

下图左边为patch前Hadoop源码

下图左边为patch成功后Hadoop源码

六. 使用自己编译的包

  1. 检查看看patch是否被打包进去了。通过查看MRApps.class字节码得知已经被打包进去。通过查看YARNRunner.class字节码也是正确的,我在YARNRunner.java里面设置了一个PATCH_TEST编译时常量,"zy19982004"的字节码已经被内嵌到class的字节码里。
  2. 替换集群Jar,因为上述三个patch只涉及到两个Jar,另外一个pacth是修改pom文件并且是scope test,可以不管。用hadoop-2.2.0\share\hadoop\mapreduce\hadoop-mapreduce-client-common-2.2.0.jar(MRApps.patch)替换集群下的对应jar,用hadoop-2.2.0\share\hadoop\mapreduce\hadoop-mapreduce-client-jobclient-2.2.0.jar(YARNRunner.patch)替换集群下的对应jar。
  3. 修改windows环境下的mapred-site.xml,添加
    1. <property>
    2. <name>mapred.remote.os</name>
    3. <value>Linux</value>
    4. <description>Remote MapReduce framework's OS, can be either Linux or Windows</description>
    5. </property>
  4. 重启集群,这个错误已经没有了,但出现了另外的错误。
    1. Application application_1396339724108_0014 failed 2 times due to AM Container for appattempt_1396339724108_0014_000002 exited with exitCode: 1 due to: Exception from container-launch:
    2. org.apache.hadoop.util.Shell$ExitCodeException:
    3. 2014-04-01 19:50:36,731 INFO org.apache.hadoop.yarn.server.resourcemanager.amlauncher.AMLauncher: Command to launch container container_1396351641800_0005_02_000001 :
    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

    然后

    1. 1) Add such config property to your mapred-site.xml (client side only):
    2. <property>
    3. <name>mapreduce.application.classpath</name>
    4. <value>
    5. $HADOOP_CONF_DIR,
    6. $HADOOP_COMMON_HOME/share/hadoop/common/*,
    7. $HADOOP_COMMON_HOME/share/hadoop/common/lib/*,
    8. $HADOOP_HDFS_HOME/share/hadoop/hdfs/*,
    9. $HADOOP_HDFS_HOME/share/hadoop/hdfs/lib/*,
    10. $HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*,
    11. $HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*,
    12. $HADOOP_YARN_HOME/share/hadoop/yarn/*,
    13. $HADOOP_YARN_HOME/share/hadoop/yarn/lib/*
    14. </value>
    15. </property>

    终于成功了。。。

七. 不使用hadoop eclispe plugin的场景

自己调试Hadoop源码的时候,Debug As Java Application即可。前面两篇博客解决错误都是通过debug源码来解决的。

八. 总结

Window向Linux Hadoop提交作业的方法

  1. 配置好hadoop eclipse plugin。
  2. Job配置文件里mapreduce.framework.name为yarn。其它配置也需要正确。
  3. Run On Hadoop

Run As Application其实也可以提交Job,依赖于上一次Run on Hadoop过程中产生的jar,这为我们debug提供了一种思路。

 
 

Win7下无法提交MapReduce Job到集群环境(转)的更多相关文章

  1. Java --本地提交MapReduce作业至集群☞实现 Word Count

    还是那句话,看别人写的的总是觉得心累,代码一贴,一打包,扔到Hadoop上跑一遍就完事了????写个测试样例程序(MapReduce中的Hello World)还要这么麻烦!!!?,还本地打Jar包, ...

  2. Win7下通过eclipse远程连接CDH集群来执行相应的程序以及错误说明

    最近尝试这用用eclipse连接CDH的集群,由于之前尝试过很多次都没连上,有一次发现Cloudera Manager是将连接的端口修改了,所以才导致连接不上CDH的集群,之前Apache hadoo ...

  3. rocketmq那些事儿之集群环境搭建

    上一篇入门基础部分对rocketmq进行了一个基础知识的讲解说明,在正式使用前我们需要进行环境的搭建,今天就来说一说rockeketmq分布式集群环境的搭建 前言 之前已经介绍了rocketmq的入门 ...

  4. 基于HBase Hadoop 分布式集群环境下的MapReduce程序开发

    HBase分布式集群环境搭建成功后,连续4.5天实验客户端Map/Reduce程序开发,这方面的代码网上多得是,写个测试代码非常容易,可是真正运行起来可说是历经挫折.下面就是我最终调通并让程序在集群上 ...

  5. 本地idea开发mapreduce程序提交到远程hadoop集群执行

    https://www.codetd.com/article/664330 https://blog.csdn.net/dream_an/article/details/84342770 通过idea ...

  6. elasticsearch与mongodb分布式集群环境下数据同步

    1.ElasticSearch是什么 ElasticSearch 是一个基于Lucene构建的开源.分布式,RESTful搜索引擎.它的服务是为具有数据库和Web前端的应用程序提供附加的组件(即可搜索 ...

  7. Ubuntu14(64位) 集群环境下安装Hadoop2.4

    经过前边的积累,今天最终实现了集群环境下部署Hadoop.并成功执行了官方的样例. 工作例如以下: 两台机器: NameNode:上网小本,3G内存.机器名:YP-X100e,IP:192.168.1 ...

  8. (2)虚拟机下hadoop1.1.2集群环境搭建

    hadoop集群环境的搭建和单机版的搭建差点儿相同,就是多了一些文件的配置操作. 一.3台主机的hostname改动和IP地址绑定 注意:以下的操作我都是使用root权限进行! (1)3太主机的基本网 ...

  9. Centos7下GlusterFS分布式存储集群环境部署记录

    0)环境准备 GlusterFS至少需要两台服务器搭建,服务器配置最好相同,每个服务器两块磁盘,一块是用于安装系统,一块是用于GlusterFS. 192.168.10.239 GlusterFS-m ...

随机推荐

  1. Fortran 数据类型

  2. 使用async-http-client实现异步批量http请求

    最近项目中需要在微服务中调用rest接口,而且需要调用得次数很多,所以同步得http客户端已经不满足要求,在网上查阅资料后发现了async-http-client这个包得性能不错,所以写了个demo测 ...

  3. 修改Python IDLE代码配色及语法高亮主题

    初学Python,想必大家拿来练习最多的IDE就是Python自带的IDLE了,但是默认的代码配色及语法高亮主题确实很不适应,所以我们需要做个小小的美化,比如像下面这样我做的美化配置: HOW TO ...

  4. 硬盘坏道检测工具对比(DiskGenius/HdTunePro/MHDD等)

    说到硬盘检测软件,大家肯定会想到MHDD,但是MHDD真的好用?反正我觉得太难用了,只能在DOS下运行,不能在Win系统下运行:最重要的是只支持IDE硬盘模式,现在的主板几乎全部默认都是AHCI模式, ...

  5. (匹配)Antenna Placement --POJ --3020

    链接: http://poj.org/problem?id=3020 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82834#probl ...

  6. Hdu1427 速算24点 2017-01-18 17:26 46人阅读 评论(0) 收藏

    速算24点 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submiss ...

  7. hdu 2190 悼念512汶川大地震遇难同胞——重建希望小学

    题目 这道题拿到的时候拼凑了一会,感觉挺难的,然后博客说是:递推,我觉得递推其实就是找规律. 这是别人的思路:对于n米的长度,可以是由n-1长度加1而来,对于增加的1,只有三块1*1的砖一种铺法: 还 ...

  8. 洛谷P4248 [AHOI2013]差异(后缀自动机求lcp之和)

    题目见此 题解:首先所有后缀都在最后一个np节点,然后他们都是从1号点出发沿一些字符边到达这个点的,所以下文称1号点为根节点,我们思考一下什么时候会产生lcp,显然是当他们从根节点开始一直跳相同节点的 ...

  9. POJ1062不错的题——spfa倒向建图——枚举等级限制

    POJ1062 虽然是中文题目但是还是有一定几率都不准题目意思的:1.所有可能降价的措施不是降价多少钱而是降至多少钱2.等级范围:是你所走的那一条路中所有人中最好最低等级差不允许超过limit限制 思 ...

  10. Hibernate的查询方式汇总

    分别是HQL查询,对象化查询Criteria方法,动态查询DetachedCriteria,例子查询,sql查询,命名查询. 如果单纯的使用hibernate查询数据库只需要懂其中的一项就可以完成想要 ...