标签:style io ar 使用 for sp on cti bs
背景:
写了一个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还需要继续研究。
标签:style io ar 使用 for sp on cti bs
原文地址:http://my.oschina.net/u/592278/blog/339663