0

我想为 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 信息 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: Broken pipe

注意:我的 jar 是一个 jruby 文件,用warbler编译成一个 jar 。

4

3 回答 3

0

Hive 使用“流式”自定义映射器和缩减器 - 一个简单的程序,从标准输入读取并在标准输出中写入。所以通常有用于此的脚本语言:Python、Perl、PHP 甚至 Bash。当然,还有 Ruby。

但是,如果您想为此使用 java 程序,则应该使该程序可执行。你真的需要使用 Java 来进行普通的标准输入/标准输出工作吗?

UPD:所以 JRuby 只使用普通的 Ruby。

于 2013-04-16T02:40:04.310 回答
0

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

于 2013-04-18T00:34:02.920 回答
0

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

于 2013-04-17T20:18:31.760 回答