hadoop映射程序中的空指针异常

hadoop映射程序中的空指针异常,hadoop,nullpointerexception,mapreduce,Hadoop,Nullpointerexception,Mapreduce,我编写了一个简单的代码,通过使用Hadoop Map reduce程序读取文本文件并显示与输出相同的文本,这里我不使用reducer仅使用mapper来显示输入文本文件 我把地图绘制器当作 Mapper<LongWritable, Text, NullWritable, Text> Mapper 但我只想要输出值,我不想看到键值 我在Mapper中编写了一段代码,但它显示了NUllPointerException package com.demo.mr; import java

我编写了一个简单的代码,通过使用Hadoop Map reduce程序读取文本文件并显示与输出相同的文本,这里我不使用reducer仅使用mapper来显示输入文本文件

我把地图绘制器当作

Mapper<LongWritable, Text, NullWritable, Text>
Mapper
但我只想要输出值,我不想看到键值

我在Mapper中编写了一段代码,但它显示了NUllPointerException

package com.demo.mr;

import java.io.IOException;

import org.apache.commons.io.output.NullWriter;
import org.apache.commons.lang.ObjectUtils.Null;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

public class DemoMR {
    public static class MapperDemo extends
            Mapper<LongWritable, Text, NullWritable, Text> {
        //public NullWritable result = new NullWritable();
        @Override
        protected void map(LongWritable key, Text value,
                org.apache.hadoop.mapreduce.Mapper.Context context)
                throws IOException, InterruptedException {
            context.write(Null,value);

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

    Configuration conf = new Configuration();
    Job job = new Job(conf, "Demo MR");
    job.setJarByClass(DemoMR.class);
    job.setMapperClass(MapperDemo.class);
    job.setOutputKeyClass(LongWritable.class);
    job.setOutputValueClass(Text.class);
    FileInputFormat.addInputPath(job, new Path("/home/node1/WordCountInput.txt"));
    FileOutputFormat.setOutputPath(job, new Path("/home/node1/output"));
    System.exit(job.waitForCompletion(true) ? 0 : 1);
}




}
package com.demo.mr;
导入java.io.IOException;
导入org.apache.commons.io.output.NullWriter;
导入org.apache.commons.lang.ObjectUtils.Null;
导入org.apache.hadoop.conf.Configuration;
导入org.apache.hadoop.fs.Path;
导入org.apache.hadoop.io.LongWritable;
导入org.apache.hadoop.io.NullWritable;
导入org.apache.hadoop.io.Text;
导入org.apache.hadoop.mapreduce.Job;
导入org.apache.hadoop.mapreduce.Mapper;
导入org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
导入org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
公开课演示{
公共静态类MapperDemo扩展
制图员{
//public nullwriteable result=新的nullwriteable();
@凌驾
受保护的无效映射(可长写键、文本值、,
org.apache.hadoop.mapreduce.Mapper.Context)
抛出IOException、InterruptedException{
write(Null,value);
}
}
公共静态void main(字符串args[])引发异常{
Configuration conf=新配置();
作业作业=新作业(配置,“演示MR”);
job.setJarByClass(DemoMR.class);
setMapperClass(MapperDemo.class);
job.setOutputKeyClass(LongWritable.class);
job.setOutputValueClass(Text.class);
addInputPath(作业,新路径(“/home/node1/WordCountInput.txt”);
setOutputPath(作业,新路径(“/home/node1/output”);
系统退出(作业等待完成(真)?0:1;
}
}

您应该对地图输出进行如下编码

context.write(NullWritable, value)
若映射输出只有键,则可以在值字段中使用NullWritable


在Hadoop中,应该将所有数据类型都用作可写数据。将数据从网络序列化/反序列化到网络将很容易。

当我在键位置使用NullWritable时,它显示错误NullWritable无法解析为变量。请尝试NullWritable.get()。