HIVE以及OOZIE添加第三方JAR包的方法

本文原文出处: http://blog.csdn.net/bluishglc/article/details/46005269 严禁任何形式的转载,否则将委托CSDN官方维护权益!


以下为2019-2-12日的更新:

  1. 非常确定的是:hive.aux.jars.path确实不支持hdfs:///路径!如果配置了hdfs路径,很可能会引起错误,例如:使用sqoop向hive写数据时就会出错,且没有任何错误提示!所以一定不要使用hdfs路径
  2. 如果是要注册UDF,可以不使用hive.aux.jars.path,因为hive.aux.jars.path只支持本地文件路径,需要手动部署jar包到所有节点,所以,最简洁的方式是通过create function xxxx using jar xxxx, 其中jar的路径支持hdfs,这样就会使得注册变得异常简单,以下是一个示例:
    create function my_fun as ‘com.github.xxx.MyFun’ using jar ‘hdfs:///xxxx.jar’;
    这样注册的funtion是全局可见的,如果不想扩大到这样的作用域,可以追加temporary修饰,并在用的的sql前追加声明就可以了,例如:

create temporary function my_fun as ‘com.github.xxx.MyFun’ using jar ‘hdfs:///xxxx.jar’;
select my_fun(t.a) from mytable t where …

  1. 但是使用create function xxxx using jar xxxx有一个限制,那就是当UDF中依赖到第三方的jar包时,就会面临两种选择:

- 要么将有的依赖包打成一个jar

  • 要么使用hive.aux.jars.path配置一个lib目录,将所有的jar放进去

很多时候,我们需要在HIVE中引入第三方jar包或者是自己编写的“UDF”jar包。在HIVE中,涉及指定外部jar包的配置有两个地方:

  1. hive-site.xml中的配置项“hive.aux.jars.path”
  2. 环境变量:HIVE_AUX_JARS_PATH

从目前的实验可以确定的有两点:

  1. hive.aux.jars.path配置项对于hive server有效,但是是不会作用到hive shell.也就是说即使你在hive节点上配置了这一项,但是对于hive shell来说是无效的。
    这里给一个配置hive.aux.jars.path的例子,注意两点:一,目前只支持file://也就是本地文件,暂不支持HDFS。二,多个文件使用逗号分隔。
    <property>
      <name>hive.aux.jars.path</name>
      <value>file:///usr/lib/hive-aux-jars/elasticsearch-hadoop-2.1.0.Beta4.jar,file:///usr/lib/hive-aux-jars/csv-serde-0.9.1.jar</value>
    </property>
  1. 环境变量HIVE_AUX_JARS_PATH对hive shell有效。

对于环境变量HIVE_AUX_JARS_PATH,要特别说明一下,通常我们说设置一下这个变量就可以引入相应的jar,但是在当前版本的hive下,这个变量的设值有些问题,让我们来看一下启动hive的shell脚本hive-env.sh,它里面有这样一段:

# Folder containing extra libraries required for hive compilation/execution can be controlled by:
if [ "${HIVE_AUX_JARS_PATH}" != "" ]; then
  export HIVE_AUX_JARS_PATH=${HIVE_AUX_JARS_PATH}
elif [ -d "/usr/hdp/current/hive-webhcat/share/hcatalog" ]; then
  export HIVE_AUX_JARS_PATH=/usr/hdp/current/hive-webhcat/share/hcatalog
fi

这是段脚本比较糟糕,因为一旦我们给HIVE_AUX_JARS_PATH设值,则/usr/hdp/current/hive-webhcat/share/hcatalog就会被忽略掉。这显然看起来很怪异,实际上hive只能读取一个HIVE_AUX_JARS_PATH,也就是上面这段怪异代码的主要原因。所以,一个比较好的做法是,我们可以在一个地方集中放置我们的共享jar包,然后在/usr/hdp/current/hive-webhcat/share/hcatalog下面建立一相应的软连接就可以,比如,我们把jar统一放在/usr/lib/share-lib下,然后这样建立软连接:

sudo -u hive ln -s /usr/lib/share-lib/elasticsearch-hadoop-2.1.0.Beta4.jar /usr/hdp/current/hive-webhcat/share/hcatalog/elasticsearch-hadoop-2.1.0.Beta4.jar

##OOZIE中如何指定第三方JAR包

如果你的依赖到第三方JAR的HIVE脚本本身又是一个OOZIE工作流中的一环,那么我们的工作还没有完,如果你在OOZIE配置并引入第三方JAR,那么你的工作流还是会失败。对于OOZIE,引入第三方JAR的方法是oozie-site.xml中的oozie.service.WorkflowAppService.system.libpath, 我们需要配置这个选项,并把相应的JAR包上传到这个目录下。注意,这也是一个HDFS的路径!

Trino是一种用于分布式数据处理的开源框架,支持访问各种数据源。Hive是Hadoop生态系统中的一种数据仓库和分析工具,用于处理大规模结构化数据。在使用Trino访问Hive时,可能会需要添加一些自定义的jar包,以便在查询中使用自定义的函数或者数据类型。 要在Trino中访问Hive添加jar包,通常需要按照以下步骤进行操作: 1. 首先需要启动Trino集群,并且确保能够成功连接到Hive。可以通过修改Trino的配置文件来指定Hive的连接参数。 2. 接下来,需要将自定义的jar包上传到Trino的文件系统中。可以使用Trino提供的命令行工具或者API来上传jar包,例如: ```shell trino-client upload my.jar ``` 3. 上传完成后,需要在Trino中添加自定义jar包的路径。可以通过修改Trino的配置文件或者执行SQL语句来添加路径,例如: ```sql SET session hive.customize-hive-session=true; SET session hive.customize-hive.session-config=my_config.xml; ``` 其中,my_config.xml是自定义的Hive配置文件,需要包含自定义jar包的路径等信息。 4. 最后,可以在Trino中通过SQL语句来使用自定义的函数或者数据类型。例如: ```sql SELECT my_function(col1, col2) FROM my_table; ``` 其中,my_function就是自定义的函数名,col1和col2是需要传递给函数的参数。如果自定义的函数或者数据类型没有成功加载,可能会出现错误提示。 总之,在Trino访问Hive添加jar包时,需要确保掌握基本的Trino和Hive使用方法,并遵循适当的操作流程,才能确保成功完成任务。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Laurence 

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值