我想为Hive编写一个自定义映射器,它是一个jar文件。我如何在查询中使用它?
使用常规语法:
add file myfile.jar
...
map using myfile.jar
似乎不起作用。我得到的错误是:
2013-04-15 22:52:26,207 INFO org.apache.hadoop.hive.ql.exec.ScriptOperator:脚本没有使用所有输入数据。这被视为错误。 2013-04-15 22:52:26,207 INFO org.apache.hadoop.hive.ql.exec.ScriptOperator:set hive.exec.script.allow.partial.consumption = true;忽略它。 2013-04-15 22:52:26,207 FATAL ExecReducer:org.apache.hadoop.hive.ql.metadata.HiveException:java.io.IOException:Broken pipe
注意:我的jar是一个jruby文件,编译为带有warbler的jar。
答案 0 :(得分:0)
Hive使用'streamable'自定义映射器和reducer - 一个简单的程序,从stdin读取并在stdout中写入。所以通常会使用脚本语言:Python,Perl,PHP甚至Bash。当然还有Ruby。
但是如果你想使用java程序,你应该使该程序可执行。你真的需要使用Java进行普通stdin / stdout工作吗?
UPD:所以JRuby只使用普通的Ruby。
答案 1 :(得分:0)
Hive将只执行任何映射器脚本。在这种情况下,它需要运行像java -jar myfile.jar
这样的jar文件,但它试图将其作为./myfile.jar
运行。我的解决方案是添加一个名为myfile.sh
的包装器shell脚本。 shell脚本运行了jar,我使用myfile.sh
作为映射器。这样我就可以使用.jar
文件作为映射器。
答案 2 :(得分:0)
如果您需要使用Java,请尝试编写自己的UDF而不是映射器。实际上,HiveQL函数和UDF与mapper的工作方式相同。