如何读取hadoopMap中间文件file.out

vlf7wbxs  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(511)

我已设置属性 keep.task.files.pattern".*" 在mapred-site.xml中
重新启动集群并执行我的test mapreduce程序。
我在文件夹中看到两个file.out和file.out.index /opt/hadoopws/tmp/mapred/local/taskTracker/hduser/jobcache/job_201403260903_0001/attempt_201403260903_0001_m_000000_0/output/ 当我尝试用下面的代码读取file.out时 "not a SequenceFile error" 信息。当我尝试打开file.out时,它会提示这是一个二进制文件。我正在运行hadoop1.2.1。默认Map输出格式是什么?

FileSystem fs = FileSystem.get(conf);
Path path = new Path("/opt/hadoopws/tmp/mapred/local/taskTracker/hduser/jobcache
             /job_201403260903_0001/attempt_201403260903_0001_m_000000_0/output
             /file.out");
SequenceFile.Reader reader = new SequenceFile.Reader(fs, path, conf);
IntWritable key = new IntWritable();
IntWritable value = new IntWritable();
while (reader.next(key, value)) {
        System.out.println(key.get() + " | " + value.get());
    }
reader.close();

错误消息:

Exception in thread "main" java.io.IOException: /opt/hadoopws/tmp/mapred/local/taskTracker/hduser/jobcache/job_201403260903_0001/attempt_201403260903_0001_m_000000_0/output/file.out not a SequenceFile
at org.apache.hadoop.io.SequenceFile$Reader.init(SequenceFile.java:1517)
at org.apache.hadoop.io.SequenceFile$Reader.<init>(SequenceFile.java:1490)
at org.apache.hadoop.io.SequenceFile$Reader.<init>(SequenceFile.java:1479)
at org.apache.hadoop.io.SequenceFile$Reader.<init>(SequenceFile.java:1474)
at HDPConfigRun.run(HDPConfigRun.java:31)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:79)
at HDPConfigRun.main(HDPConfigRun.java:45)
yrdbyhpb

yrdbyhpb1#

该文件类似于顺序文件,因为它包含以序列化形式持久化的键值对,但它的设计是为了快速扫描以进行排序和分区,并且只有内部格式。
如果您真的需要查看Map程序生成的键值对集,那么请查看配置reducer以使用multipleoutputs类—一个输出将包含reducer读入的每个键值对,另一个输出将包含reducer的“实”输出。

相关问题