K8s集群中Spark History Server对接非SSL MinIO存储连接被拒问题求助
问题根因分析
- 最常见原因是MinIO HTTP端口缺失:你当前配置的endpoint仅写了
http://someIpv4,未携带MinIO HTTP服务端口,默认会访问80端口,而MinIO默认HTTP端口为9000,端口不匹配直接导致连接被拒绝。 - 配置被全局默认值覆盖:Spark History Server启动时会优先加载
$SPARK_HOME/conf/spark-defaults.conf、系统Hadoop配置文件中的s3a相关参数,你传入的自定义配置可能被旧的SSL、端点配置覆盖。 - 网络策略限制:运行Spark History Server的K8s Pod/节点,未开放到MinIO HTTP端口的网络访问权限,之前正常运行的spark-submit任务可能运行在有权限的网络空间中。
- 依赖包缺失:Spark History Server运行环境的
$SPARK_HOME/jars目录下未放入aws-java-sdk、hadoop-aws依赖包,或版本与正常运行的spark-submit任务依赖版本不一致。
排查步骤
- 首先验证端点连通性:登录到运行History Server的节点/进入对应K8s Pod,执行命令
curl http://<MinIO_IP>:<HTTP端口>/minio/health/live,确认网络连通性正常,端口配置正确。 - 校验生效配置:启动History Server时添加参数
--conf spark.logConf=true,查看启动日志中打印的s3a相关配置项,确认spark.hadoop.fs.s3a.endpoint、spark.hadoop.fs.s3a.connection.ssl.enabled等值与你自定义配置一致,未被全局配置覆盖。 - 检查依赖包:对比History Server运行环境与正常spark-submit任务的依赖包,确认
aws-java-sdk、hadoop-aws版本一致,且已放入Spark的jars加载目录。
解决方案
- 补全Endpoint端口:将配置文件中的
spark.hadoop.fs.s3a.endpoint修改为http://someIpv4:<MinIO_HTTP端口>,默认端口为9000,自行修改过端口的话填对应值即可。 - 避免全局配置干扰:启动时临时指定空的配置目录,命令改为
SPARK_CONF_DIR=/tmp ./start-history-server.sh --properties-file my_conf_file,确保仅加载你传入的自定义配置。 - 补充依赖与配置:将
aws-java-sdk-1.7.4.jar、hadoop-aws-2.7.3.jar放入$SPARK_HOME/jars目录,同时在配置文件中添加spark.hadoop.fs.s3a.impl=org.apache.hadoop.fs.s3a.S3AFileSystem,hadoop-aws 2.7.3版本已包含该类,缺失为环境未正确加载依赖导致。
内容的提问来源于stack exchange,提问作者Koedlt
相关产品推荐
相关产品推荐

