【问题标题】:Hadoop - How to extract a taskId from mapred.JobConf?Hadoop - 如何从 mapred.JobConf 中提取 taskId?
【发布时间】:2015-02-11 23:25:02
【问题描述】:

是否可以从*mapred*.JobConf 创建一个有效的*mapreduce*.TaskAttemptID

背景

我需要为ExistingFileInputFormat 写一个FileInputFormatAdapter。问题是Adapter需要扩展mapred.InputFormat而Existing格式扩展mapreduce.InputFormat

我需要构建一个mapreduce.TaskAttemptContextImpl,以便我可以实例化ExistingRecordReader。但是,我无法创建有效的 TaskId...taskId 显示为 null。

那么我如何从mapred.JobConf 获取taskId、jobId 等。

特别是在适配器的getRecordReader 中,我需要执行以下操作:

public org.apache.hadoop.mapred.RecordReader<NullWritable, MyWritable> getRecordReader(
        org.apache.hadoop.mapred.InputSplit split, JobConf job, Reporter reporter) throws IOException {

    SplitAdapter splitAdapter = (SplitAdapter) split;

    final Configuration conf = job;

    /*************************************************/
    //The problem is here, "mapred.task.id" is not in the conf
    /*************************************************/
    final TaskAttemptID taskId = TaskAttemptID.forName(conf.get("mapred.task.id"));

    final TaskAttemptContext context = new TaskAttemptContextImpl(conf, taskId);
    try {
        return new RecordReaderAdapter(new ExistingRecordReader(
                splitAdapter.getMapRedeuceSplit(),
                context));
    } catch (InterruptedException e) {
        throw new RuntimeException("Failed to create record-reader.", e);
    }
}

这段代码抛出异常:

Caused by: java.lang.NullPointerException
    at org.apache.hadoop.mapreduce.task.TaskAttemptContextImpl.<init>(TaskAttemptContextImpl.java:44)
    at org.apache.hadoop.mapreduce.task.TaskAttemptContextImpl.<init>(TaskAttemptContextImpl.java:39)

'super(conf, taskId.getJobID());'正在抛出异常,很可能是因为 taskId 为空。

【问题讨论】:

    标签: java hadoop mapreduce hive


    【解决方案1】:

    我通过查看HiveHbaseTableInputFormat 找到了答案。由于我的解决方案是针对 hive 的,所以效果很好。

     TaskAttemptContext tac = ShimLoader.getHadoopShims().newTaskAttemptContext(
            job.getConfiguration(), reporter);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-09
      • 2020-12-16
      • 2021-04-29
      • 1970-01-01
      • 2016-02-06
      相关资源
      最近更新 更多