Tôi đang học hive. Tôi đã thiết lập một bảng có tên là records
. Với sơ đồ như sau:Bản đồ mẫu giảm tập lệnh trong python cho hive tạo ngoại lệ
year : string
temperature : int
quality : int
Dưới đây là hàng mẫu
1999 28 3
2000 28 3
2001 30 2
Bây giờ tôi đã viết một bản đồ mẫu giảm kịch bản trong python đúng như quy định trong cuốn sách 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)
Tôi chạy điều này bằng cách sử dụng lệnh sau:
ADD FILE /usr/local/hadoop/programs/sample_mapreduce.py;
SELECT TRANSFORM(year, temperature, quality)
USING 'sample_mapreduce.py'
AS year,temperature;
Thực hiện không thành công. Trên thiết bị đầu cuối tôi có được điều này:
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
tôi đi đến danh sách công việc thất bại và đây là 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
Các dấu vết tương tự lặp đi lặp lại nhiều hơn 3 lần.
Xin vui lòng, ai đó có thể giúp tôi với điều này? Có gì sai ở đây? Tôi sẽ chính xác bằng cuốn sách. Hình như có vấn đề gì thì phải. Có vẻ như có hai lỗi. Trên thiết bị đầu cuối nó nói rằng nó không thể đọc từ url đăng nhập nhiệm vụ. Trong danh sách công việc thất bại, ngoại lệ nói điều gì đó khác. Vui lòng giúp
Tôi không có kinh nghiệm với hadoop/hive vì vậy tôi sẽ không gây nguy hiểm khi đoán câu trả lời nhưng thực hiện một thử nghiệm nhanh nơi tôi chạy tập lệnh python của bạn độc lập và nhập hàng dữ liệu mẫu vào stdin tại CLI - từ một quan điểm nghiêm ngặt python mã hoạt động như mong đợi. – chucksmash
vâng, đó là kịch bản python là chính xác. Phải, đó là từ một cuốn sách tham khảo hadoop rất nổi tiếng: D. – Shades88
Cảm ơn bạn đã đăng câu hỏi này. Tôi đang tìm một ví dụ tương tự. Rất tiện dụng! – S4M