Можно ли получить доступ к базовому org.apache.hadoop.mapreduce.Job из задания Scalding?

В моей работе Scalding у меня есть такой код:

import org.apache.hadoop.mapreduce.lib.input.FileInputFormat

class MyJob(args: Args) extends Job(args) {
  FileInputFormat.setInputPathFilter(???, classOf[MyFilter])
  // ... rest of job ...
}

class MyFilter extends PathFilter {
  def accept(path:Path): Boolean = true
}

Моя проблема в том, что первый аргумент FileInputFormat.setInputPathFilter метод должен быть типа org.apache.hadoop.mapreduce.Job, Как я могу получить доступ к объекту задания Hadoop в моей работе Scalding?

1 ответ

отказ

Нет возможности извлечь Job учебный класс. Но вы можете (но никогда не должны делать) извлекать JobConf, После этого вы сможете использовать FileInputFormat.setInputPathFilter из API mapreduce.v1 (org.apache.hadoop.mapred.JobConf), что позволит архивировать фильтрацию.

Но я предлагаю вам не делать этого. Прочитайте конец ответа,

Как ты можешь это сделать?

Override stepStrategy метод scalding.Job реализовать FlowStepStrategy, Например, эта реализация позволяет изменить имя задания mapreduce

override def stepStrategy: Option[FlowStepStrategy[_]] = Some(new FlowStepStrategy[AnyRef]{
  override def apply(flow: Flow[AnyRef], predecessorSteps: util.List[FlowStep[AnyRef]], step: FlowStep[AnyRef]): Unit =
    step.getConfig match {
      case conf: JobConf =>
        # here you can modify the JobConf of each job.
        conf.setJobName(...)
      case _ =>
    }
})

Почему бы не сделать это?

Доступ к JobConf для добавления фильтрации путей будет работать только в том случае, если вы используете определенные источники, и будет прерываться, если вы используете некоторые другие. Также вы будете смешивать разные уровни абстракции. И я не начинаю с того, как, по вашему мнению, вы должны знать, какой JobConf вам действительно нужно изменить (большинство ошпаривающихся заданий, которые я видел, являются многошаговыми)

Как решить эту проблему?

Я предлагаю вам присмотреться к типу Source ты используешь. Я почти уверен, что есть функция для применения фильтрации пути во время или до Pipe (или же TypedPipe) строительство.

Другие вопросы по тегам