【问题标题】:Hadoop Mapreduce error NativeMethodAccessorHadoop Mapreduce 错误 NativeMethodAccessor
【发布时间】:2017-03-22 04:12:27
【问题描述】:

团队,

我是 Java 新手,正在尝试运行 Hadoop MapReduce 程序。遇到错误,无法调试。

计划:

import java.util.*; 

import java.io.IOException; 
import java.io.IOException; 

import org.apache.hadoop.fs.Path; 
import org.apache.hadoop.conf.*; 
import org.apache.hadoop.io.*; 
import org.apache.hadoop.mapred.*; 
import org.apache.hadoop.util.*; 

public class ProcessUnits 
{ 
   //Mapper class 
   public static class E_EMapper extends MapReduceBase implements 
   Mapper<LongWritable ,/*Input key Type */ 
   Text,                /*Input value Type*/ 
   Text,                /*Output key Type*/ 
   IntWritable>        /*Output value Type*/ 
   { 

      //Map function 
      public void map(LongWritable key, Text value, 
      OutputCollector<Text, IntWritable> output,   
      Reporter reporter) throws IOException 
      { 
         String line = value.toString(); 
         String lasttoken = null; 
         StringTokenizer s = new StringTokenizer(line,"\t"); 
         String year = s.nextToken(); 

         while(s.hasMoreTokens())
            {
               lasttoken=s.nextToken();
            } 

         int avgprice = Integer.parseInt(lasttoken); 
         output.collect(new Text(year), new IntWritable(avgprice)); 
      } 
   } 


   //Reducer class 
   public static class E_EReduce extends MapReduceBase implements 
   Reducer< Text, IntWritable, Text, IntWritable > 
   {  

      //Reduce function 
      public void reduce( Text key, Iterator <IntWritable> values, 
         OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException 
         { 
            int maxavg=30; 
            int val=Integer.MIN_VALUE; 

            while (values.hasNext()) 
            { 
               if((val=values.next().get())>maxavg) 
               { 
                  output.collect(key, new IntWritable(val)); 
               } 
            } 

         } 
   }  


   //Main function 
   public static void main(String args[])throws Exception 
   { 
      JobConf conf = new JobConf(ProcessUnits.class); 

      conf.setJobName("max_eletricityunits"); 
      conf.setOutputKeyClass(Text.class);
      conf.setOutputValueClass(IntWritable.class); 
      conf.setMapperClass(E_EMapper.class); 
      conf.setCombinerClass(E_EReduce.class); 
      conf.setReducerClass(E_EReduce.class); 
      conf.setInputFormat(TextInputFormat.class); 
      conf.setOutputFormat(TextOutputFormat.class); 

      FileInputFormat.setInputPaths(conf, new Path(args[0])); 
      FileOutputFormat.setOutputPath(conf, new Path(args[1])); 

      JobClient.runJob(conf); 
   } 
} 

错误:

诊断:null 此尝试失败。申请失败。 16/11/08 19:03:03 INFO mapreduce.Job:计数器:0 线程异常 “main” java.io.IOException:作业失败! 在 org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:865) 在 ProcessUnits.main(ProcessUnits.java:84) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 org.apache.hadoop.util.RunJar.run(RunJar.java:221) 在 org.apache.hadoop.util.RunJar.main(RunJar.java:136)

注意:我在 Windows 命令行中运行。

【问题讨论】:

  • 你的工作进展如何?
  • %HADOOP_HOME%/bin/hadoop jar units.jar ProcessUnits /home/input /home/output 甚至尝试使用以下命令 C:\Users\hadoop\hadoop-2.7.1\bin\hadoop .cmd jar units.jar ProcessUnits /home/input /home/output 但都返回相同的......
  • 是 i/o 本地路径吗?
  • hadoop 文件系统中没有两个路径都可用....
  • 您使用的是哪个 hadoop 版本?

标签: java hadoop


【解决方案1】:

1) 在你给StringTokenizer s = new StringTokenizer(line,"\t");的代码中

检查您在/home/input 中的输入文件,给定的整数由制表符分隔

2) 在代码中,替换int avgprice = Integer.parseInt(lasttoken); int avgprice = Integer.parseInt(lasttoken.trim());

希望这可行

【讨论】:

  • 打印hadoop fs -ls /home/input的输出
  • 因为刚才我尝试了您的代码并进行了以下更改。它工作正常 $ hadoop fs -ls /home/output 找到 2 个项目 -rw-r--r-- 3 hdfs hdfs 0 2016-11-08 14:59 /home/output/_SUCCESS -rw-r--r- - 3 hdfs hdfs 16 2016-11-08 14:59 /home/output/part-00000 [haas@ip-10-186-171-205 ~]$ hadoop fs -cat /home/output/part-00000 1979 40 1980 58 [haas@ip-10-186-171-205 ~]$
  • %HADOOP_HOME%/bin/hadoop fs -cat /home/input/sample.txt 1979 25 1980 29 1981 34 1984 40 1985 45
  • /home/input 路径下还有其他文件吗?
  • 更改代码后,你是否清理了存储库
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-05
  • 1970-01-01
相关资源
最近更新 更多