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
Когда я сцепить все файлы в один файл и запустить работу он работает. Получение желаемого результата. Когда предоставленные входные файлы в шести кусках, я получаю пустой файл. Пожалуйста, порекомендуйте.
Пожалуйста, я могу видеть ваш редуктор? Вы ссылаетесь на один в команде выполнения, но код для него отсутствует. Также ваши две команды ввода могут быть заменены на '-input/user/cloudera/join2_data/join2_gen * .txt'. –
Поскольку я указал numReduceTasks = 0, редуктор не будет выполнен правильно? Пожалуйста, поправьте меня, если я ошибаюсь. Так как файл пуст из картографа, редуктор выдает ошибку. Я проверил редуктор с другим картографом, он работает хорошо. Я не думаю, что проблема с редуктором. При необходимости я могу отправить редуктор. – Praveen
Я не знаю много о Hadoop Streaming с Python, но я бы попробовал не указывать опцию '-reducer'? Конечно, это ничего не должно менять, но стоит попробовать. Также, что произойдет, если вы передадите 'j2.txt' в задание? это, по-видимому, другой файл для входов, которые вы фактически использовали. –