Использование MultipleTextOutputFormat для управления выходным именем файла в MapReduce - PullRequest
0 голосов
/ 05 августа 2011

Hadoop (и Java) неофит здесь.Мне нужна была помощь с использованием MultipleTextOutputFormat для управления выходным именем файла в MapReduce.

В настоящее время я использую его таким образом .И, кажется, работает нормально.Однако я пытаюсь изменить использование полей, выбранных для определения имени файла.

Вместо жесткого кодирования их в field[0] или field[3] (как в примере), яхотел бы поднять это (каким-то динамичным образом), скажем, JobConf как field[jobConf.get("id.offset")] или field[jobConf[get("date.offset")].Кто-нибудь здесь знает, как я мог бы сделать это (или что-то в этом роде, то есть оно не должно быть JobConf само по себе)?

Любые указатели / предложения / советы и др.будет наиболее ценится.Спасибо.

Ответы [ 2 ]

2 голосов
/ 10 августа 2011

Это зависит от того, отличаются ли ваши пользовательские параметры в зависимости от задания или от пары ключ / значение.

Вы можете получить объект JobConf, если переопределите метод getRecordWriter ().Это метод, который вызывает generateFileNameForKeyValue () (ознакомьтесь с реализацией в классе MultipleOutputFormat в источнике Hadoop).Вы можете просто вызвать super и затем делать все, что вы хотите с параметром, который вы передаете в объект JobConf.

Если ваши параметры отличаются для разных пар ключ / значение, вы можете отправить параметр как часть ключа илизначение.А затем переопределите getActualKey () или getActualValue () в вашем классе MultipleTextOutputFormat, чтобы получить фактический объект ключа или значения, который вы хотите.

Надеюсь, это поможет.

0 голосов
/ 08 августа 2011

Вы можете добавить настройки к объекту conf.

Configuration conf = new Configuration();
conf.set("id.offset", 0);
conf.set("date.offset", 3);
...   
JobConf jobConf = new JobConf(conf, MyJob.class);

В вашей функции fileName вы можете использовать ее по своему усмотрению;field[jobConf.get("id.offset")] и field[jobConf[get("date.offset")].

Одна небольшая заметка: я не использовал JobConf, поэтому я не знаю, как вытащить настройки.Я использую Job, а функция map имеет объект context, который я использую как context.getConfiguration(), чтобы получить объект Configuration, conf и получить данные как int idOffset = conf.get("id.offset");.

НТН

...