Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
org.apache.hadoop.mapreduce.lib.input.SequenceFileRecordReader.close上的java.lang.NullPointerException_Hadoop_Mapreduce_Hadoop Streaming - Fatal编程技术网

org.apache.hadoop.mapreduce.lib.input.SequenceFileRecordReader.close上的java.lang.NullPointerException

org.apache.hadoop.mapreduce.lib.input.SequenceFileRecordReader.close上的java.lang.NullPointerException,hadoop,mapreduce,hadoop-streaming,Hadoop,Mapreduce,Hadoop Streaming,我正在运行两个map-reduce对。第一个map reduce的输出被用作下一个map reduce的输入。为了做到这一点,我给出了job.setOutputFormatClass(SequenceFileOutputFormat.class)。运行以下驱动程序类时: package组织; 导入org.apache.commons.configuration.ConfigurationFactory; 导入org.apache.hadoop.conf.Configured; 导入org.ap

我正在运行两个map-reduce对。第一个map reduce的输出被用作下一个map reduce的输入。为了做到这一点,我给出了job.setOutputFormatClass(SequenceFileOutputFormat.class)。运行以下驱动程序类时:

package组织;
导入org.apache.commons.configuration.ConfigurationFactory;
导入org.apache.hadoop.conf.Configured;
导入org.apache.hadoop.fs.Path;
导入org.apache.hadoop.io.Text;
导入org.apache.hadoop.mapreduce.Job;
导入org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
导入org.apache.hadoop.mapreduce.lib.input.SequenceFileInputFormat;
导入org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
导入org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
导入org.apache.hadoop.mapreduce.lib.output.SequenceFileOutputFormat;
导入org.apache.hadoop.util.Tool;
导入org.apache.hadoop.util.ToolRunner;
导入org.apache.mahout.math.VarLongWritable;
导入org.apache.mahout.math.VectorWritable;
公共类Driver1扩展配置的实现工具
{
公共int运行(字符串[]args)引发异常
{
如果(参数长度!=3){
System.err.println(“用法:MaxTemperatureDriver”);
系统退出(-1);
}
//ConfFactory工作流=新建ConfFactory(新路径(“/input.txt”)、新路径(“/output.txt”)、TextInputFormat.class、VarLongWritable.class、Text.class、VarLongWritable.class、VectorWritable.class、SequenceFileOutputFormat.class);
作业=新作业();
Job job1=新作业();
job.setJarByClass(Driver1.class);
job.setJobName(“最高温度”);
addInputPath(作业,新路径(args[0]);
setOutputPath(作业,新路径(args[1]);
setMapperClass(UserVectorMapper.class);
setReducerClass(uservectoreducer.class);
setOutputKeyClass(VarLongWritable.class);
job.setOutputValueClass(VectorWritable.class);
setOutputFormatClass(SequenceFileOutputFormat.class);
job1.setJarByClass(Driver1.class);
//job.setJobName(“最高温度”);
job1.setInputFormatClass(SequenceFileInputFormat.class);
addInputPath(job1,新路径(“output/part-r-00000”);
setOutputPath(作业1,新路径(args[2]);
job1.setMapperClass(ItemToItemPrefMapper.class);
//job1.setReducerClass(uservectoreducer.class);
job1.setOutputKeyClass(VectorWritable.class);
job1.setOutputValueClass(VectorWritable.class);
job1.setOutputFormatClass(SequenceFileOutputFormat.class);
系统退出(job.waitForCompletion(true)和job1.waitForCompletion(true)-0:1);
布尔值success=job.waitForCompletion(true);
返回成功?0:1;
}
公共静态void main(字符串[]args)引发异常{
Driver1 driver=新的Driver1();
int exitCode=ToolRunner.run(驱动程序,参数);
系统退出(退出代码);
}

}
这主要是因为Hadoop在序列化数据时感到困惑

确保

  • 您应该将输入和输出文件格式类设置为两个减缩器
  • 检查第二类的Inputformat是否为第一类的OutputFormat
  • 中间文件格式可能与reducer期望读取的文件格式不同
  • 在整个程序中保持一致的文件格式

  • 这可能是您的输入文件有问题。您是否尝试仅使用输入文件的前几行运行?是否解决了此问题?我也有同样的问题。在您的例子中,我看到另一个MR输出作为输入路径。您的代码是否包含成功文件?