分享

eclipse设置运行在yarn上后失败,不设置就可以运行

chenyang 发表于 2014-8-7 08:59:13 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 11 40398
跟帖没人回答,只好发帖求助。在hadoop2.4.1伪分布环境中,用MyEclipse10和相应的插件,运行hadoop自带的WordCount程序,先前出现”/bin/bash: line 0: fg: no job control",按照论坛里的方法重新编译了YARNRunner类,然后就总是出现以下错误:


用了各种方法,比如在mapred-site.xml和yarn-site.xml中设置“mapreduce.application.classpath"属性,但都没有解决上述问题,请问哪位可以帮忙解决一下。WordCount程序中的main方法如下:
public static void main(String[] args) throws Exception {
                Configuration conf = new Configuration();
                conf.set("mapreduce.framework.name", "yarn");
                conf.set("yarn.resourcemanager.address", "10.35.1.177:8032");
                args=new String[2];
                args[0]="hdfs://10.35.1.177:9000/test/aa";
                args[1]="hdfs://10.35.1.177:9000/test/output";
                String[] otherArgs = new GenericOptionsParser(conf, args)
                                .getRemainingArgs();
                if (otherArgs.length != 2) {
                        System.err.println("Usage: wordcount <in> <out>");
                        System.exit(2);
                }
                Job job = new Job(conf, "word count");
                job.setJarByClass(WordCount.class);
                job.setMapperClass(TokenizerMapper.class);
                job.setCombinerClass(IntSumReducer.class);
                job.setReducerClass(IntSumReducer.class);
                job.setOutputKeyClass(Text.class);
                job.setOutputValueClass(IntWritable.class);
                FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
                FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
                System.exit(job.waitForCompletion(true) ? 0 : 1);
}

已有(11)人评论

跳转到指定楼层
sstutu 发表于 2014-8-7 09:22:45
看看自己哪里需要改进,只能帮你再次确认一下:



具体步骤,改写YARNRunner源码中的一些方法(YARNRunner.java源码类在hadoop-mapreduce-client-jobclient的maven项目中的org.apache.hadoop.mapred包下)需要在src下建同样的包名,类名,覆盖原来jar包里面自带的类。

YarnRunner.java的390行 (Apache Hadoop2.2的源码)


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

改为
  1. vargs.add("$JAVA_HOME/bin/java");  
复制代码
在YarnRunner.java类中,新增一个路径转换的方法
  1. private void replaceEnvironment(Map<String, String> environment) {  
  2.       String tmpClassPath = environment.get("CLASSPATH");  
  3.       tmpClassPath=tmpClassPath.replaceAll(";", ":");  
  4.       tmpClassPath=tmpClassPath.replaceAll("%PWD%", "\\$PWD");  
  5.       tmpClassPath=tmpClassPath.replaceAll("%HADOOP_MAPRED_HOME%", "\\$HADOOP_MAPRED_HOME");  
  6.       tmpClassPath= tmpClassPath.replaceAll("\\\", "/" );  
  7.       environment.put("CLASSPATH",tmpClassPath);  
  8. }  
复制代码

在YarnRunner.java的在466行添加:
  1. replaceEnvironment(environment);  
复制代码
通过,这样设置后,原来的异常就得到解决了,在这里分布式测试的例子依旧是hellow world,源码如下:
  1. package com.qin.wordcount;
  2. import java.io.IOException;
  3. import org.apache.hadoop.conf.Configuration;
  4. import org.apache.hadoop.fs.FileSystem;
  5. import org.apache.hadoop.fs.Path;
  6. import org.apache.hadoop.io.IntWritable;
  7. import org.apache.hadoop.io.LongWritable;
  8. import org.apache.hadoop.io.Text;
  9. import org.apache.hadoop.mapred.JobConf;
  10. import org.apache.hadoop.mapred.YARNRunner;
  11. import org.apache.hadoop.mapreduce.Job;
  12. import org.apache.hadoop.mapreduce.Mapper;
  13. import org.apache.hadoop.mapreduce.Reducer;
  14. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  15. import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
  16. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
  17. import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
  18. /***
  19. *
  20. * Hadoop2.2.0完全分布式测试
  21. * 放WordCount的例子
  22. *
  23. * @author qindongliang
  24. *
  25. * hadoop技术交流群:  376932160
  26. *
  27. *
  28. * */
  29. public class MyWordCount {
  30.        
  31.        
  32.         /**
  33.          * Mapper
  34.          *
  35.          * **/
  36.         private static class WMapper extends Mapper<LongWritable, Text, Text, IntWritable>{
  37.                
  38.                
  39.                 private IntWritable count=new IntWritable(1);
  40.                 private Text text=new Text();
  41.                 @Override
  42.                 protected void map(LongWritable key, Text value,Context context)
  43.                                 throws IOException, InterruptedException {
  44.                         String values[]=value.toString().split("#");
  45.                         //System.out.println(values[0]+"========"+values[1]);
  46.                         count.set(Integer.parseInt(values[1]));
  47.                         text.set(values[0]);
  48.                         context.write(text,count);
  49.                        
  50.                 }
  51.                
  52.         }
  53.        
  54.         /**
  55.          * Reducer
  56.          *
  57.          * **/
  58.         private static class WReducer extends Reducer<Text, IntWritable, Text, Text>{
  59.                
  60.                 private Text t=new Text();
  61.                 @Override
  62.                 protected void reduce(Text key, Iterable<IntWritable> value,Context context)
  63.                                 throws IOException, InterruptedException {
  64.                         int count=0;
  65.                         for(IntWritable i:value){
  66.                                 count+=i.get();
  67.                         }
  68.                         t.set(count+"");
  69.                         context.write(key,t);
  70.                        
  71.                 }
  72.                
  73.         }
  74.        
  75.        
  76.         /**
  77.          * 改动一
  78.          * (1)shell源码里添加checkHadoopHome的路径
  79.          * (2)974行,FileUtils里面
  80.          * **/
  81.        
  82.         public static void main(String[] args) throws Exception{
  83.                
  84.                
  85.                 Configuration conf=new Configuration();
  86.                
  87.             conf.set("mapreduce.job.jar", "myjob.jar");
  88.                 conf.set("fs.defaultFS","hdfs://192.168.46.28:9000");
  89.                 conf.set("mapreduce.framework.name", "yarn");  
  90.                 conf.set("yarn.resourcemanager.address", "192.168.46.28:8032");
  91.                 /**Job任务**/
  92.            //Job job=new Job(conf, "testwordcount");//废弃此API
  93.            Job job=Job.getInstance(conf, "new api");
  94.                 job.setJarByClass(MyWordCount.class);
  95.                 System.out.println("模式:  "+conf.get("mapreduce.jobtracker.address"));;
  96.                 // job.setCombinerClass(PCombine.class);
  97.        
  98.                  
  99.                  
  100.                 // job.setNumReduceTasks(3);//设置为3
  101.                  job.setMapperClass(WMapper.class);
  102.                  job.setReducerClass(WReducer.class);
  103.                  job.setInputFormatClass(TextInputFormat.class);
  104.                  job.setOutputFormatClass(TextOutputFormat.class);
  105.          
  106.                
  107.                  job.setMapOutputKeyClass(Text.class);
  108.                  job.setMapOutputValueClass(IntWritable.class);
  109.                  job.setOutputKeyClass(Text.class);
  110.                  job.setOutputValueClass(Text.class);
  111.        
  112.                         String path="hdfs://192.168.46.28:9000/qin/output";
  113.                         FileSystem fs=FileSystem.get(conf);
  114.                         Path p=new Path(path);
  115.                         if(fs.exists(p)){
  116.                                 fs.delete(p, true);
  117.                                 System.out.println("输出路径存在,已删除!");
  118.                         }
  119.                 FileInputFormat.setInputPaths(job, "hdfs://192.168.46.28:9000/qin/input");
  120.                 FileOutputFormat.setOutputPath(job,p );
  121.                 System.exit(job.waitForCompletion(true) ? 0 : 1);  
  122.                
  123.                
  124.                
  125.                
  126.         }
  127.        
  128. }
复制代码
在运行的时候,需要注意把,hadoop集群上的配置文件core-site.xml,hdfs-site.xml,mapred-site.xml,yarn-site.xml文件拷贝到src的根目录下,最好也放一个log4j.xml方便查看日志。并在mapred-site.xml里面,添加如下属性:
  1. <name>mapred.remote.os</name>
  2. <value>Linux</value>
  3. <description>RemoteMapReduce framework's OS, can be either Linux orWindows</description>
  4. </property>
复制代码



然后,把项目打成jar包,运行提交作业,控制台打印内容如下:
  1. 模式:  hp1:8021
  2. 输出路径存在,已删除!
  3. INFO - RMProxy.createRMProxy(56) | Connecting to ResourceManager at /192.168.46.28:8032
  4. WARN - JobSubmitter.copyAndConfigureFiles(149) | Hadoop command-line option parsing not performed. Implement the Tool interface and execute your application with ToolRunner to remedy this.
  5. INFO - FileInputFormat.listStatus(287) | Total input paths to process : 1
  6. INFO - JobSubmitter.submitJobInternal(394) | number of splits:1
  7. INFO - Configuration.warnOnceIfDeprecated(840) | user.name is deprecated. Instead, use mapreduce.job.user.name
  8. INFO - Configuration.warnOnceIfDeprecated(840) | mapred.jar is deprecated. Instead, use mapreduce.job.jar
  9. INFO - Configuration.warnOnceIfDeprecated(840) | fs.default.name is deprecated. Instead, use fs.defaultFS
  10. INFO - Configuration.warnOnceIfDeprecated(840) | mapred.output.value.class is deprecated. Instead, use mapreduce.job.output.value.class
  11. INFO - Configuration.warnOnceIfDeprecated(840) | mapred.mapoutput.value.class is deprecated. Instead, use mapreduce.map.output.value.class
  12. INFO - Configuration.warnOnceIfDeprecated(840) | mapreduce.map.class is deprecated. Instead, use mapreduce.job.map.class
  13. INFO - Configuration.warnOnceIfDeprecated(840) | mapred.job.name is deprecated. Instead, use mapreduce.job.name
  14. INFO - Configuration.warnOnceIfDeprecated(840) | mapreduce.reduce.class is deprecated. Instead, use mapreduce.job.reduce.class
  15. INFO - Configuration.warnOnceIfDeprecated(840) | mapreduce.inputformat.class is deprecated. Instead, use mapreduce.job.inputformat.class
  16. INFO - Configuration.warnOnceIfDeprecated(840) | mapred.input.dir is deprecated. Instead, use mapreduce.input.fileinputformat.inputdir
  17. INFO - Configuration.warnOnceIfDeprecated(840) | mapred.output.dir is deprecated. Instead, use mapreduce.output.fileoutputformat.outputdir
  18. INFO - Configuration.warnOnceIfDeprecated(840) | mapreduce.outputformat.class is deprecated. Instead, use mapreduce.job.outputformat.class
  19. INFO - Configuration.warnOnceIfDeprecated(840) | mapred.map.tasks is deprecated. Instead, use mapreduce.job.maps
  20. INFO - Configuration.warnOnceIfDeprecated(840) | mapred.output.key.class is deprecated. Instead, use mapreduce.job.output.key.class
  21. INFO - Configuration.warnOnceIfDeprecated(840) | mapred.mapoutput.key.class is deprecated. Instead, use mapreduce.map.output.key.class
  22. INFO - Configuration.warnOnceIfDeprecated(840) | mapred.working.dir is deprecated. Instead, use mapreduce.job.working.dir
  23. INFO - JobSubmitter.printTokens(477) | Submitting tokens for job: job_1402492118962_0004
  24. INFO - YarnClientImpl.submitApplication(174) | Submitted application application_1402492118962_0004 to ResourceManager at /192.168.46.28:8032
  25. INFO - Job.submit(1272) | The url to track the job: http://hp1:8088/proxy/application_1402492118962_0004/
  26. INFO - Job.monitorAndPrintJob(1317) | Running job: job_1402492118962_0004
  27. INFO - Job.monitorAndPrintJob(1338) | Job job_1402492118962_0004 running in uber mode : false
  28. INFO - Job.monitorAndPrintJob(1345) |  map 0% reduce 0%
  29. INFO - Job.monitorAndPrintJob(1345) |  map 100% reduce 0%
  30. INFO - Job.monitorAndPrintJob(1345) |  map 100% reduce 100%
  31. INFO - Job.monitorAndPrintJob(1356) | Job job_1402492118962_0004 completed successfully
  32. INFO - Job.monitorAndPrintJob(1363) | Counters: 43
  33.         File System Counters
  34.                 FILE: Number of bytes read=58
  35.                 FILE: Number of bytes written=159667
  36.                 FILE: Number of read operations=0
  37.                 FILE: Number of large read operations=0
  38.                 FILE: Number of write operations=0
  39.                 HDFS: Number of bytes read=147
  40.                 HDFS: Number of bytes written=27
  41.                 HDFS: Number of read operations=6
  42.                 HDFS: Number of large read operations=0
  43.                 HDFS: Number of write operations=2
  44.         Job Counters
  45.                 Launched map tasks=1
  46.                 Launched reduce tasks=1
  47.                 Data-local map tasks=1
  48.                 Total time spent by all maps in occupied slots (ms)=6155
  49.                 Total time spent by all reduces in occupied slots (ms)=4929
  50.         Map-Reduce Framework
  51.                 Map input records=4
  52.                 Map output records=4
  53.                 Map output bytes=44
  54.                 Map output materialized bytes=58
  55.                 Input split bytes=109
  56.                 Combine input records=0
  57.                 Combine output records=0
  58.                 Reduce input groups=3
  59.                 Reduce shuffle bytes=58
  60.                 Reduce input records=4
  61.                 Reduce output records=3
  62.                 Spilled Records=8
  63.                 Shuffled Maps =1
  64.                 Failed Shuffles=0
  65.                 Merged Map outputs=1
  66.                 GC time elapsed (ms)=99
  67.                 CPU time spent (ms)=1060
  68.                 Physical memory (bytes) snapshot=309071872
  69.                 Virtual memory (bytes) snapshot=1680531456
  70.                 Total committed heap usage (bytes)=136450048
  71.         Shuffle Errors
  72.                 BAD_ID=0
  73.                 CONNECTION=0
  74.                 IO_ERROR=0
  75.                 WRONG_LENGTH=0
  76.                 WRONG_MAP=0
  77.                 WRONG_REDUCE=0
  78.         File Input Format Counters
  79.                 Bytes Read=38
  80.         File Output Format Counters
  81.                 Bytes Written=27
复制代码

















回复

使用道具 举报

chenyang 发表于 2014-8-7 09:43:35
sstutu 发表于 2014-8-7 09:22
看看自己哪里需要改进,只能帮你再次确认一下:

hadoop2.4.1的YARNRunner类和hadoop2.2不一样,这样修改是否有啥其他问题?另外,用该方法是针对修复”/bin/bash: line 0: fg: no job control"问题吧。
回复

使用道具 举报

sstutu 发表于 2014-8-7 09:59:00
chenyang 发表于 2014-8-7 09:43
hadoop2.4.1的YARNRunner类和hadoop2.2不一样,这样修改是否有啥其他问题?另外,用该方法是针对修复”/b ...

这个是尝试解决你的问题的,像下面这些,还有你的程序,最好也看看。跟别的地方哪里有所不同

Configuration conf=new Configuration();               
conf.set("mapreduce.job.jar", "myjob.jar");
conf.set("fs.defaultFS","hdfs://192.168.46.28:9000");
conf.set("mapreduce.framework.name", "yarn");  
conf.set("yarn.resourcemanager.address", "192.168.46.28:8032");


回复

使用道具 举报

chenyang 发表于 2014-8-7 10:14:37
sstutu 发表于 2014-8-7 09:59
这个是尝试解决你的问题的,像下面这些,还有你的程序,最好也看看。跟别的地方哪里有所不同

Configur ...

压缩jar后放在Linux后可以正常运行,但在Myclipse环境下就不能运行,说明程序是没多大问题的,只是windows连接Linux配置没设置好。
回复

使用道具 举报

desehawk 发表于 2014-8-7 11:06:33
本帖最后由 desehawk 于 2014-8-7 11:08 编辑
chenyang 发表于 2014-8-7 10:14
压缩jar后放在Linux后可以正常运行,但在Myclipse环境下就不能运行,说明程序是没多大问题的,只是window ...

为什么我就没有遇到你们的问题啊,是在什么环境下啊。
直接使用Eclipse插件链接不就行了吗?当然还需要
hadoop.dll
winutils.exe




回复

使用道具 举报

chenyang 发表于 2014-8-7 12:21:14
desehawk 发表于 2014-8-7 11:06
本帖最后由 desehawk 于 2014-8-7 11:08 编辑

为什么我就没有遇到你们的问题啊,是在什么环境下啊。

用了hadoop-common-2.2.0-bin.rar压缩包的这两个文件了,不用这两个文件会报但还是报错。
环境:
    CentOS 6.4- 64位,Hadoop2.4.1伪分布,MyEclipse编程是在windows32位下,插件是根据hadoop2.4.1安装包生成的插件。
回复

使用道具 举报

chenyang 发表于 2014-8-7 12:41:07
desehawk 发表于 2014-8-7 11:06
本帖最后由 desehawk 于 2014-8-7 11:08 编辑

为什么我就没有遇到你们的问题啊,是在什么环境下啊。

你的是什么版本啊?
回复

使用道具 举报

desehawk 发表于 2014-8-7 14:11:00
chenyang 发表于 2014-8-7 12:41
你的是什么版本啊?
我的是hadoop2.2  Ubuntu  
win7 64 Eclipse下面,但是我见到网上2.2也有类似的问题,但是我怎么没有遇到那
回复

使用道具 举报

chenyang 发表于 2014-8-7 14:52:56
本帖最后由 chenyang 于 2014-8-7 14:55 编辑
sstutu 发表于 2014-8-7 09:59
这个是尝试解决你的问题的,像下面这些,还有你的程序,最好也看看。跟别的地方哪里有所不同

Configur ...

错误日志如下,报出没找到相关的类,在配置yarn-site.xml中增加了"yarn.application.classpath"参数也不起作用啊。
  1. Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/service/CompositeService
  2.         at java.lang.ClassLoader.defineClass1(Native Method)
  3.         at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
  4.         at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
  5.         at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
  6.         at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
  7.         at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
  8.         at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
  9.         at java.security.AccessController.doPrivileged(Native Method)
  10.         at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
  11.         at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
  12.         at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
  13.         at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
  14.         at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
  15. Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.service.CompositeService
  16.         at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
  17.         at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
  18.         at java.security.AccessController.doPrivileged(Native Method)
  19.         at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
  20.         at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
  21.         at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
  22.         at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
  23.         ... 13 more
复制代码


回复

使用道具 举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条