2015-11-08 3 views
1

join2_mapper.pyPython MapReduce: Пустой файл из картографа

#!/usr/bin/env python 
import sys 
shows = [] 
for line in sys.stdin: 
    line  = line.strip() 
    key_value = line.split(',') 

    if key_value[1] == 'ABC': 
     if key_value[1] not in shows: 
      shows.append(key_value[0]) 

    if key_value[1].isdigit() and (key_value[0] in shows): 
     print('{0}\t{1}'.format(key_value[0], key_value[1])) 

образец я/р

Hourly_Sports,DEF 
Baked_Games,ABC 
Dumb_Talking,ABC 
Surreal_Talking,DEF 
Cold_Sports,BAT 
Hourly_Talking,XYZ 
Baked_Talking,CNO 
PostModern_Games,ABC 
Loud_Talking,DEF 
Almost_News,BAT 
Hot_Talking,XYZ 
Dumb_News,CNO 
Surreal_News,ABC 
Cold_Talking,DEF 
Hourly_Show,BAT 
Baked_Show,XYZ 
PostModern_Talking,CNO 
Loud_Show,ABC 
Almost_Cooking,DEF 
Hot_News,BAT 
Dumb_Cooking,XYZ 
Surreal_Cooking,CNO 
Cold_News,ABC 
Hourly_Sports,DEF 
Baked_Sports,BAT 
PostModern_Show,XYZ 
Loud_Sports,CNO 
Almost_Games,ABC 
Hot_Cooking,DEF 
Dumb_Games,BAT 
Surreal_Games,XYZ 
Cold_Cooking,CNO 
Hourly_Talking,ABC 
Baked_Talking,DEF 
PostModern_Sports,BAT 
Loud_Talking,XYZ 
Almost_Talking,CNO 
Hot_Games,ABC 
Dumb_Talking,DEF 
Surreal_Talking,BAT 
Cold_Games,XYZ 
Hourly_News,CNO 
Baked_News,ABC 
PostModern_Talking,DEF 
Loud_News,BAT 
Almost_Show,XYZ 
Hot_Talking,CNO 
Dumb_Show,ABC 
Surreal_Show,DEF 
Cold_Talking,BAT 
Hourly_Cooking,XYZ 
Baked_Cooking,CNO 
PostModern_News,ABC 
Loud_Cooking,DEF 
Almost_Sports,BAT 
Hot_Show,XYZ 
Dumb_Sports,CNO 
Surreal_Sports,ABC 
Cold_Show,DEF 
Hourly_Games,BAT 
Baked_Games,XYZ 
PostModern_Cooking,CNO 
Loud_Games,ABC 
Almost_Talking,DEF 
Hot_Sports,BAT 
Dumb_Talking,XYZ 
Surreal_Talking,CNO 
Cold_Sports,ABC 
Hourly_Talking,DEF 
Baked_Talking,BAT 
PostModern_Games,XYZ 
Loud_Talking,CNO 
Almost_News,ABC 
Hot_Talking,DEF 
Dumb_News,BAT 
Surreal_News,XYZ 
Cold_Talking,CNO 
Hourly_Show,ABC 
Almost_Cooking,855 
Baked_Games,991 
Baked_News,579 
Baked_Games,200 
Baked_Games,533 
Cold_News,590 
Hourly_Show,896 

$ cat j2.txt | python join2_mapper.py

Baked_Games 991 
Baked_News 579 
Baked_Games 200 
Baked_Games 533 
Cold_News 590 
Hourly_Show 896 

hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streaming.jar -input /user/cloudera/join2_data/join2_genchan*.txt -input /user/cloudera/join2_data/join2_gennum*.txt -output /user/cloudera/join2_f1f -mapper /home/cloudera/join2_mapper.py -reducer /home/cloudera/join2_reducer.py -numReduceTasks 0

Map-Reduce Framework 
     Map input records=6600 
     Map output records=0 
     Input split bytes=759 
     Spilled Records=0 
     Failed Shuffles=0 
     Merged Map outputs=0 
     GC time elapsed (ms)=4419 
     CPU time spent (ms)=9170 
     Physical memory (bytes) snapshot=702300160 
     Virtual memory (bytes) snapshot=9022578688 
     Total committed heap usage (bytes)=364511232 
    File Input Format Counters 
     Bytes Read=113055 
    File Output Format Counters 
     Bytes Written=0 

Проблема с входными файлами. Я фактически шесть входных файлов следующим образом:

$ hdfs dfs -ls /user/cloudera/join2_data/join2_gen*.txt 
-rw-r--r-- 1 cloudera cloudera  1714 2015-11-07 12:24 /user/cloudera/join2_data/join2_genchanA.txt 
-rw-r--r-- 1 cloudera cloudera  3430 2015-11-07 12:24 /user/cloudera/join2_data/join2_genchanB.txt 
-rw-r--r-- 1 cloudera cloudera  5152 2015-11-07 12:24 /user/cloudera/join2_data/join2_genchanC.txt 
-rw-r--r-- 1 cloudera cloudera  17114 2015-11-07 12:24 /user/cloudera/join2_data/join2_gennumA.txt 
-rw-r--r-- 1 cloudera cloudera  34245 2015-11-07 12:24 /user/cloudera/join2_data/join2_gennumB.txt 
-rw-r--r-- 1 cloudera cloudera  51400 2015-11-07 12:24 /user/cloudera/join2_data/join2_gennumC.txt 

Когда я сцепить все файлы в один файл и запустить работу он работает. Получение желаемого результата. Когда предоставленные входные файлы в шести кусках, я получаю пустой файл. Пожалуйста, порекомендуйте.

+0

Пожалуйста, я могу видеть ваш редуктор? Вы ссылаетесь на один в команде выполнения, но код для него отсутствует. Также ваши две команды ввода могут быть заменены на '-input/user/cloudera/join2_data/join2_gen * .txt'. –

+0

Поскольку я указал numReduceTasks = 0, редуктор не будет выполнен правильно? Пожалуйста, поправьте меня, если я ошибаюсь. Так как файл пуст из картографа, редуктор выдает ошибку. Я проверил редуктор с другим картографом, он работает хорошо. Я не думаю, что проблема с редуктором. При необходимости я могу отправить редуктор. – Praveen

+0

Я не знаю много о Hadoop Streaming с Python, но я бы попробовал не указывать опцию '-reducer'? Конечно, это ничего не должно менять, но стоит попробовать. Также, что произойдет, если вы передадите 'j2.txt' в задание? это, по-видимому, другой файл для входов, которые вы фактически использовали. –

ответ

0

Предоставить только один аргумент -input и передать ему путь к папке, содержащей все ваши входные данные, а не использовать регулярное выражение. Также удалите редуктор, если вы его не используете (просто для удаления). Я не могу точно сказать, какая из этих проблем решит проблему (я подозреваю, что это первый), но это исправит. Итак:

hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streaming.jar \ 
-input /user/cloudera/join2_data/ \ 
-output /user/cloudera/join2_f1f \ 
-mapper /home/cloudera/join2_mapper.py 
+0

Исправлено '$ hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streaming.jar -input/user/cloudera/join2_data/-output/user/cloudera/join2_txt3 -mapper/home/cloudera/join2_mapper.py' Still тоже самое. 'Файл Формат ввода Счетчики \t \t прочитанных байт = 113055 \t выходного файла формата Счетчики \t \t Bytes Написано = 0' – Praveen

0

Не значит иметь key_value[0] вместо 1, в if key_value[1] not in shows?

+0

Первая половина файла имеет шоу и каналы, а вторая половина содержит шоу и рассчитывает. Я создаю список шоу, который размещен в ABC, а затем отправляет только шоу ABC и его счеты для редуктора. В ореховой раковине я пытаюсь найти подсчеты каждого шоу, которое размещено только в ABC. Итак, логика в порядке. – Praveen

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