2011-01-18 10 views
5

Estoy tratando de ejecutar un trabajo Map-Reduce en Hadoop Streaming con scripts de Python y obtener los mismos errores que Hadoop Streaming Job failed error in python, pero esas soluciones no me funcionaron.Falló el trabajo de Hadoop Streaming (no exitoso) en Python

Mis guiones funcionan bien cuando corro "sample.txt gato | ./p1mapper.py | tipo | ./p1reducer.py"

Pero cuando corro el 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 

(Nota: Incluso si quito el "pitón" o escriba el nombre de ruta completo para -mapper y -reducer, el resultado es el mismo)

Ésta es la salida me sale:

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 intento fallido/Muerto Tarea:

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) 

Éstos son mis scripts de Python: p1mapper.py

#!/usr/bin/env python 

import sys 
import re 

SEQ_LEN = 4 

eos = re.compile('(?<=[a-zA-Z])\.') # period preceded by an alphabet 
ignore = re.compile('[\W\d]') 

for line in sys.stdin: 
    array = re.split(eos, line) 
    for sent in array: 
     sent = ignore.sub('', sent) 
     sent = sent.lower() 
     if len(sent) >= 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 apreciaría cualquier ayuda, ¡Gracias!

ACTUALIZACIÓN:

hdfs-site.xml:

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 

<!-- Put site-specific property overrides in this file. --> 

<configuration> 

<property> 

      <name>dfs.replication</name> 

      <value>1</value> 

</property> 

</configuration> 

mapred-site.xml:

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> 

<!-- Put site-specific property overrides in this file. --> 

<configuration> 

<property> 

      <name>mapred.job.tracker</name> 

      <value>localhost:54311</value> 

</property> 

</configuration> 
+0

podría ser un problema de configuración puede también enviar su hdfs-site.xml y mapred -sitio.xml configuraciones por favor. –

+0

pegado arriba. Muchas gracias Joe! – sirentian

Respuesta

4

Usted se echa en falta una gran cantidad de configuraciones y es necesario definir y directorios tal. Ver aquí:

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

operación distribuida es igual que la operación de pseudo-distribuido descrito anteriormente, excepto:

  1. Especifique el nombre de host o la dirección IP del servidor principal 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 directorios para dfs.name.dir y dfs.data.dir en conf/hadoop-site.xml. Estos se utilizan para mantener los datos distribuidos del sistema de archivos en el nodo maestro y los nodos esclavos, respectivamente. Tenga en cuenta que dfs.data.dir puede contener una lista de nombres de directorio separados por espacios o por comas, de modo que los datos puedan almacenarse en varios 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, utilice 10 veces la cantidad de procesadores esclavos para mapred.map.tasks y 2 veces la cantidad de procesadores esclavos para mapred.reduce.tasks.
  5. Lista de todos los nombres de host de esclavos o direcciones IP en su conf/archivo esclavos, uno por línea y se aseguran de JobTracker se encuentra en/etc/hosts que apuntan a su nodo JobTracker
0

Bueno, me quedé en el mismo problema durante 2 días ahora .. La solución que Joe proporciona en sus other post funciona bien para mí ..

Como una solución a su problema que sugiere:

1) Seguir ciegamente y sólo ciegamente las instrucciones sobre cómo configurar un clúster de nodo único here (supongo que ya lo ha hecho)

2) Si en cualquier lugar que enfrentarse a una java.io.IOException: error namespaceIDs Incompatible (lo encontrará si se examinan los registros), echar un vistazo here

3) eliminar todas las comillas dobles DE SU COMANDO, en su ejemplo correr

./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

Cuestiones relacionadas