【发布时间】:2015-08-04 07:13:54
【问题描述】:
有什么方法可以永久添加 hive jar,而不是在 hive shell 中的会话级别添加?
任何帮助将不胜感激
【问题讨论】:
-
您是指用于自定义 UDF 的 JAR 吗?
-
查询所需的任何 jar ..like csv-serde jar 用于将 csv 文件加载到表中
有什么方法可以永久添加 hive jar,而不是在 hive shell 中的会话级别添加?
任何帮助将不胜感激
【问题讨论】:
在 hiveserver2 主机中,创建一个类似 /var/lib/hive 的位置,并在该文件夹中添加所有必要的 jar。编辑 hive-site.xml 并在属性 hive.aux.jars.path
中提及所有这些 jar例如:
ADD JAR /home/amal/hive/amaludf.jar
ADD JAR /home/amal/hive/amaludf2.jar
您可以为所有会话定义它,而不是在每个会话中使用上述命令。
在 hiveserver 主机中创建用于存储这些 jar 的位置。
mkdir /var/lib/hive
将所有这些 jars 添加到该目录
在hive-site.xml中设置属性
<property>
<name>hive.aux.jars.path</name>
<value>/var/lib/hive</value>
</property>
修改后重启hiveserver2。
您也可以指定单个 jar 的路径,而不是创建一个目录并放置所有 jar。唯一的条件是所有这些 jar 都应该存在于 hiveserver 主机中。
例如:
<property>
<name>hive.aux.jars.path </name>
<value>file:///home/amal/hive/udf1.jar,file:///usr/lib/hive/lib/hive-hbase-handler.jar</value>
</property>
【讨论】:
您必须将 jar 放入 hadoop 的 lib 文件夹或 all 节点中的 hive。
【讨论】:
这些可以分两步完成
- Hive 客户端应在所有节点中可用。
- 应在 hadoop-env.sh CLASSPATH 中定义 Hive Live 位置,并应在整个 Hadoop Clueter 中更新相同的文件。
{hadoop-env.sh 应该使用 hive 的 CLASSPATH 和用户定义的自定义 jar 的其他位置以及整个集群中可用的公共位置进行更新}
如果更改后无法正常工作,您还需要重新启动 hive/hadoop 才能生效。
【讨论】:
在 $HIVE_HOME 中创建名为 auxlib 的目录,将所有 jar 放入此目录并重新启动 hive 服务器。运行ps -ef | grep hive这个命令列出hive进程,搜索hive.aux.jars.path,你会看到你所有的jars都将在这个hiveconf中列出。
【讨论】: