example - python mapreduce
Error de comando de transmisiĆ³n de Hadoop con un error de Python (3)
similiar a los errores que estaba obteniendo -
Primero, en: -file mapper.py -file reducer.py -mapper mapper.py -reducer reducer.py
puede usar rutas totalmente calificadas del sistema local en el ''-file'', y luego relativo en el ''-mapper'', por ejemplo .: -file /aFully/qualified/localSystemPathTo/yourMapper.py -mapper yourMapper.py
luego: recuerde incluir ese "#! / usr / bin / python" en la parte superior de los archivos ''reducer.py'' y ''mapper.py''
finalmente,
en mi mapper.py y reducer.py, puse todas mis importaciones dentro de una función ''setup_call ()'' (vs. en el nivel ''global'' del archivo), y luego envolví eso con:
if __name__== ''__main__'':
try:
setup_call_andCloseOut()
except:
import sys, traceback, StringIO
fakeeWriteable = StringIO.StringIO()
traceback.print_exc(None, file=fakeeWriteable)
msg = ""
msg +="------------------------------------------------------/n"
msg +="----theTraceback: -----------/n"
msg += fakeeWriteable.getvalue() + "/n"
msg +="------------------------------------------------------/n"
sys.stderr.write(msg)
#end
en ese punto, pude usar el registro de trabajo web de hadoop (esos enlaces http: // en su mensaje de error) y navegar para ver los mensajes ''stderr'' ... (de la lógica del núcleo real)
Estoy seguro de que hay otras maneras más concisas de hacer todo esto, pero esto fue a la vez semánticamente claro y suficiente para mis necesidades inmediatas
buena suerte..
Soy un recién llegado a Ubuntu, Hadoop y DFS pero he logrado instalar una instancia de hadoop de un nodo en mi máquina ubuntu local siguiendo las instrucciones publicadas en Michael-Noll.com aquí:
http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python/
Actualmente estoy atascado en ejecutar el ejemplo de conteo de palabras básico en Hadoop. No estoy seguro de si el hecho de que he estado ejecutando Hadoop fuera de mi directorio de descargas hace una gran diferencia, pero he intentado explorar mis ubicaciones de archivos para las funciones mapper.py y reducer.py colocándolas en el directorio de trabajo de Hadooop sin éxito. He agotado todas mis investigaciones y todavía no puedo resolver este problema (es decir, usando parámetros de archivos, etc.) Realmente agradezco cualquier ayuda por adelantado y espero enmarcar esta pregunta de una manera que pueda ayudar a otros que recién están comenzando con Python + Hadoop.
Probé mapper.py y reduce.py de forma independiente y ambos funcionan bien cuando se me solicitan datos de texto de juguete del shell bash.
Salida de mi Bash Shell:
hduser@chris-linux:/home/chris/Downloads/hadoop$ bin/hadoop jar /home/chris/Downloads/hadoop/contrib/streaming/hadoop-streaming-1.0.4.jar -file mapper.py -file reducer.py -mapper mapper.py -reducer reducer.py -input /user/hduser/gutenberg/* -output /user/hduser/gutenberg-output3
Warning: $HADOOP_HOME is deprecated.
packageJobJar: [mapper.py, reducer.py, /app/hadoop/tmp/hadoop-unjar4681300115516015516/] [] /tmp/streamjob2215860242221125845.jar tmpDir=null
13/03/08 14:43:46 INFO util.NativeCodeLoader: Loaded the native-hadoop library
13/03/08 14:43:46 WARN snappy.LoadSnappy: Snappy native library not loaded
13/03/08 14:43:46 INFO mapred.FileInputFormat: Total input paths to process : 3
13/03/08 14:43:47 INFO streaming.StreamJob: getLocalDirs(): [/app/hadoop/tmp/mapred/local]
13/03/08 14:43:47 INFO streaming.StreamJob: Running job: job_201303081155_0032
13/03/08 14:43:47 INFO streaming.StreamJob: To kill this job, run:
13/03/08 14:43:47 INFO streaming.StreamJob: /home/chris/Downloads/hadoop/libexec/../bin/hadoop job -Dmapred.job.tracker=localhost:54311 -kill job_201303081155_0032
13/03/08 14:43:47 INFO streaming.StreamJob: Tracking URL: http://localhost:50030/jobdetails.jsp?jobid=job_201303081155_0032
13/03/08 14:43:48 INFO streaming.StreamJob: map 0% reduce 0%
13/03/08 14:44:12 INFO streaming.StreamJob: map 100% reduce 100%
13/03/08 14:44:12 INFO streaming.StreamJob: To kill this job, run:
13/03/08 14:44:12 INFO streaming.StreamJob: /home/chris/Downloads/hadoop/libexec/../bin/hadoop job -Dmapred.job.tracker=localhost:54311 -kill job_201303081155_0032
13/03/08 14:44:12 INFO streaming.StreamJob: Tracking URL: http://localhost:50030/jobdetails.jsp?jobid=job_201303081155_0032
13/03/08 14:44:12 ERROR streaming.StreamJob: Job not successful. Error: JobCleanup Task Failure, Task: task_201303081155_0032_m_000003
13/03/08 14:44:12 INFO streaming.StreamJob: killJob...
Streaming Command Failed!
Mi HDFS está ubicado en / app / hadoop / tmp que, creo, también es el mismo que mi directorio / user / hduser en mi instancia de hadoop.
Los datos de entrada se encuentran en / user / hduser / gutenberg / * (3 archivos de texto plano UTF) La salida se configura para ser creada en / user / hduser / gutenberg-output
Eche un vistazo a los registros en la siguiente ruta (según la información proporcionada anteriormente):
$HADOOP_HOME$/logs/userlogs/job_201303081155_0032/task_201303081155_0032_m_000003
Esto debería proporcionarle cierta información sobre esa tarea específica.
Los registros suministrados por Hadoop son bastante buenos, solo hace falta investigar un poco para encontrar la información :)
Lo siento por la respuesta tardía.
Debe asegurarse de que sus archivos (asignador y reductor) sean ejecutables por el usuario de hadoop y contengan el Shebang en la primera línea.
Eso resolverá su problema.