使用Python进行Hive转换:无法初始化自定义脚本

RDK*_*RDK 4 python hadoop hive

我试图通过将Python脚本作为映射器来测试Hive TRANSFORM.我的蜂巢脚本是:

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; 
Run Code Online (Sandbox Code Playgroud)

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

#!/usr/local/bin/python
import sys
for line in sys.stdin:
    print line
Run Code Online (Sandbox Code Playgroud)

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

  1. 删除add file ...hive脚本并mapper.pyselect ...语句中提供完整路径

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

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

  4. 尝试使用AS子句(using 'mapper.py' as line)选择映射器输出

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

FAILED: Execution Error, return code 20000 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. Unable to initialize custom script.
Run Code Online (Sandbox Code Playgroud)

我无法理解这种"初始化"的本质.是Hive无法做到的

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

我正在遵循Hive教程中的"自定义地图/缩小脚本" .

RDK*_*RDK 6

通过修改我的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; 
Run Code Online (Sandbox Code Playgroud)

参考文章