码迷,mamicode.com
首页 > 编程语言 > 详细

自定义UDF时引用JAR包的另一种方式

时间:2014-10-31 22:23:06      阅读:281      评论:0      收藏:0      [点我收藏+]

标签:style   io   ar   使用   for   sp   on   cti   bs   

背景:

  1. 写了一个UDF A.class放在A.jar里。A.class依赖B.jar中的B.class。B.class又依赖C.jar中的C.class。

  2. 使用add jar把A.jar、B.jar、C.jar把jar包加入classpath

  3.  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包的另一种方式

标签:style   io   ar   使用   for   sp   on   cti   bs   

原文地址:http://my.oschina.net/u/592278/blog/339663

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!