我正在运行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)
请帮助
答案 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]的值,以查看是否有值。这将帮助您调试问题。