Hadoop: Как узнать параметр__d в шаге сокращения, используя объект Context - PullRequest
3 голосов
/ 17 ноября 2010

В Hadoop API ver.0.20 и выше, вместо этого был введен объект Context. JobConf.

Мне нужно выяснить, используя объект Context:

  1. идентификатор_раздела для текущего Reducer

  2. выходная папка

Используя устаревший JobConf, я могу найти partition_id для текущего Reducer следующим образом:

public void configure(JobConf conf){
  int  current_partition = conf.getInt("mapred.task.partition",-1);
}

Я думаю, что используя объект Context Iнужно сделать это внутри метода

public void setup(Context c)

а как?А как насчет имени выходной папки?

Ответы [ 2 ]

1 голос
/ 26 октября 2012

Если вы хотите получить раздел, вы можете использовать context.getTaskAttemptID (). GetTaskID (). GetId (). Идентификатор задачи создается идентификатором раздела. Я перечисляю соответствующие коды здесь, вы можете проверить коды ReduceTaskImpl , TaskImpl и MRBuilderUtils самостоятельно.


public TaskImpl(JobId jobId, TaskType taskType, int partition,
    EventHandler eventHandler, Path remoteJobConfFile, JobConf conf,
    TaskAttemptListener taskAttemptListener, OutputCommitter committer,
    Token jobToken,
    Credentials credentials, Clock clock,
    Map completedTasksFromPreviousRun, int startCount,
    MRAppMetrics metrics, AppContext appContext) {
  this.conf = conf;
  this.clock = clock;
  this.jobFile = remoteJobConfFile;
  ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
  readLock = readWriteLock.readLock();
  writeLock = readWriteLock.writeLock();
  this.attempts = Collections.emptyMap();
  maxAttempts = getMaxAttempts();
  taskId = MRBuilderUtils.newTaskId(jobId, partition, taskType);
  this.partition = partition;
  ...
}

public static TaskId newTaskId(JobId jobId, int id, TaskType taskType) {
  TaskId taskId = Records.newRecord(TaskId.class);
  taskId.setJobId(jobId);
  taskId.setId(id);
  taskId.setTaskType(taskType);
  return taskId;
}
1 голос
/ 23 ноября 2010

Вы можете попытаться просто выполнить класс Partitioner над первым ключом входящих данных, и у вас получится ряд текущих редукторов.

«Выходная папка» не является свойством редуктора.Строго говоря, это свойство OutputFormat, и никто кроме него не знает, является ли он вообще «выходной папкой» - например, это может быть вывод в RDBMS, в какую-то таблицу SQL.Для простых выводов на основе HDFS это свойство всего задания сокращения карты, поэтому обычно оно доступно из JobContext, т. Е.

c.getConfiguration().get("mapred.output.dir")

, скорее всего, даст вам URL вашего выходного каталога.

...