hadoop - AvroMultipleOutputs 创建空文件,日志中没有错误

标签 hadoop mapreduce avro

尝试将输出写入两个不同的命名输出文件 AvroMultipleOutputs 但得到一个空文件并且日志中没有错误。计数器显示正确的记录数。还有这个 写入单个文件时工作正常。

Avro 版本 1.7.1

代码

Job job = new Job(config, "AVRO_MULTITEST");
job.setJarByClass(AvroMultiWriter.class);

FileInputFormat.setInputPaths(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));

job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(AvroKeyValueOutputFormat.class);
job.setMapperClass(AvroMultiWriteMapper.class);
job.setNumReduceTasks(0);


AvroJob.setOutputKeySchema(job, Schema.create(Schema.Type.STRING));
AvroJob.setOutputValueSchema(job, Schema.create(Schema.Type.STRING));
AvroJob.setMapOutputKeySchema(job, Schema.create(Schema.Type.STRING));
AvroJob.setMapOutputValueSchema(job, Schema.create(Schema.Type.STRING));

AvroMultipleOutputs.setCountersEnabled(job, true);
AvroMultipleOutputs.addNamedOutput(job,"F1",
        AvroKeyValueOutputFormat.class, Schema.create
(Schema.Type.STRING),Schema.create(Schema.Type.STRING));

AvroMultipleOutputs.addNamedOutput(job,"F2",
        AvroKeyValueOutputFormat.class, Schema.create
(Schema.Type.STRING),Schema.create(Schema.Type.STRING));

LazyOutputFormat.setOutputFormatClass(job, AvroKeyValueOutputFormat.class);

工作计数器

mapred.JobClient:   org.apache.avro.mapreduce.AvroMultipleOutputs
mapred.JobClient:     F1=3
mapred.JobClient:     F2=3

最佳答案

您是否尝试过在映射器类的 close() 方法中调用 multipleOutputs.close()

关于hadoop - AvroMultipleOutputs 创建空文件,日志中没有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29957402/

相关文章:

java - 使用 `' hadoop classpath的-cp选项执行时,无法加载类

hadoop - 如何根据输入大小设置 reducer 数量

hadoop - 获取配置单元脚本的 _SUCCESS 文件

python - 使用 Bottledwater-pg,Python 消费者如何读取数据?

hadoop - Oozie 和 Job History Server 配置问题

java - MapReduce HBase 空指针异常

Hadoop MapReduce - Pig/Cassandra - 无法创建输入拆分

python - 使用Python通过MapReduce在Hadoop中解析HTML .txt文件

java - 如何让 Avro 架构验证支持字段别名?

python - 使用 python avro 库时读写模式