目录

弹性计算平台-容器内运行PySpark任务

目录

概述

本文是笔者在前司建设的基于Kubernetes构建的弹性计算平台集成Spark的相关使用文档,我们是国内最早基于Kubernetes运行Spark计算任务的团队之一

弹性计算从一开始就支持 Spark 计算,同时为了更熟悉 Python API 的同学,我们也提供了 PySpark 提交任务的配置页。然而 Spark 的配置 SparkConf 实在太多了,而在与平台结合的时候,我们针对 Kubernetes 集群也默认配置了一些 SparkConf 作为基础配置,本文详细介绍一下,弹性计算平台在运行 PySpark 之前,到底加入了哪些配置参数。

SparkConf

下面的 spark-submit 命令是通过弹性计算 PySpark 前端页面配置后生成的最终的提交命令。可以具体看到,哪些参数是被系统自动加上的。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.91-1.b14.el6.x86_64/jre/bin/java -cp /opt/spark/conf/:/opt/spark/jars/* org.apache.spark.deploy.SparkSubmit \
--master k8s://https://kubernetes.default.svc \
--deploy-mode cluster \
// TenC指定Executor环境变量
--conf spark.kubernetes.executorEnv.TENC_FILELOG_PATHS=/var/log/spark-specified.log \
// TenC指定了rpc超时的时间为 3600s
--conf spark.rpc.askTimeout=3600 \
--conf spark.kubernetes.client.watch.reconnectLimit=10 \
// TenC指定全局network超时的参数
--conf spark.network.timeout=3600 \
// TenCannotation是k8s的概念network.cni/ingress-bandwidth为120Mi
--conf spark.kubernetes.driver.annotation.network.cni/ingress-bandwidth=120Mi \
--conf spark.kubernetes.initcontainer.docker.image=hub.oa.com/public/spark-2-2-init:v1.0.1 \
--conf spark.kubernetes.executor.docker.image=hub.oa.com/public/pyspark-2-2-executor:v1.0.5 \
--conf spark.kubernetes.driver.annotation.tencent.cr/containertype=native \
--conf spark.kubernetes.executor.annotation.network.cni/networname=flannel \
--conf spark.kubernetes.executor.annotation.tencent.cr/storageopt=size_softlimit=100G,size=120G,inode_softlimit=2000000,inode=2200000 \
--conf spark.core.connection.ack.wait.timeout=3600 \
--conf spark.worker.cleanup.enabled=true \
--conf spark.kubernetes.driver.pod.name=pyspark-631534afa01e9797-driver-dpruc0u4kjbb \
--conf spark.executor.instances=1 \
--conf spark.kubernetes.executor.label.spark-app-id=f0a3ac66-ee6a-11e9-8cc0-0a5806103fcb \
--conf spark.kubernetes.client.request.timeout=30000 \
--conf spark.executor.memory=4096M \
--conf spark.driver.memory=4096M \
--conf spark.driver.cores=1 \
--conf spark.executor.heartbeatInterval=20s \
--conf spark.kubernetes.driver.annotation.network.cni/networkname=flannel \
--conf spark.app.name=pyspark-631534afa01e9797 \
--conf spark.executor.cores=1 \
--conf spark.kubernetes.driverEnv.TENC_FILELOG_PATHS=/var/log/spark-specified.log \
--conf spark.kubernetes.submission.waitAppCompletion=true \
--conf spark.kubernetes.driver.label.spark-app-id=f0a3ac66-ee6a-11e9-8cc0-0a5806103fcb \
--conf spark.kubernetes.executor.label.tencent.cr/taskid=f0a3ac66-ee6a-11e9-8cc0-0a5806103fcb \
--conf spark.kubernetes.executor.annotation.tencent.cr/containertype=native \
--conf spark.kubernetes.executor.annotation.network.cni/ingress-bandwidth=120Mi \
--conf spark.kubernetes.driver.annotation.tencent.cr/storageopt=size_softlimit=100G,size=120G,inode_softlimit=2000000,inode=2200000 \
--conf spark.rpc.lookupTimeout=3600 \
--conf spark.kubernetes.executor.annotation.network.cni/egress-bandwidth=120Mi \
--conf spark.app.id=f0a3ac66-ee6a-11e9-8cc0-0a5806103fcb \
--conf spark.kubernetes.driver.annotation.network.cni/egress-bandwidth=120Mi \
--conf spark.kubernetes.driver.label.appid=312 \
--conf spark.kubernetes.executor.label.appid=312 \
--conf spark.storage.blockManagerSlaveTimeoutMs=36000000 \
// TenC每一轮申请分配的Executor数目的最大限值
--conf spark.kubernetes.allocation.batch.size=20 \
// TenC默认会记录Spark任务的eventLog \
--conf spark.eventLog.enabled=true \
--conf spark.eventLog.compress=true \
--conf spark.eventLog.dir=hdfs://sh-spark.hdfs.cr.hdfs.db:9000/yongyu/history \
--conf spark.kubernetes.driver.label.tencent.cr/taskid=f0a3ac66-ee6a-11e9-8cc0-0a5806103fcb \
--conf spark.kubernetes.driver.label.platform=tenflow \
--conf spark.kubernetes.driver.docker.image=hub.oa.com/public/pyspark-2-2-driver:v1.0.6 \
// TenC默认配置
--conf spark.ui.showConsoleProgress=false \
// 用户自定义
--class org.apache.spark.examples.SparkPi \
// TenC根据用户信息配置
--kubernetes-namespace runzhliu
警告
本文最后更新于 2017年2月1日,文中内容可能已过时,请谨慎参考。