2012-02-23 29 views
8

我在配置单元服务器模式下运行配置单元。我有一个jar文件中的UDF,我试图通过运行无法在配置单元服务器上运行UDF

add jar <path to jar> 
create temporary function func_name as 'com.test.udf.UDF_CLASS' 

然而使用,当我运行创建临时函数命令我得到一个错误

查询返回的非零代码:9,引起:失败:执行错误, 返回码1,从org.apache.hadoop.hive.ql.exec.FunctionTask

我已经签了罐子的名称&路径和用户运行配置单元服务器具有所有的c直接访问jar的权限。奇怪的是,如果我在CLI模式下运行配置单元并运行完全相同的命令,那么一切正常。关于为什么hive CLI可能与配置单元节俭服务器行为不同的任何想法?

回答

3

使用以下步骤固定的问题:

1)将在每个UDF罐/ usr/lib中/蜂巢/ auxlib

2)指定的路径在蜂房-site.xml中每个罐子hive.aux.jars.path属性(例如:file:///usr/lib/hive/auxlib/jar1.jar,file:///usr/lib/hive/auxlib/jar2.jar)

3)创建脚本向蜂巢服务器发出节俭请求,以便在启动蜂巢服务器后为每个UDF运行创建临时函数func_name作为'com.test.udf.ClassName'

编辑:对于Hive 0.9,无论我做了什么,Hiveserver都无法在auxlib目录中找到jar。为了使它在Hiveserver 0.9上运行,我只需将该jar转储到Hive类路径指定的目录中即可。

0

您也可以通过将--auxpath选项蜂巢命令 蜂巢做--auxpath /path-to-/hive-examples.jar

通过设置HIVE_AUX_JARS_PATH环境varialble 。

+2

无论是与节俭蜂巢服务器的0.7.0版本作为命令行选项而不是标准的HIVE_OPTS(我使用的版本),因为只有0.7.0接受HIVE_PORT这些工作。 Hive的CLI一直支持你一段提到的两种方式,但在hiveserver模式下运行只在0.8,我认为加时的支持。 – jwegan 2012-02-24 06:21:14

7

在玩了一段时间之后,我通过将.class文件放入与它的包相匹配的目录结构中,然后将其添加到.jar中,从而实现了它的工作。作为参考,我已经包括了整个过程,包括编译和插入配置单元。

  1. 我用UDF示例here
  2. 编译:javac -classpath $CLASSPATH Lower.java注意:CLASSPATH定义如下:CLASSPATH=$(ls $HIVE_HOME/lib/hive-serde-*.jar):$(ls $HIVE_HOME/lib/hive-exec-*.jar):$(ls $HADOOP_HOME/hadoop-core-*.jar),如here所述。
  3. .class文件到一个文件夹COM /例子/蜂巢/ UDF/
  4. 把它添加到一个罐子用这个命令复制:jar -cf lower.jar com/example/hive/udf/Lower.class
  5. 验证该包看起来正确:jar -tf lower.jar。你应该看到这样的一行:com/example/hive/udf/Lower.class
  6. 将jar导入配置单元。add jar lower.jar; create temporary function my_lower as 'com.example.hive.udf.Lower';
+0

不知道为什么有人下来投这个..我有同样的问题,这个工作对我来说... 在AWS EMR – 2013-10-17 05:16:34

+2

作品使用蜂巢0.11.0对我来说太:)在第一步中的链接现在被打破,我觉得应该是指向:https://cwiki.apache.org/confluence/display/Hive/HivePlugins – Nadine 2015-03-11 13:11:51

相关问题