为了账号安全,请及时绑定邮箱和手机立即绑定

无法在客户端模式 Kubernetes 下运行 pyspark 作业

无法在客户端模式 Kubernetes 下运行 pyspark 作业

ITMISS 2023-12-09 16:46:46
我正在使用以下指南在我的 aks Kubernetes 集群中部署 pyspark:https://towardsdatascience.com/ignite-the-spark-68f3f988f642http://blog.brainlounge.de/memoryleaks/getting-started-with-spark-on-kubernetes/我已经按照上面链接中的说明部署了我的驱动程序吊舱:apiVersion: apps/v1kind: Deploymentmetadata:  namespace: spark  name: my-notebook-deployment  labels:    app: my-notebookspec:  replicas: 1  selector:    matchLabels:      app: my-notebook  template:    metadata:      labels:        app: my-notebook    spec:      serviceAccountName: spark      containers:      - name: my-notebook        image: pidocker-docker-registry.default.svc.cluster.local:5000/my-notebook:latest        ports:          - containerPort: 8888        volumeMounts:          - mountPath: /root/data            name: my-notebook-pv        workingDir: /root        resources:          limits:            memory: 2Gi      volumes:        - name: my-notebook-pv          persistentVolumeClaim:            claimName: my-notebook-pvc---apiVersion: v1kind: Servicemetadata:  namespace: spark  name: my-notebook-deploymentspec:  selector:    app: my-notebook  ports:    - protocol: TCP      port: 29413  clusterIP: None然后我可以使用以下代码创建 Spark 集群:import osfrom pyspark import SparkContext, SparkConffrom pyspark.sql import SparkSession# Create Spark config for our Kubernetes based cluster managersparkConf = SparkConf()sparkConf.setMaster("k8s://https://kubernetes.default.svc.cluster.local:443")sparkConf.setAppName("spark")sparkConf.set("spark.kubernetes.container.image", "<MYIMAGE>")sparkConf.set("spark.kubernetes.namespace", "spark")sparkConf.set("spark.executor.instances", "7")sparkConf.set("spark.executor.cores", "2")sparkConf.set("spark.driver.memory", "512m")sparkConf.set("spark.executor.memory", "512m")sparkConf.set("spark.kubernetes.pyspark.pythonVersion", "3")据我所知,我正在尝试在客户端节点中运行我的 Spark 集群,jupyter pod 充当主节点并创建从属节点,当我在 jupyter pod 内运行代码时它可以工作,但当其他 pod 尝试连接它时它可以工作。我该如何解决这个问题?
查看完整描述

1 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

我遇到了类似的问题,最后我手动创建了客户端 Pod 所需的服务。就我而言,我想部署不支持集群模式的 Spark-thrift 服务器。


首先,您需要创建 Spark blockManager 和驱动程序本身所需的服务


apiVersion: v1

kind: Service

metadata:

  name: spark-thrift

spec:

  type: ClusterIP

  ports:

    - protocol: TCP

      port: 4000

      name: driver

    - protocol: TCP

      port: 4001

      name: block-manager

现在你可以像这样启动你的驱动程序:


apiVersion: apps/v1beta1

kind: Deployment

metadata:

  name: spark-thrift

  labels:

    app: spark-thrift

spec:

  template:

    spec:

      containers:

        - name: spark-thrift-driver

          image: image:latest

          command:

            - /opt/spark/bin/spark-submit

          args:

            - "--name"

            - "spark-thrift"

            - "--class"

            - "org.apache.spark.sql.hive.thriftserver.HiveThriftServer2"

            - "--conf"

            - "spark.driver.port=4000"

            - "--conf"

            - "spark.driver.host=spark-thrift"

            - "--conf"

            - "spark.driver.bindAddress=0.0.0.0"

            - "--conf"

            - "spark.driver.blockManager.port=4001"

          imagePullPolicy: Always

          ports:

            - name: driver

              containerPort: 4000

            - name: blockmanager

              containerPort: 4001

这里的重要论点是

  • “spark.driver.host=spark-thrift” - 指向主机(因此是服务名称)

  • “spark.driver.port=4000” - 指向驱动程序端口

  • “spark.driver.bindAddress=0.0.0.0” - 这是spark不使用spark-thrift作为主机名所必需的,否则会导致错误

  • “spark.driver.blockManager.port=4001” - 指向 blockManager 端口

显然,这不是一个工作 Pod 的完整示例,您仍然需要在规范中配置您自己的端口和卷。


查看完整回答
反对 回复 2023-12-09
  • 1 回答
  • 0 关注
  • 48 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信