版本信息
jdk11
hadoop-3.4.0-arm
hive4.0
遇到的问题
1. java.lang.NoSuchMethodError: java.nio.ByteBuffer.position(I)Ljava/nio/ByteBuffer
使用的 jdk8 没有这个,升级到 jdk11
2. hive 使用jdk11 启动错误
提示Exception in thread"main" java.lang.ClassCastException: java.base/jdk.internal.loader.ClassLoaders$AppClassLoader cannot be cast to java.base/java.net.URLClassLoader
使用 hive4.0 及以上版本
hive3.x 修改 hive 的 jdk
hive 可能是读取的 Hadoop 里面 的 信息,手动修改环境变量还是 使用的 jdk11
jdk 的信息, 环境变量 /opt/bigdata/java/current
1 | [root@test-63 java]# pwd |
修改 hive 文件 /opt/bigdata/hive/current/bin/hive
默认指向 /opt/bigdata/java/jdk-11.0.23 使用 hive 后指向 /opt/bigdata/java/jdk1.8.0_321
新加内容1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46if [ -z "$HIVE_JAVA_SWITCHED" ]; then
# 保存当前的软连接目标
CURRENT_JAVA=/opt/bigdata/java/jdk-11.0.23
# 创建指向 java2 的软连接
ln -sfn /opt/bigdata/java/jdk1.8.0_321 /opt/bigdata/java/current
# 检查软连接是否成功更新
if [ "$(readlink -f /opt/bigdata/java/current)" != "/opt/bigdata/java/jdk1.8.0_321" ]; then
echo "Failed to update the Java soft link to java2"
exit 1
fi
# 设置 JAVA_HOME 和 PATH
export JAVA_HOME=/opt/bigdata/java/current
export PATH=$JAVA_HOME/bin:$PATH
export HIVE_HOME=/opt/bigdata/hive/current
# 标记已切换 Java 版本,防止递归
export HIVE_JAVA_SWITCHED=true
# 定义恢复函数
function restore_java {
ln -sfn /opt/bigdata/java/jdk-11.0.23 /opt/bigdata/java/current
if [ "$(readlink -f /opt/bigdata/java/current)" != "/opt/bigdata/java/jdk-11.0.23" ]; then
echo "Failed to restore the Java soft link to the original version"
exit 1
fi
}
# 捕捉各种退出信号以便恢复 Java 软链接
trap restore_java EXIT HUP INT TERM
# 启动 Hive 并捕获其退出状态
$HIVE_HOME/bin/hive "$@"
HIVE_EXIT_STATUS=$?
# 明确调用恢复函数,恢复软链接
restore_java
# 退出脚本时返回 Hive 的退出状态
exit $HIVE_EXIT_STATUS
fi
# 下面是原有的 Hive 启动脚本内容...