首页 > 代码库 > 自定义UDF时引用JAR包的另一种方式
自定义UDF时引用JAR包的另一种方式
背景:
写了一个UDF A.class放在A.jar里。A.class依赖B.jar中的B.class。B.class又依赖C.jar中的C.class。
使用add jar把A.jar、B.jar、C.jar把jar包加入classpath
hive脚本里执行create temporary function XXX as "A.class"时抛出异常“C.class not found”
解决方法:
设置环境变量:
export HIVE_AUX_JARS_PATH=`pwd` #jar包和脚本放在同级目录下
原理:
hive cli的启动脚本“hive”中有如下几行:
if [ -d "${HIVE_AUX_JARS_PATH}" ]; then for f in ${HIVE_AUX_JARS_PATH}/*.jar; do if [[ ! -f $f ]]; then continue; fi if $cygwin; then f=`cygpath -w "$f"` fi AUX_CLASSPATH=${AUX_CLASSPATH}:$f if [ "${AUX_PARAM}" == "" ]; then AUX_PARAM=file://$f else AUX_PARAM=${AUX_PARAM},file://$f; fi done elif [ "${HIVE_AUX_JARS_PATH}" != "" ]; then HIVE_AUX_JARS_PATH=`echo $HIVE_AUX_JARS_PATH | sed ‘s/,/:/g‘` if $cygwin; then HIVE_AUX_JARS_PATH=`cygpath -p -w "$HIVE_AUX_JARS_PATH"` HIVE_AUX_JARS_PATH=`echo $HIVE_AUX_JARS_PATH | sed ‘s/;/,/g‘` fi AUX_CLASSPATH=${AUX_CLASSPATH}:${HIVE_AUX_JARS_PATH} AUX_PARAM="file://$(echo ${HIVE_AUX_JARS_PATH} | sed ‘s/:/,file:\/\//g‘)" fi
具体jar包是如何加入hive的classpath还需要继续研究。
自定义UDF时引用JAR包的另一种方式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。