python - Hive 转换使用 Python : Unable to initialize custom script

标签 python hadoop hive

我正在尝试通过将 Python 脚本作为映射器来测试 Hive TRANSFORM。我的 hive 脚本是:

add file  /full/path/to/mapper.py;

set mapred.job.queue.name=queue_name;

use my_database;

select transform(s.year, s.month, s.day, s.hour) 
using 'mapper.py' 
from my_table s limit 10; 

我的 Python 映射器脚本只是试图回应输入:

#!/usr/local/bin/python
import sys
for line in sys.stdin:
    print line

我尝试使用以下组合来运行它:

  1. 删除配置单元脚本中的 add file ... 并在 select ...mapper.py 的完整路径声明

  2. 保留 add file ... 和映射器的完整路径:/path/to/mapper.py

  3. 保留 add file ... 和映射器的相对路径:./mapper.py

  4. 尝试使用 AS 子句选择映射器输出(使用 'mapper.py' 作为行)

到目前为止,上述所有尝试都导致 Hive 报告它无法初始化我的自定义脚本:

FAILED: Execution Error, return code 20000 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. Unable to initialize custom script.

我无法理解这种“初始化”的性质。 Hive是不是不能

  1. 找到我的脚本(即路径问题)?
  2. 找到 python 可执行文件(即 #! shebang)

我正在关注 Hive tutorial 中的“自定义 map/reduce 脚本” .

最佳答案

通过将我的 select... 语句修改为

解决了这个问题
add file  /full/path/to/mapper.py;
select transform(s.year, s.month, s.day, s.hour) 
using ' python mapper.py' --<--- This line changed
from my_table s limit 10; 

Reference post

关于python - Hive 转换使用 Python : Unable to initialize custom script,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28637592/

相关文章:

hadoop - 从本地 IDE 针对远程 Spark 集群运行

java - Oozie:从 Oozie <java> 操作启动 Map-Reduce?

bash - 从 hadoop fs、bash 到局部变量的路径是什么?

python - 使用 update() 函数后不使用 session 的 SqlAlchemy 提交

python - Theta(n**2) 和 Theta(n*lgn) 算法执行不当

python 和 Pandas 。如何使用 TextFileReader 对象中 "chunks"的子集?

mysql - 使用Sqoop从MySQL导入数据到Hive

apache-spark - Spark + 写入 Hive 表 + 解决方法

hadoop - 在 Hive 中执行任何查询时,有什么方法可以获取列名和输出吗?

python - 包装一个函数,该函数返回一个指向带有 ctypes 的 python 对象的指针