运行hadoop map时出错在HDP 2.0上减少java程序

时间:2014-01-03 17:27:15

标签: java hadoop dictionary reduce

我正在运行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:在ip-10-0-0-219.ec2.internal / 10.0.0.219:8050向ResourceManager提交的应用程序application_1388768204803_0006     14/01/03 17:12:08 INFO mapreduce.Job:跟踪工作的网址:http://ip.ec2.internal:8088/proxy/application_1388768204803_0006/     14/01/03 17:12:08 INFO mapreduce.Job:正在运行的职位:job_1388768204803_0006     14/01/03 17:12:36 INFO mapreduce.Job:作业job_1388768204803_0006在超级模式下运行:false     14/01/03 17:12:36 INFO mapreduce.Job:地图0%减少0%     14/01/03 17:12:58 INFO mapreduce.Job:任务ID:attempt_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)             at java.security.AccessController.doPrivileged(Native Method)             在javax.security.auth.Subject.doAs(Subject.java:396)             at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491)             在org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:157)

请帮助

1 个答案:

答案 0 :(得分: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]的值,以查看是否有值。这将帮助您调试问题。