Вывод Hadoop PIG не разделяется на несколько файлов с помощью оператора PARALLEL - PullRequest
1 голос
/ 04 апреля 2011

Похоже, я что-то упустил.Количество редукторов в моих данных создает такое количество файлов в HDFS, но мои данные не разбиваются на несколько файлов.Что я заметил, так это то, что если я выполняю group by для ключа, который находится в последовательном порядке, он работает нормально, например, данные ниже красиво разбиваются на два файла на основе ключа:

1    hello
2    bla     
1    hi
2    works
2    end

Но эти данныене разделяется:

1    hello
3    bla     
1    hi
3    works
3    end

Код, который я использовал и который отлично работает для одного, а не для другого -

InputData = LOAD 'above_data.txt';
GroupReq =  GROUP InputData BY $0 PARALLEL 2;
FinalOutput =   FOREACH GroupReq GENERATE flatten(InputData);
STORE FinalOutput INTO 'output/GroupReq' USING PigStorage ();

Приведенный выше код создает два файла выходных деталей, но сначалавведите его, чтобы разделить данные и вставьте ключ 1 в part-r-00000 и ключ 2 в part-r-00001.Но для второго ввода он создает два файла детали, но все данные заканчиваются на part-r-00000.Что мне не хватает, что я могу сделать, чтобы заставить данные разбиваться на несколько выходных файлов на основе уникальных ключей?

Примечание: для второго ввода, если я использую PARALLEL 3 (3 редуктора)), он создает три файла деталей и добавляет все данные для ключа 1 в part-0 и все данные для ключа 3 в part-3 файле.Я нашел это поведение странным.Кстати я использую Cloudera CDH3B4.

1 Ответ

1 голос
/ 05 апреля 2011

Это потому, что номер редуктора, на который идет ключ, определяется как hash(key) % reducersCount.Если ключ является целым числом, hash(key) == key.Когда у вас будет больше данных, они будут распределены более или менее равномерно, поэтому вам не стоит об этом беспокоиться.

...