2012-08-23 6 views
6

Estoy aprendiendo colmena. Configuré una tabla llamada records. Con el esquema de la siguiente manera:mapa de muestra reduce script en python para colmena produce excepción

year  : string 
temperature : int 
quality  : int 

Aquí son ejemplos de filas

1999 28 3 
2000 28 3 
2001 30 2 

Ahora me escribió un mapa de ejemplo reducir guión en Python exactamente como se especifica en el libro Hadoop La guía definitiva:

import re 
import sys 

for line in sys.stdin: 
    (year,tmp,q) = line.strip().split() 
    if (tmp != '9999' and re.match("[01459]",q)): 
     print "%s\t%s" % (year,tmp) 

Lo ejecuto usando el siguiente comando:

ADD FILE /usr/local/hadoop/programs/sample_mapreduce.py; 
SELECT TRANSFORM(year, temperature, quality) 
USING 'sample_mapreduce.py' 
AS year,temperature; 

La ejecución falla. En el terminal me sale esto:

Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 0 
2012-08-23 18:30:28,506 Stage-1 map = 0%, reduce = 0% 
2012-08-23 18:30:59,647 Stage-1 map = 100%, reduce = 100% 
Ended Job = job_201208231754_0005 with errors 
Error during job, obtaining debugging information... 
Examining task ID: task_201208231754_0005_m_000002 (and more) from job job_201208231754_0005 
Exception in thread "Thread-103" java.lang.RuntimeException: Error while reading from task log url 
    at org.apache.hadoop.hive.ql.exec.errors.TaskLogProcessor.getErrors(TaskLogProcessor.java:130) 
    at org.apache.hadoop.hive.ql.exec.JobDebugger.showJobFailDebugInfo(JobDebugger.java:211) 
    at org.apache.hadoop.hive.ql.exec.JobDebugger.run(JobDebugger.java:81) 
    at java.lang.Thread.run(Thread.java:662) 
Caused by: java.io.IOException: Server returned HTTP response code: 400 for URL: http://master:50060/tasklog?taskid=attempt_201208231754_0005_m_000000_2&start=-8193 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1436) 
    at java.net.URL.openStream(URL.java:1010) 
    at org.apache.hadoop.hive.ql.exec.errors.TaskLogProcessor.getErrors(TaskLogProcessor.java:120) 
    ... 3 more 

voy a la lista de trabajo con errores y este es el seguimiento de la pila

java.lang.RuntimeException: Hive Runtime Error while closing operators 
    at org.apache.hadoop.hive.ql.exec.ExecMapper.close(ExecMapper.java:226) 
    at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:57) 
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:436) 
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:372) 
    at org.apache.hadoop.mapred.Child$4.run(Child.java:255) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:396) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121) 
    at org.apache.hadoop.mapred.Child.main(Child.java:249) 
Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: Hit error while closing .. 
    at org.apache.hadoop.hive.ql.exec.ScriptOperator.close(ScriptOperator.java:452) 
    at org.apache.hadoop.hive.ql.exec.Operator.close(Operator.java:566) 
    at org.apache.hadoop.hive.ql.exec.Operator.close(Operator.java:566) 
    at org.apache.hadoop.hive.ql.exec.Operator.close(Operator.java:566) 
    at org.apache.hadoop.hive.ql.exec.ExecMapper.close(ExecMapper.java:193) 
    ... 8 more 

La misma traza repitió 3 veces más.

Por favor, alguien me puede ayudar con esto? ¿Que esta mal aquí? Voy exactamente por el libro. Cuál parece ser el problema. Hay dos errores parece. En el terminal, dice que no puede leer desde la URL del registro de tareas. En la lista de trabajos fallidos, la excepción dice algo diferente. Por favor ayuda

+0

No tengo ninguna experiencia con hadoop/colmena así que no voy a arriesgarme a adivinar una respuesta, pero haciendo un experimento rápido donde ejecuté su script python de forma independiente y escribí sus filas de datos de muestra en stdin en la CLI fue exitoso - desde una perspectiva estrictamente python, el código funciona como se esperaba. – chucksmash

+1

Sí, esa secuencia de comandos python es correcta. Tiene que ser, es de un libro de referencia de hadoop muy famoso: D. – Shades88

+1

Gracias por publicar esta pregunta. Estaba buscando un ejemplo similar. ¡Muy útil! – S4M

Respuesta

2

Fui a stedrr log desde la interfaz de administrador de hadoop y vi que había un error de sintaxis de python. Luego descubrí que cuando creé la tabla de colmenas, el delimitador de campo era tab. Y en el split() no lo había mencionado. ¡Así que lo cambié a split('\t') y funcionó bien!

+0

Estoy intentando consultar una tabla creada por otra persona. Creo que puedo estar teniendo el mismo problema que describes. ¿Sabes cómo comprobar qué delimitador se utilizó cuando se creó la tabla? –

0

simplemente use 'describe formatted' y cerca de la parte inferior de la salida encontrará 'Storage Desc Params:' que describen los delimitadores utilizados.

Cuestiones relacionadas