Trino+Hive+Minio执行建Schema SQL遇SSL异常求助
Trino+Hive Metastore+Minio SSL异常排查建议
问题场景
执行以下SQL时触发SSL异常:
create schema minio.ukhd with (location = 's3a://bronze/ukhd');
报错核心信息:
Unable to execute HTTP request: Unsupported or unrecognized SSL message
完整堆栈片段:
org.jkiss.dbeaver.model.sql.DBSQLException: SQL Error [65536]: Query failed (#20240627_164652_00000_wnvna): Unable to execute HTTP request: Unsupported or unrecognized SSL message at org.jkiss.dbeaver.model.impl.jdbc.exec.JDBCStatementImpl.executeStatement(JDBCStatementImpl.java:133) ... Caused by: javax.net.ssl.SSLException: Unsupported or unrecognized SSL message ...
环境配置说明
- Minio使用正规CA签发证书,已通过Dockerfile将证书导入Trino和Hive的Java信任库:
RUN mkdir /opt/trino RUN mkdir /opt/trino/certs COPY public.crt /opt/trino/certs/public.crt RUN $JAVA_HOME/bin/keytool -import -trustcacerts -alias miniocert -file /opt/trino/certs/public.crt -keystore $JAVA_HOME/lib/security/cacerts -storepass changeit -noprompt
- Trino
config.properties关键配置:
coordinator=true node-scheduler.include-coordinator=true http-server.https.enabled=true http-server.https.port=8443 http-server.http.port=8080 http-server.https.keystore.path=/usr/lib/jvm/jdk-jdk-22.0.1+8/lib/security/cacerts http-server.https.keystore.key=changeit discovery.uri=http://trino:8080 log.path=/var/log/trino/server.log http-server.log.path=/var/log/trino/http-request.log
- Hive
metastore-site.xmlSSL相关配置:
<property> <name>hive.server2.use.SSL</name> <value>true</value> </property> <property> <name>hive.server2.ssl.keystore.path</name> <value>/usr/local/openjdk-8/lib/security/cacerts</value> </property> <property> <name>hive.server2.ssl.keystore.password</name> <value>changeit</value> </property> <property> <name>hive.metastore.ssl.truststore.path</name> <value>/usr/local/openjdk-8/lib/security/cacerts</value> </property> <property> <name>hive.metastore.ssl.truststore.password</name> <value>changeit</value> </property>
- 部署信息:Docker环境,镜像版本为minio:latest(450)、apache/hive:4.0.0、trinodb/trino:latest、mysql:8.0.28;依赖库版本hadoop-aws-3.3.0.jar、aws-java-sdk-bundle-1.12.750.jar
排查方向建议
- 确认Minio连接协议与端口匹配:该报错通常是SSL层收到非SSL消息,核心原因是Trino/Hive尝试用HTTPS连接Minio的HTTP端口,或反之。检查Minio端口映射:默认SSL端口9001、HTTP端口9000,确认Trino的Minio catalog配置中
endpoint是否指定了正确的协议和端口(如https://minio:9001而非http://minio:9000)。 - 验证证书导入有效性:分别进入Trino和Hive的Docker容器,执行
keytool -list -keystore $JAVA_HOME/lib/security/cacerts -storepass changeit | grep miniocert,确认证书成功导入对应Java环境的信任库。注意Trino用JDK22、Hive用OpenJDK8,需检查各自$JAVA_HOME路径下的cacerts文件。 - 检查Trino Minio Catalog配置:确认catalog配置文件(如
minio.properties)中SSL参数正确,示例:
排查是否存在hive.s3.ssl.enabled=true hive.s3.endpoint=https://minio:9001 hive.s3.path-style-access=truehive.s3.ssl.enabled=false这类冲突参数。 - 配置Hive Metastore与Minio的SSL连接:在Hive的
core-site.xml中添加S3相关SSL参数:
确保Hive的S3客户端指向Minio的SSL端口和协议。<property> <name>fs.s3a.connection.ssl.enabled</name> <value>true</value> </property> <property> <name>fs.s3a.endpoint</name> <value>https://minio:9001</value> </property> - 测试Minio证书信任性:在Trino容器内执行
curl -v https://minio:9001,验证证书是否能被正常信任,排查证书链缺失或证书本身的问题。 - 检查网络与端口连通性:确认Docker容器间端口映射正确,Minio的SSL端口在容器网络中可达,无防火墙或网络策略拦截;同时排查容器内是否存在端口冲突导致服务未监听预期端口。
- 排查SDK版本兼容性:当前hadoop-aws-3.3.0与aws-java-sdk-bundle-1.12.750可能存在版本不匹配,尝试使用官方推荐的组合(如hadoop-aws 3.3.0对应aws-java-sdk-bundle 1.11.901),避免版本冲突引发的SSL握手异常。
内容的提问来源于stack exchange,提问作者Joe Ingle
相关产品推荐
相关产品推荐

