You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

K8s SparkOperator环境下Spark任务连接HBase失败求助

问题描述

本地运行Spark脚本从HBase读取数据并打印一切正常,但通过K8s的Spark Operator提交SparkApplication时,Driver报连接拒绝错误:

Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect
java.net.ConnectException: Connection refused

使用的SparkApplication YAML配置如下:

apiVersion: "sparkoperator.k8s.io/v1beta2"
kind: SparkApplication
metadata:
  name: hbase-v1
  namespace: spark-jobs
spec:
  type: Python
  pythonVersion: "3"
  mode: cluster
  image: "yami1012/hbase-spark:latest"
  imagePullPolicy: Always
  mainApplicationFile: local:///opt/spark/code_hbase/spark.py
  sparkVersion: "3.3.2"
  restartPolicy:
    type: OnFailure
    onFailureRetries: 3 
    onFailureRetryInterval: 10
    onSubmissionFailureRetries: 5
    onSubmissionFailureRetryInterval: 20
  sparkConf:
    spark.driver.host: "localhost"
  driver:
    hostNetwork: true
    cores: 1
    coreLimit: "1200m"
    memory: "512m"
    labels:
      version: 3.1.1
    serviceAccount: spark
  executor:
    cores: 1
    instances: 1
    memory: "512m"
    labels:
      version: 3.1.1

单独用host网络运行镜像执行脚本正常,尝试创建Headless Service未解决问题。

解决方案

1. 移除错误的spark.driver.host配置

集群模式下,Spark Driver运行在K8s Pod内,将spark.driver.host设为localhost会导致Executor尝试连接自身的localhost,无法与Driver通信,同时干扰Driver访问HBase的网络路径。直接删除该配置,让Spark自动通过K8s服务发现机制获取Driver地址。

2. 确保HBase配置正确传入Spark Pod

Spark需要读取hbase-site.xml连接HBase集群,需确保配置文件能被Driver和Executor Pod加载:

  • 若配置已打包进镜像,确认路径为/opt/spark/conf/hbase-site.xml(Spark默认加载该目录下的配置)
  • 若使用ConfigMap挂载,在SparkApplication YAML中添加如下配置:
    spec:
      driver:
        volumes:
          - name: hbase-config
            configMap:
              name: hbase-site-config # 替换为你的ConfigMap名称
        volumeMounts:
          - name: hbase-config
            mountPath: /opt/spark/conf/hbase-site.xml
            subPath: hbase-site.xml
      executor:
        volumes:
          - name: hbase-config
            configMap:
              name: hbase-site-config
        volumeMounts:
          - name: hbase-config
            mountPath: /opt/spark/conf/hbase-site.xml
            subPath: hbase-site.xml
    
    重点检查hbase-site.xml中的hbase.zookeeper.quorum配置,需填写K8s中HBase ZooKeeper集群的可访问地址(如ZooKeeper Service名称+端口,格式:zk-service-name.default.svc.cluster.local:2181)

3. 统一Driver和Executor的网络模式

当前仅Driver开启hostNetwork: true,Executor未配置,导致两者网络环境不一致:

  • 要么给Executor也添加hostNetwork: true配置,确保两者都使用宿主机网络访问HBase
  • 要么都关闭hostNetwork,依赖K8s集群网络和服务发现访问HBase

4. 验证HBase网络连通性

进入Driver Pod内部,测试HBase ZooKeeper端口的连通性:

# 替换为你的ZooKeeper地址
telnet hbase-zk-service.spark-jobs.svc.cluster.local 2181

若连接失败,检查:

  • K8s网络策略是否允许spark-jobs namespace访问HBase所在namespace的服务
  • HBase集群所在网络是否对K8s节点开放相应端口(2181、16000等)

5. 确认Spark ServiceAccount权限

确保spark ServiceAccount拥有足够的权限访问集群内的服务和资源,比如允许创建Driver Service、访问ConfigMap等。

内容的提问来源于stack exchange,提问作者yami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 19:40:25