6

私はハイブを学んでいます。。という名前のテーブルを設定しましたrecords。次のようなスキーマを使用します。

year        : string
temperature : int
quality     : int

これがサンプル行です

1999 28 3
2000 28 3
2001 30 2

ここで、Hadoop The Definitive Guideの本で指定されているとおりに、Pythonでサンプルのmapreduceスクリプトを作成しました。

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)

次のコマンドを使用してこれを実行します。

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

実行に失敗します。ターミナルで私はこれを取得します:

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

失敗したジョブリストに移動します。これはスタックトレースです

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

同じトレースが3回以上繰り返されました。

誰かがこれを手伝ってくれませんか?ここで何が問題になっていますか?私はその本を正確に読みます。問題であると想定されるのは。2つのエラーがあるようです。ターミナルでは、タスクログのURLから読み取ることができないと表示されます。失敗したジョブリストでは、例外は別のことを示しています。助けてください

4

2 に答える 2

2

hadoop管理インターフェースからstedrrログにアクセスしたところ、Pythonから構文エラーが発生していることがわかりました。次に、ハイブテーブルを作成したときに、フィールドの区切り文字がタブであることがわかりました。そして、split()私は言及していませんでした。だから私はそれをに変更しました、split('\t')そしてそれは大丈夫でした!

于 2012-08-24T07:44:35.757 に答える
0

「describeformatted」を使用するだけで、出力の下部に「Storage Desc Params:」が表示されます。これは、使用される区切り文字を記述します。

于 2013-07-27T01:28:46.310 に答える