自定义映射器作为jar文件

时间:2013-04-15 23:44:49

标签: hadoop hive

我想为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。

3 个答案:

答案 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的工作方式相同。