Получить имя файла в Mapper hadoop
Мой картограф организован следующим образом:
#!/usr/bin/python
import os
import sys
for line in sys.stdin:
filename = os.environ["map_input_file"]
print(filename)
Я просто пытаюсь получить имя файла в маппере, но есть ошибка в файле map_input_file, определенном следующим образом:
"File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/UserDict.py", line 23, in __getitem__
raise KeyError(key)
KeyError: 'map_input_file'"
Я не понимаю, в чем может быть проблема, поскольку я пробовал разные вещи, такие как:
try:
filename = os.environ["mapreduce.map.input.file"]
except KeyError:
filename = os.environ["map.input.file"]
или же
try:
filename = os.environ["mapreduce_map_input_file"]
except KeyError:
filename = os.environ["map_input_file"]
Это всегда поднимает KeyError
и не может импортировать имя файла.
Любое решение о том, как получить имя файла в маппере, будет высоко ценится.
Для информации, я запускаю этот код локально, используя cat text.txt | конвейер mapper.py. Запуск его в кластере, моя конечная цель, тоже не сработает, возможно, из-за той же ошибки.
1 ответ
@Ilko Действительно, попытка запустить его на кластере дает мне следующую ошибку:
INFO mapreduce.Job: Task Id : attempt_1550240953895_0001_m_000005_2, Status : FAILED
Error: java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1
at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:325)
at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:538)
at org.apache.hadoop.streaming.PipeMapper.close(PipeMapper.java:130)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:61)
at org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:34)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:455)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:344)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:175)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1844)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:169)
19/02/15 14:41:47 INFO mapreduce.Job: map 6% reduce 0%
19/02/15 14:41:48 INFO mapreduce.Job: map 100% reduce 100%
19/02/15 14:41:49 INFO mapreduce.Job: Job job_1550240953895_0001 failed with state FAILED due to: Task failed task_1550240953895_0001_m_000008
Job failed as tasks failed. failedMaps:1 failedReduces:0
Что не очень полезно для такого неопытного человека, как я, ха-ха