2016-09-18 4 views
1

Просьба уточнитьMapReduce Индивидуальная обработка нескольких входных файлов

У меня есть набор входных файлов (скажем, 10) с определенными именами. Я запускаю задачу подсчета слов во всех файлах одновременно (путь ввода - это папка). Я ожидаю 10 выходных файлов с теми же именами, что и входные файлы. То есть Вход File1 должен быть подсчитан и должен храниться в отдельном выходном файле с именем «file1». И так далее ко всем файлам.

+1

Просьба уточнить ... –

+0

У вас есть Infile1, Infile2, ..., входные файлы Infile10 и Outfile1, Outfile2, ..., Outfile10, как выходных файлов. Точно как этот шаблон? – abhiieor

+0

Точное требование - файлы в случайном формате имени - Y_XVHD_AWIFS_xxxx_20160821_124309, N_XVHG_AWIQS_xxxx_20160821_124339 На основе содержимого файла я добавлю еще одну строку к существующим именам файлов. Либо я хочу, чтобы файлы были такими же, как имя входного файла, или я могу изменить имя файла на основе содержимого. Если я его изменю, я добавлю константу в существующее имя файла. –

ответ

0

Есть 2 подхода, которые можно предпринять для достижения нескольких выходов

    класс
  1. Использование MultipleOutputs - передать этот документ для получения информации о multipleclassoutput (https://hadoop.apache.org/docs/r2.6.3/api/org/apache/hadoop/mapreduce/lib/output/MultipleOutputs.html), для получения дополнительной информации о том, как реализовать см это http://appsintheopen.com/posts/44-map-reduce-multiple-outputs

  2. Другой вариант - использование LazyOuputFormat, однако это используется в сочетании с несколькими выходами, для получения дополнительной информации о его реализации см. Это (https://ssmolen.wordpress.com/2014/07/09/hadoop-mapreduce-write-output-to-multiple-directories-depending-on-the-reduce-key/).

Я чувствую, что использование LazyOutputFormat в сочетании с классом MultipleOuputs - лучший подход.

0
  1. Задайте количество задач уменьшения, равное количеству входных файлов. Это также создаст заданное количество выходных файлов.

  2. Добавить префикс файла для каждой клавиши вывода карты (слово). Например, когда вы встречаете слово «cat» в файле с именем «file0.txt», вы можете испускать ключ «0_cat» или «file0_cat» или что-то еще, что уникально для «file0.txt». Используйте контекст, чтобы получать каждый раз имя файла.

  3. Переопределите разделитель по умолчанию, чтобы все ключи вывода карты с префиксом «0_» или «file0_» переходили в первый раздел, все ключи с префиксом «1_» или «файл1_» будут перейдите ко второму и т. д.

  4. В редукторе удалите префикс «x_» или «filex_» из выходного ключа и используйте его как имя выходного файла (используя MultipleOutputs). В противном случае, если вы не хотите MultipleOutputs, вы можете легко выполнить сопоставление между выходными файлами и входными файлами, проверив код Partitioner. (Например, часть-00000 будет Перегородка 0 в выходной)

Смежные вопросы