在Hadoop上运行Python
我正在尝试通过Hive和Hadoop运行一个非常简单的Python脚本。
这是我的脚本:
#!/usr/bin/env python
import sys
for line in sys.stdin:
line = line.strip()
nums = line.split()
i = nums[0]
print i
我想在以下这个表上运行它:
hive> select * from test;
OK
1 3
2 2
3 1
Time taken: 0.071 seconds
hive> desc test;
OK
col1 int
col2 string
Time taken: 0.215 seconds
我正在运行:
hive> select transform (col1, col2) using './proba.py' from test;
但总是得到类似这样的结果:
...
2011-11-18 12:23:32,646 Stage-1 map = 0%, reduce = 0%
2011-11-18 12:23:58,792 Stage-1 map = 100%, reduce = 100%
Ended Job = job_201110270917_20215 with errors
FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.MapRedTask
我尝试了很多不同的修改方法,但总是失败。 :(
我是不是做错了什么,还是我的Hive/Hadoop安装有问题?
3 个回答
0
"失败:执行错误,来自 org.apache.hadoop.hive.ql.exec.MapRedTask 的返回代码 2" 是 Hive 在底层的 map/reduce 任务出现问题时返回的一个通用错误。你需要去 HiveServer2 机器上的 Hive 日志文件中查找实际的异常堆栈信息。
0
查看 hive.log 文件和/或你提到的 Hadoop 任务的日志(比如 job_201110270917_20215),这样可以找到更详细的错误信息。
4
如果我在调试这个问题,我会检查几个方面:
1) 确保你的Python文件是可执行的(可以用命令chmod +x file.py来设置)
2) 确保在所有机器上,Python文件的位置是一样的。更好的办法是把文件放在hdfs上,这样你可以用“hdfs://path/to/file.py”来代替本地路径
3) 查看一下你的作业在hadoop仪表板上的情况(http://master-node:9100),如果你点击一个失败的任务,它会给你实际的Java错误和堆栈跟踪,这样你就能看到执行过程中到底出了什么问题
4) 确保所有的从节点上都安装了Python!(我总是忽略这一点)
希望这些能帮到你……