远程连接Hive数据库:JDBC与Beeline连接故障排查求助
Hive远程连接故障排查与Kerberos配置疑问
背景与问题
- 从Server A远程连接Server B的Hive数据库,使用JDBC方式时出现
JDBC Hive2 Kerberos Invalid status 21 error错误 - 尝试通过Beeline连接Hive,采用复制依赖Jar包并手动通过Java命令启动的方式,需确认该方式是否正确
- 已收集全所有依赖Jar包,当前启动命令及连接操作如下:
java -Xmx1024m -classpath cron-utils-9.1.6.jar:jackson-databind-2.10.5.1.jar:jackson-dataformat-yaml-2.10.5.jar:jackson-jaxrs-base-2.10.5.jar:jackson-jaxrs-json-provider-2.10.5.jar:jackson-module-jaxb-annotations-2.10.5.jar:re2j-1.2.jar:disruptor-3.3.7.jar:netty-all-4.1.68.Final.jar:javax.annotation-api-1.3.2.jar:log4j-1.2.17-cloudera6.jar:accessors-smart-2.4.7.jar:json-smart-2.4.7.jar:super-csv-2.2.0.jar:ant-launcher-1.10.12.jar:ant-1.10.12.jar:arrow-format-0.8.0.7.1.8.5-1.jar:arrow-memory-0.8.0.7.1.8.5-1.jar:arrow-vector-0.8.0.7.1.8.5-1.jar:avro-1.8.2.7.1.8.5-1.jar:curator-client-4.3.0.7.1.8.5-1.jar:curator-framework-4.3.0.7.1.8.5-1.jar:curator-recipes-4.3.0.7.1.8.5-1.jar:hadoop-annotations-3.1.1.7.1.8.5-1.jar:hadoop-auth-3.1.1.7.1.8.5-1.jar:hadoop-common-3.1.1.7.1.8.5-1.jar:hadoop-hdfs-client-3.1.1.7.1.8.5-1.jar:hadoop-hdfs-3.1.1.7.1.8.5-1.jar:hadoop-yarn-api-3.1.1.7.1.8.5-1.jar:hadoop-yarn-client-3.1.1.7.1.8.5-1.jar:hadoop-yarn-common-3.1.1.7.1.8.5-1.jar:hadoop-yarn-registry-3.1.1.7.1.8.5-1.jar:hadoop-yarn-server-applicationhistoryservice-3.1.1.7.1.8.5-1.jar:hadoop-yarn-server-common-3.1.1.7.1.8.5-1.jar:hadoop-yarn-server-resourcemanager-3.1.1.7.1.8.5-1.jar:hadoop-yarn-server-web-proxy-3.1.1.7.1.8.5-1.jar:hive-beeline-3.1.3000.7.1.8.5-1.jar:hive-classification-3.1.3000.7.1.8.5-1.jar:hive-common-3.1.3000.7.1.8.5-1.jar:hive-jdbc-3.1.3000.7.1.8.5-1.jar:hive-llap-client-3.1.3000.7.1.8.5-1.jar:hive-llap-common-3.1.3000.7.1.8.5-1.jar:hive-llap-common-3.1.3000.7.1.8.5-1-tests.jar:hive-llap-tez-3.1.3000.7.1.8.5-1.jar:hive-metastore-3.1.3000.7.1.8.5-1.jar:hive-serde-3.1.3000.7.1.8.5-1.jar:hive-service-rpc-3.1.3000.7.1.8.5-1.jar:hive-service-3.1.3000.7.1.8.5-1.jar:hive-shims-3.1.3000.7.1.8.5-1.jar:hive-standalone-metastore-3.1.3000.7.1.8.5-1.jar:hive-storage-api-3.1.3000.7.1.8.5-1.jar:hive-shims-0.23-3.1.3000.7.1.8.5-1.jar:hive-shims-common-3.1.3000.7.1.8.5-1.jar:hive-shims-scheduler-3.1.3000.7.1.8.5-1.jar:orc-core-1.5.1.7.1.8.5-1.jar:orc-shims-1.5.1.7.1.8.5-1.jar:parquet-hadoop-bundle-1.10.99.7.1.8.5-1.jar:tez-api-0.9.1.7.1.8.5-1.jar:libthrift-0.16.0.jar:zookeeper-jute-3.5.5.7.1.8.5-1.jar:zookeeper-3.5.5.7.1.8.5-1.jar:bcpkix-jdk15on-1.68.jar:bcprov-jdk15on-1.68.jar:jettison-1.3.4.jar:apache-jsp-9.4.43.v20210629.jar:apache-jstl-9.4.43.v20210629.jar:jetty-annotations-9.4.43.v20210629.jar:jetty-client-9.4.43.v20210629.jar:jetty-http-9.4.43.v20210629.jar:jetty-io-9.4.43.v20210629.jar:jetty-jaas-9.4.43.v20210629.jar:jetty-jndi-9.4.43.v20210629.jar:jetty-plus-9.4.43.v20210629.jar:jetty-rewrite-9.4.43.v20210629.jar:jetty-runner-9.4.43.v20210629.jar:jetty-security-9.4.43.v20210629.jar:jetty-server-9.4.43.v20210629.jar:jetty-servlet-9.4.43.v20210629.jar:jetty-util-ajax-9.4.43.v20210629.jar:jetty-util-9.4.43.v20210629.jar:jetty-webapp-9.4.43.v20210629.jar:jetty-xml-9.4.43.v20210629.jar:websocket-api-9.4.43.v20210629.jar:websocket-client-9.4.43.v20210629.jar:websocket-common-9.4.43.v20210629.jar:websocket-server-9.4.43.v20210629.jar:websocket-servlet-9.4.43.v20210629.jar:javax.el-3.0.0.jar:javassist-3.27.0-GA.jar:objenesis-1.0.jar:asm-analysis-9.1.jar:asm-commons-9.1.jar:asm-tree-9.1.jar:asm-9.1.jar:snakeyaml-1.26.jar:jline-2.12.jar:commons-cli-1.2.jar:commons-io-2.16.0.jar:slf4j-api-2.0.12.jar:hive-exec-3.1.3.jar:woodstox-core-6.5.1.jar:stax2-api-4.2.1.jar:commons-collections-3.2.2.jar -Dhadoop.log.dir=/export/home/logs -Dhadoop.log.file=hadoop.log -Dhadoop.root.logger=INFO,console org.apache.hive.beeline.BeeLine SLF4J(W): No SLF4J providers were found. SLF4J(W): Defaulting to no-operation (NOP) logger implementation SLF4J(W): See https://www.slf4j.org/codes.html#noProviders for further details. Beeline version 3.1.3000.7.1.8.5-1 by Apache Hive beeline> !connect jdbc:hive2://bigdataplatform-gfts-uat.net:10000/otrc_icaps_staging;principal=caps_hive_uat/bdgtr05.net@CTIP.NET;ssl=true
- 连接时出现以下无详细说明的错误,且未配置Kerberos,不清楚配置位置:
Connecting to
jdbc:hive2://bigdataplatform-gfts-uat.net:10000/otrc_caps_staging;principal=caps_hive_uat/bdgtr05.net@CTIP.NET;ssl=true
org/apache/http/client/HttpClient 0:
jdbc:hive2://bigdataplatform-gfts-uat.net (closed)>
解答与排查步骤
1. Beeline手动Jar包启动方式的正确性
这种复制依赖Jar包并通过java -classpath启动Beeline的方式是可行的,本质是手动构建了Beeline运行所需的类路径,和官方安装包通过脚本启动的逻辑一致。但需确保所有依赖Jar的版本与Server B的Hive/Hadoop集群版本完全匹配,避免版本冲突导致的异常。
2. 当前连接错误排查
你遇到的org/apache/http/client/HttpClient错误,大概率是缺少HTTP客户端依赖Jar包(如httpclient-*.jar、httpcore-*.jar)。建议从Server B的Hadoop或Hive安装目录中复制对应版本的这两个Jar包到Server A的Jar目录,并添加到启动命令的-classpath中。
另外,启动时的SLF4J警告是因为缺少SLF4J的实现Jar(如slf4j-log4j12-*.jar),虽不影响连接,但添加后可输出更详细的日志,便于定位问题。
3. Kerberos配置位置与步骤
要通过Kerberos认证连接Hive,需在Server A上完成以下配置:
- 配置krb5.conf文件:
- 从Server B的
/etc/krb5.conf复制该文件到Server A的相同路径,或自定义路径 - 若使用自定义路径,启动Beeline时需添加JVM参数:
-Djava.security.krb5.conf=/自定义路径/krb5.conf
- 从Server B的
- 获取Kerberos票据:
使用kinit命令获取对应主体的票据,示例:
输入密码后,票据会缓存到默认位置,Beeline会自动读取kinit caps_hive_uat@CTIP.NET - 完善连接URL参数:
确保连接URL中明确指定Kerberos认证方式,完整示例:jdbc:hive2://bigdataplatform-gfts-uat.net:10000/otrc_icaps_staging;principal=caps_hive_uat/bdgtr05.net@CTIP.NET;ssl=true;auth=KERBEROS
4. 额外建议
- 优先使用集群官方提供的Hive客户端包,内含预配置脚本和完整依赖,可避免手动收集Jar包的版本冲突问题
- 启动Beeline时添加调试日志参数,如
-Dhive.root.logger=DEBUG,console,输出更详细的日志以定位具体错误
内容的提问来源于stack exchange,提问作者Pat
相关产品推荐
相关产品推荐

