在运行Hadoop的MapReduce程序时出现org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
解决方法:找到自己Hadoop文件夹的家目录,打开bin文件夹,复制hadoop.dll文件到C:\Windows\System32下,重新编译运行代码,好运。
public class WordCountDriver {
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
//1. 获取Job
Configuration conf = new Configuration();
Job job = Job.getInstance(conf);
//2.设置jar路径 把DriverCountDriver文件传入
job.setJarByClass(WordCountDriver.class);
//3.关联mapper和reducer
job.setMapperClass(WordCountMapper.class);
job.setReducerClass(WordCountReducer.class);
//4.设置map输出的KV类型
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class);
//5.设置reduce阶段最终的输出kv类型
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
//6.设置输入路径和输出路径
//输入路径
FileInputFormat.setInputPaths(job, new Path("D:\\input"));
//输出路径
FileOutputFormat.setOutputPath(job, new Path("D:\\input\\output"));
//7.提交Job
boolean result = job.waitForCompletion(true);
System.exit(result ? 0 : 1);
}
}
运行上面的程序时,报错:
解决方法:将%HADOOP_HOME%的bin目录下的hadoop.dll文件复制到C:\Windows\System32文件夹下:
再次编译运行main方法的代码,发现结果正确,结果输出到了指定的文件夹下: