我有一个任务,它将avro输出写入由输入记录的几个字段组织的多个目录中。推测性执行Hadoop多个输出
For example : Process records of countries across years and write in a directory structure of country/year eg: outputs/usa/2015/outputs_usa_2015.avro outputs/uk/2014/outputs_uk_2014.avro
AvroMultipleOutputs multipleOutputs=new AvroMultipleOutputs(context);
....
....
multipleOutputs.write("output", avroKey, NullWritable.get(),
OUTPUT_DIR + "/" + record.getCountry() + "/" + record.getYear() + "/outputs_" +record.getCountry()+"_"+ record.getYear());
哪些输出commiter将下面的代码使用写output.Is它并不安全与推测执行使用吗? 随着推测执行这引起(可能)org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException
在这个后 Hadoop Reducer: How can I output to multiple directories using speculative execution? 建议使用自定义输出的提交
在下面的代码从Hadoop的AvroMultipleOutputs没有说明投机性执行
private synchronized RecordWriter getRecordWriter(TaskAttemptContext taskContext,
String baseFileName) throws IOException, InterruptedException {
writer =
((OutputFormat) ReflectionUtils.newInstance(taskContext.getOutputFormatClass(),
taskContext.getConfiguration())).getRecordWriter(taskContext);
...
}
任何问题,无论是否写入方法的文档的任何问题,如果baseoutput路径是工作目录外
public void write(String namedOutput, Object key, Object value, String baseOutputPath)
当在作业目录外写入时,AvroMultipleOutputs(其他输出)是否存在与推测执行相关的实际问题? 如果,那我怎么超越AvroMultipleOutputs有它自己的输出committer.I看不到里面AvroMultipleOutputs,其输出的提交它采用
您是否编写了自己的实现?我有同样的问题 – tesnik03
W如果你说“通过推测执行,这可能导致(可能会导致)org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException”,你是否看到过这种记录在任何地方,或者你是否从经验中发言。我们看到了相同的行为,但在使用多个输出时未发现任何禁用推测执行的显式引用。 – ioss
是的,它被记录。这里有个警告http://archive.cloudera.com/cdh5/cdh/5/hadoop/api/org/apache/hadoop/mapreduce/lib/output/MultipleOutputs.html – bl3e