Можно ли получить доступ к базовому 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
) строительство.