Ich lerne Bienenstock. Ich habe eine Tabelle mit dem Namen records
eingerichtet. Mit Schema wie folgt:Beispiel-Map Skript in Python für Stock reduzieren erzeugt Ausnahme
year : string
temperature : int
quality : int
Hier sind Beispielzeilen
1999 28 3
2000 28 3
2001 30 2
Jetzt habe ich eine Probe-Zuordnungs-Skript in Python reduzieren genau wie im Buch angegebenen Hadoop The Definitive Guide:
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)
Ich führe dies mit folgendem Befehl aus:
ADD FILE /usr/local/hadoop/programs/sample_mapreduce.py;
SELECT TRANSFORM(year, temperature, quality)
USING 'sample_mapreduce.py'
AS year,temperature;
Ausführung schlägt fehl. Auf dem Terminal bekomme ich dies:
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
ich gescheitert Jobliste gehen und dies ist der Stack-Trace
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
Die gleiche Spur wiederholt 3-mal mehr.
Bitte, kann mir jemand dabei helfen? Was ist hier falsch? Ich gehe genau nach dem Buch. Was scheint das Problem zu sein. Es scheint zwei Fehler zu geben. Am Terminal heißt es, dass es nicht aus der Task-Log-URL lesen kann. In der Liste der fehlgeschlagenen Jobs sagt die Ausnahme etwas anderes aus. Bitte helfen
Ich habe keine Erfahrung mit Hadoop/Hive, also werde ich keine Vermutung auf eine Antwort riskieren, aber ein schnelles Experiment, wo ich Ihr Python-Skript standalone und tippte Ihre Beispieldatenzeilen in stdin am CLI war erfolgreich - Aus einer strikten Python-Perspektive funktioniert der Code wie erwartet. – chucksmash
Ja, das Python-Skript ist korrekt. Muss sein, stammt von einem sehr berühmten Hadoop-Nachschlagewerk: D. – Shades88
Vielen Dank für das Posten dieser Frage. Ich war auf der Suche nach einem ähnlichen Beispiel. Sehr praktisch! – S4M