Hive - 如何打印 Hive 服务的类路径

Hive - How to print the classpath of a Hive service

我需要检查 Hive 服务的类路径以查看它在 运行 hive 查询时加载的 jar 的位置。

我想将 hive 的 parquet jar 更新为最新的 parquet jar 以读取新的 parquet 格式数据。

我已经更新了配置单元库位置中的 jars(/usr/hdp/2.5.XX/hive/lib/),但它仍在使用其他位置的旧 jars。

我尝试使用以下命令列出 jars 但没有输出。

hive>list jars;

我尝试使用

添加新的 jar

add jar <'jar file>

但它仍在挑选旧罐子。

有什么方法可以找出用于配置单元服务的类路径或 jar 吗?

要列出 jar 路径,请使用命令 list jars more details

并将 jar 添加到配置单元中的 hive.aux.jars.path 位置-site.xml (add auxiliary jar)

蜂巢样本-site.xml

<property>
<name>hive.aux.jars.path</name>
<value>file://localpath/yourjar.jar</value>
</property>

更新

检查配置单元 hive.aux.jars.path 属性 并查找提及的物理路径。

Add <jar> full path.

如果您确定它选择了旧版本的 Parquet,那么它一定存在于机器上,因此您可以在文件系统中查找所有 parquet jar:find / -name 'parquet-*.jar'

如果你想从计算机上可用的 jar 中检查它使用了哪个特定的 jar,你可以尝试使用 lsof 来达到这个目的。我将从 lsof | grep parquet | grep jar 开始,并在需要时进一步微调过滤。

运行 下面的命令获取配置单元命令位置

which hive

打开 /usr/bin/(您的配置单元位置)

下的 'hive' 文件
vi /usr/bin/hive

您应该会看到如下所示的内容。 备份配置单元文件并在 exec 之前的末尾添加 HADOOP_CLASSPATH 的 echo 命令,如下所示。

#!/bin/bash

if [ -d "/usr/hdp/2.5.0.0-1245/atlas/hook/hive" ]; then
 if [ -z "${HADOOP_CLASSPATH}" ]; then
  export HADOOP_CLASSPATH=/usr/hdp/2.5.0.0-1245/atlas/hook/hive/*
 else
  export HADOOP_CLASSPATH=${HADOOP_CLASSPATH}:/usr/hdp/2.5.0.0-1245/atlas/hook/hive/*
 fi
fi

...

if [ -z "${HADOOP_CLASSPATH}" ]; then
 export HADOOP_CLASSPATH=${HCATALOG_JAR_PATH}
else
 export HADOOP_CLASSPATH=${HADOOP_CLASSPATH}:${HCATALOG_JAR_PATH}
fi

####### Prints hadoop classpath

echo "Classpath=$HADOOP_CLASSPATH"

exec "${HIVE_HOME}/bin/hive.distro" "$@"

运行 显示类路径的 hive 命令。

通过将新的 parquet jar 位置添加到环境变量中解决了 parquet 问题 'HADOOP_CLASSPATH'