我想为Hive编写一个自定义映射器,它是一个jar文件。 我将如何在查询中使用它?

使用常规语法:

add file myfile.jar

...

map using myfile.jar

似乎不起作用。 我得到的错误是:

2013-04-15 22:52:26,207信息org.apache.hadoop.hive.ql.exec.ScriptOperator:脚本未使用所有输入数据。 这被认为是错误。 2013-04-15 22:52:26,207信息org.apache.hadoop.hive.ql.exec.ScriptOperator:设置hive.exec.script.allow.partial.consumption = true; 忽略它。 2013-04-15 22:52:26,207致命ExecReducer:org.apache.hadoop.hive.ql.metadata.HiveException:java.io.IOException:断管

注意:我的jar是一个jarby文件,使用warbler编译为jar。

===============>>#1 票数:0

Hive使用“流式”自定义映射器和简化器-一个普通程序,可从stdin读取并以stdout写入。 因此通常有用于此目的的脚本语言:Python,Perl,PHP甚至Bash。 当然还有Ruby。

但是,如果要使用Java程序,则应使该程序可执行。 您真的需要使用Java来执行普通的stdin / stdout工作吗?

UPD:因此,JRuby只是使用普通的Ruby。

===============>>#2 票数:0 已采纳

Hive将只执行任何映射器脚本。 在这种情况下,它需要像java -jar myfile.jar一样运行jar文件,但它试图将其作为./myfile.jar来运行。 我的解决方案是添加一个名为myfile.sh的包装外壳脚本。 shell脚本运行了jar,我使用myfile.sh作为映射器。 这样,我便可以将.jar文件用作映射器。

===============>>#3 票数:0

如果您需要使用完全Java,请尝试编写自己的UDF而不是映射器。 实际上,HiveQL函数和UDF的作用与mapper相同。

  ask by Vlad the Impala translate from so

未解决问题?本站智能推荐: