La tarea de transmisión de Hadoop falló (no se realizó correctamente) en Python

Estoy tratando de ejecutar un trabajo Map-Reduce en Hadoop Streaming con scripts de Python y obtengo los mismos errores que el error de Hadoop Streaming Job en python, pero esas soluciones no me funcionaron.

Mis scripts funcionan bien cuando ejecuto “cat sample.txt | ./p1mapper.py | sort | ./p1reducer.py”

Pero cuando corro lo siguiente:

./bin/hadoop jar contrib/streaming/hadoop-0.20.2-streaming.jar \ -input "p1input/*" \ -output p1output \ -mapper "python p1mapper.py" \ -reducer "python p1reducer.py" \ -file /Users/Tish/Desktop/HW1/p1mapper.py \ -file /Users/Tish/Desktop/HW1/p1reducer.py 

(NB: incluso si elimino “python” o escribo la ruta completa para -mapper y -reducer, el resultado es el mismo)

Esta es la salida que obtengo:

 packageJobJar: [/Users/Tish/Desktop/HW1/p1mapper.py, /Users/Tish/Desktop/CS246/HW1/p1reducer.py, /Users/Tish/Documents/workspace/hadoop-0.20.2/tmp/hadoop-unjar4363616744311424878/] [] /var/folders/Mk/MkDxFxURFZmLg+gkCGdO9U+++TM/-Tmp-/streamjob3714058030803466665.jar tmpDir=null 11/01/18 03:02:52 INFO mapred.FileInputFormat: Total input paths to process : 1 11/01/18 03:02:52 INFO streaming.StreamJob: getLocalDirs(): [tmp/mapred/local] 11/01/18 03:02:52 INFO streaming.StreamJob: Running job: job_201101180237_0005 11/01/18 03:02:52 INFO streaming.StreamJob: To kill this job, run: 11/01/18 03:02:52 INFO streaming.StreamJob: /Users/Tish/Documents/workspace/hadoop-0.20.2/bin/../bin/hadoop job -Dmapred.job.tracker=localhost:54311 -kill job_201101180237_0005 11/01/18 03:02:52 INFO streaming.StreamJob: Tracking URL: http://www.glassdoor.com:50030/jobdetails.jsp?jobid=job_201101180237_0005 11/01/18 03:02:53 INFO streaming.StreamJob: map 0% reduce 0% 11/01/18 03:03:05 INFO streaming.StreamJob: map 100% reduce 0% 11/01/18 03:03:44 INFO streaming.StreamJob: map 50% reduce 0% 11/01/18 03:03:47 INFO streaming.StreamJob: map 100% reduce 100% 11/01/18 03:03:47 INFO streaming.StreamJob: To kill this job, run: 11/01/18 03:03:47 INFO streaming.StreamJob: /Users/Tish/Documents/workspace/hadoop-0.20.2/bin/../bin/hadoop job -Dmapred.job.tracker=localhost:54311 -kill job_201101180237_0005 11/01/18 03:03:47 INFO streaming.StreamJob: Tracking URL: http://www.glassdoor.com:50030/jobdetails.jsp?jobid=job_201101180237_0005 11/01/18 03:03:47 ERROR streaming.StreamJob: Job not Successful! 11/01/18 03:03:47 INFO streaming.StreamJob: killJob... Streaming Job Failed! 

Para cada bash de tarea fallido / matado:

 Map output lost, rescheduling: getMapOutput(attempt_201101181225_0001_m_000000_0,0) failed : org.apache.hadoop.util.DiskChecker$DiskErrorException: Could not find taskTracker/jobcache/job_201101181225_0001/attempt_201101181225_0001_m_000000_0/output/file.out.index in any of the configured local directories at org.apache.hadoop.fs.LocalDirAllocator$AllocatorPerContext.getLocalPathToRead(LocalDirAllocator.java:389) at org.apache.hadoop.fs.LocalDirAllocator.getLocalPathToRead(LocalDirAllocator.java:138) at org.apache.hadoop.mapred.TaskTracker$MapOutputServlet.doGet(TaskTracker.java:2887) at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:502) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:363) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:417) at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:324) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:534) at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:864) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:533) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:207) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:403) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:522) 

Aquí están mis scripts de Python: p1mapper.py

 #!/usr/bin/env python import sys import re SEQ_LEN = 4 eos = re.compile('(?= SEQ_LEN: for i in range(len(sent)-SEQ_LEN + 1): print '%s 1' % sent[i:i+SEQ_LEN] 

p1reducer.py

 #!/usr/bin/env python from operator import itemgetter import sys word2count = {} for line in sys.stdin: word, count = line.split(' ', 1) try: count = int(count) word2count[word] = word2count.get(word, 0) + count except ValueError: # count was not a number pass # sort sorted_word2count = sorted(word2count.items(), key=itemgetter(1), reverse=True) # write the top 3 sequences for word, count in sorted_word2count[0:3]: print '%s\t%s'% (word, count) 

Realmente agradecería cualquier ayuda, gracias!

ACTUALIZAR:

hdfs-site.xml:

      dfs.replication 1   

mapred-site.xml:

      mapred.job.tracker localhost:54311   

Le faltan muchas configuraciones y necesita definir directorios y demás. Mira aquí:

http://wiki.apache.org/hadoop/QuickStart

La operación distribuida es como la operación pseudo-distribuida descrita anteriormente, excepto:

  1. Especifique el nombre de host o la dirección IP del servidor maestro en los valores de fs.default.name y mapred.job.tracker en conf / hadoop-site.xml. Estos se especifican como host: pares de puertos.
  2. Especifique los directorios para dfs.name.dir y dfs.data.dir en conf / hadoop-site.xml. Estos se utilizan para mantener los datos del sistema de archivos distribuidos en el nodo maestro y los nodos esclavos, respectivamente. Tenga en cuenta que dfs.data.dir puede contener una lista de nombres de directorios separados por espacios o comas, por lo que los datos pueden almacenarse en múltiples dispositivos.
  3. Especifique mapred.local.dir en conf / hadoop-site.xml. Esto determina dónde se escriben los datos temporales de MapReduce. También puede ser una lista de directorios.
  4. Especifique mapred.map.tasks y mapred.reduce.tasks en conf / mapred-default.xml. Como regla general, use 10 veces el número de procesadores esclavos para mapred.map.tasks, y 2 veces el número de procesadores esclavos para mapred.reduce.tasks.
  5. Liste todos los nombres de host esclavos o direcciones IP en su archivo conf / slaves, uno por línea y asegúrese de que jobtracker esté en su archivo / etc / hosts apuntando a su nodo jobtracker

Bueno, seguí con el mismo problema durante 2 días ahora … La solución que Joe proporcionó en su otra publicación me funciona bien …

Como solución a tu problema te sugiero:

1) Siga ciegamente y solo a ciegas las instrucciones sobre cómo configurar un clúster de un solo nodo aquí (supongo que ya lo ha hecho)

2) Si en algún lugar se enfrenta a una java.io.IOException: error de ID de espacio de nombres incompatible (lo encontrará si examina los registros), eche un vistazo aquí

3) ELIMINE TODAS LAS CITAS DOBLES DE SU COMANDO, en su ejecución de ejemplo

 ./bin/hadoop jar contrib/streaming/hadoop-0.20.2-streaming.jar \ -input "p1input/*" \ -output p1output \ -mapper p1mapper.py \ -reducer p1reducer.py \ -file /Users/Tish/Desktop/HW1/p1mapper.py \ -file /Users/Tish/Desktop/HW1/p1reducer.py 

esto es ridículo, pero fue el punto en el que me quedé durante 2 días enteros