【问题标题】:Error while running hadoop map reduce java program on HDP 2.0在 HDP 2.0 上运行 hadoop map reduce java 程序时出错
【发布时间】:2014-01-21 10:59:56
【问题描述】:

我在 java 中运行以下 mapreduce 程序,它编译成功,但在运行时我在 EC2 上使用 Hortonworks HDP2.0。

    package edu.osu.cse.ysmart.TestQuery;
    import java.io.IOException;
    import java.util.*;
    import java.text.*;
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.conf.*;
    import org.apache.hadoop.io.*;
    import org.apache.hadoop.util.Tool;
    import org.apache.hadoop.util.ToolRunner;
    import org.apache.hadoop.mapreduce.Job;
    import org.apache.hadoop.mapreduce.Mapper;
    import org.apache.hadoop.mapreduce.Reducer;
    import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
    import org.apache.hadoop.mapreduce.lib.input.FileSplit;
    import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
    import org.apache.hadoop.mapreduce.lib.output.MultipleOutputs;
    import org.apache.hadoop.mapreduce.lib.partition.*;


    public class TestQuery1 extends Configured implements Tool{

            public static class Map extends Mapper<Object, Text,NullWritable,Text>{

                    public void map(Object key, Text value, Context context) throws IOException,InterruptedException{

                            String line = value.toString();
                            String[] line_buf = new String[3];
                            int prev=0,i=0,n=0;
                            for(i=0,n=0,prev=0;i<line.length();i++){

                                    if (line.charAt(i) == '|'){
                                            line_buf[n] = line.substring(prev,i);
                                            n = n+1;
                                            prev = i+1;
                                    }
                                    if(n == 3)
                                            break;
                            }

                            if(n<3)
                                    line_buf[n] = line.substring(prev,i);
                            if(line_buf[2].compareTo("Abid Khan") == 0){

                                    NullWritable key_op = NullWritable.get();
                                    context.write(key_op , new Text(line_buf[1]+ "|" ));
                            }
                    }

            }

            public int run(String[] args) throws Exception{

                    Configuration conf = new Configuration();
                    Job job = new Job(conf,"TestQuery1");
                    job.setJarByClass(TestQuery1.class);
                    job.setMapOutputKeyClass(NullWritable.class);
                    job.setMapOutputValueClass(Text.class);
                    job.setOutputKeyClass(NullWritable.class);
                    job.setOutputValueClass(Text.class);
                    job.setMapperClass(Map.class);
                    FileInputFormat.addInputPath(job, new Path(args[0]));
                    FileOutputFormat.setOutputPath(job, new Path(args[1]));
                    return (job.waitForCompletion(true) ? 0 : 1);
            }

            public static void main(String[] args) throws Exception {

                            int res = ToolRunner.run(new Configuration(), new TestQuery1(), args);
                            System.exit(res);
            }

    }

以下是错误...

hadoop jar /usr/local/Read.jar edu.osu.cse.ysmart.TestQuery.TestQuery1 /user/nitin//Resume.csv /user/nitin/outs 14/01/03 17:12:05 INFO client.RMProxy:在 ip-10-0-0-219.ec2.internal/10.0.0.219:8050 连接到 ResourceManager 14/01/03 17:12:07 WARN mapreduce.JobSubmitter:未执行 Hadoop 命令行选项解析。实现 Tool 接口并使用 ToolRunner 执行您的应用程序来解决这个问题。 14/01/03 17:12:07 INFO input.FileInputFormat:要处理的总输入路径:1 14/01/03 17:12:07 INFO mapreduce.JobSubmitter:拆分数:1 14/01/03 17:12:07 INFO Configuration.deprecation:user.name 已弃用。相反,使用 mapreduce.job.user.name 14/01/03 17:12:07 INFO Configuration.deprecation:mapred.jar 已弃用。相反,使用 mapreduce.job.jar 14/01/03 17:12:07 INFO Configuration.deprecation:mapred.output.value.class 已弃用。相反,使用 mapreduce.job.output.value.class 14/01/03 17:12:07 INFO Configuration.deprecation: mapred.mapoutput.value.class 已弃用。相反,使用 mapreduce.map.output.value.class 14/01/03 17:12:07 INFO Configuration.deprecation:mapreduce.map.class 已弃用。相反,使用 mapreduce.job.map.class 14/01/03 17:12:07 INFO Configuration.deprecation:mapred.job.name 已弃用。相反,使用 mapreduce.job.name 14/01/03 17:12:07 INFO Configuration.deprecation:mapred.input.dir 已弃用。相反,使用 mapreduce.input.fileinputformat.inputdir 14/01/03 17:12:07 INFO Configuration.deprecation:mapred.output.dir 已弃用。相反,使用 mapreduce.output.fileoutputformat.outputdir 14/01/03 17:12:07 INFO Configuration.deprecation: mapred.map.tasks 已弃用。相反,使用 mapreduce.job.maps 14/01/03 17:12:07 INFO Configuration.deprecation: mapred.output.key.class 已弃用。相反,使用 mapreduce.job.output.key.class 14/01/03 17:12:07 INFO Configuration.deprecation: mapred.mapoutput.key.class 已弃用。相反,使用 mapreduce.map.output.key.class 14/01/03 17:12:07 INFO Configuration.deprecation:mapred.working.dir 已弃用。相反,使用 mapreduce.job.working.dir 14/01/03 17:12:08 INFO mapreduce.JobSubmitter:提交作业令牌:job_1388768204803_0006 14/01/03 17:12:08 INFO impl.YarnClientImpl:提交应用程序 application_1388768204803_0006 到 ResourceManager,地址为 ip-10-0-0-219.ec2.internal/10.0.0.219:8050 14/01/03 17:12:08 INFO mapreduce.Job:跟踪作业的 url:http://ip.ec2.internal:8088/proxy/application_1388768204803_0006/ 14/01/03 17:12:08 信息 mapreduce.Job:正在运行的作业:job_1388768204803_0006 2003 年 1 月 1 日 17:12:36 信息 mapreduce.Job:作业 job_1388768204803_0006 在 uber 模式下运行:false 2003 年 14 月 1 日 17:12:36 信息 mapreduce.Job:地图 0% 减少 0% 2003 年 14 月 1 日 17:12:58 信息 mapreduce.Job:任务 ID:尝试_1388768204803_0006_m_000000_0,状态:失败 错误:java.lang.NullPointerException 在 edu.osu.cse.ysmart.TestQuery.TestQuery1$Map.map(TestQuery1.java:42) 在 edu.osu.cse.ysmart.TestQuery.TestQuery1$Map.map(TestQuery1.java:22) 在 org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:145) 在 org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:763) 在 org.apache.hadoop.mapred.MapTask.run(MapTask.java:339) 在 org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:162) 在 java.security.AccessController.doPrivileged(本机方法) 在 javax.security.auth.Subject.doAs(Subject.java:396) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491) 在 org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:157)

请帮忙

【问题讨论】:

    标签: java hadoop dictionary reduce


    【解决方案1】:

    从异常跟踪看来,您试图在空对象上调用方法:

    attempt_1388768204803_0006_m_000000_0, Status : FAILED Error: java.lang.NullPointerException at edu.osu.cse.ysmart.TestQuery.TestQuery1$Map.map(TestQuery1.java:42) at 
    

    从源码来看,以下比较失败:

    if(line_buf[2].compareTo("Abid Khan") == 0)
    

    line_buf[2] 没有被填充,因此出现空指针异常。您可以在 if 条件之前打印 line_buf[2] 的值,以查看您是否有值。这将帮助您调试问题。

    【讨论】:

      猜你喜欢
      • 2011-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-03
      相关资源
      最近更新 更多