EMR支持CRD和spark-submit两种方式提交作业。本文为您介绍如何通过kubectl提交作业。
前提条件
已在E-MapReduce on ACK控制台创建Spark集群,详情请参见快速入门。
方式一:使用CRD方式提交作业(推荐)
- 通过kubectl连接Kubernetes集群,详情请参见通过kubectl工具连接集群。
- 新建spark-pi.yaml文件,文件内容如下。
apiVersion: "sparkoperator.k8s.io/v1beta2"
kind: SparkApplication
metadata:
name: spark-pi-simple
spec:
type: Scala
sparkVersion: 3.1.1
mainClass: org.apache.spark.examples.SparkPi
mainApplicationFile: "local:///opt/spark/examples/jars/spark-examples_2.12-3.1.1.jar"
arguments:
- "1000"
driver:
cores: 1
coreLimit: 1000m
memory: 4g
executor:
cores: 1
coreLimit: 1000m
memory: 8g
memoryOverhead: 1g
instances: 1
本文示例中的参数描述,请参见spark-on-k8s-operator。
说明
- 文件名您可以自定义,本文以spark-pi.yaml为例介绍。
- 版本以Spark 3.1.1为例,其它版本时请修改sparkVersion和mainApplicationFile的配置。
- 执行如下命令,提交作业。
kubectl apply -f spark-pi.yaml --namespace <集群对应的namespace>
本文示例代码中的<集群对应的namespace>
,需要替换为集群的命名空间,您可以登录E-MapReduce on ACK控制台,在集群详情页面查看。
返回如下信息。
sparkapplication.sparkoperator.k8s.io/spark-pi-simple created
说明 spark-pi-simple
为本示例提交任务后的作业名。
- 可选:您可以在集群详情页面的作业区域,查看已创建的作业信息。
方式二:使用spark-submit方式提交作业
- 通过kubectl连接Kubernetes集群,详情请参见通过kubectl工具连接集群。
- 新建spark-submit-pod.yaml文件,文件内容如下。
apiVersion: v1
kind: Pod
metadata:
name: spark-submit
spec:
serviceAccount: spark
terminationGracePeriodSeconds: 0
imagePullSecrets:
- name: emr-image-regsecret
containers:
- name: spark-submit-container
# 以下是Spark 3.1.1版本的默认镜像,您可以根据实际情况修改。
# 以下以cn-hangzhou为例,请替换为您创建集群所在的Region。
image: registry-vpc.cn-hangzhou.aliyuncs.com/emr/spark-py:emr-3.1.1-latest
imagePullPolicy: Always
command: ["/bin/sh", "-c", "tail -f /dev/null"]
env:
- name: SPARK_CONF_DIR
value: /etc/spark/conf
# 将集群配置信息挂载到Gateway的环境中。
volumeMounts:
- name: config-volume
mountPath: /etc/spark/conf
- name: bigboot-config-volume
mountPath: /usr/lib/b2smartdata-current/conf
volumes:
- name: config-volume
configMap:
name: emr-spark-defaults-conf
- name: bigboot-config-volume
configMap:
name: bigboot-config
说明
- 文件名您可以自定义,本文以spark-submit-pod.yaml为例介绍。
- 镜像信息,需要根据您的地域和Spark版本替换。下面以杭州地域为例,image取值如下:
- Spark 2.4.5版本:registry-vpc.cn-hangzhou.aliyuncs.com/emr/spark-py:emr-2.4.5-latest
- Spark 2.4.7版本:registry-vpc.cn-hangzhou.aliyuncs.com/emr/spark-py:emr-2.4.7-latest
- Spark 3.1.1版本:registry-vpc.cn-hangzhou.aliyuncs.com/emr/spark-py:emr-3.1.1-latest
- 执行以下命令,使用步骤2新建的文件创建一个Gateway pod。
kubectl apply -f spark-submit-pod.yaml -n <集群对应的namespace>
- 执行以下命令,提交作业。
- 可选:您可以在集群详情页面,查看已创建的作业信息。