继续上一篇《基于kubernetes构建spark集群(RC模式)》,沿用上一篇rbac配置,以及PV、PVC配置,本篇将采用Deployment方式
进行部署spark集群,以及增加thriftserver应用服务配置。
1、构建镜像
这里采用spark-2.4.4-bin-hadoop2.7.tar.gz包部署,先解压文件到/opt/spark目录。
(1)将需要第三方扩展包导入/opt/spark/spark-2.4.4 -bin-hadoop2.7/jars目录
#可根据自己实际需要进行导入
elasticsearch-rest-high-level-client-6.7.2.jar
hive-hcatalog-core-1.2.2.jar
kudu-spark2_2.11-1.12.0.jar
mysql-connector-java-5.1.49.jar
spark-cassandra-connector_2.11-2.3.2.jar
alluxio-client-2.3.0.jar
(2)增加nohup命令版本支持
带有alpine的nohup版本不支持’ - ',需要安装coreutils和procps软件包,以获取所需的nohup和ps版本,在/opt/spark/spark-2.4.4-bin-hadoop2.7/kubernetes/dockerfiles/spark/Dockerfile文件增加如下配置并保存:
RUN apk --update add coreutils procps
(3)执行构建spark镜像
进入cd /opt/spark/spark-2.4.4-bin-hadoop2.7目录,执行构建如下。
#加入项目名称:eccp
docker build -t acpimgehub.com.cn/eccp_dev/spark:202107_YD_0714_v3.21 -f kubernetes/dockerfiles/spark/Dockerfile .
2、spark master创建
spark master分为两个部分,一个是类型为ReplicationController的主体,命名为ecc-spark-master.yaml,另一部分为一个service,暴露master的7077端口
给slave使用。
#如下是把thriftserver部署在master节点,则需要暴露thriftserver端口、driver端口、
#blockmanager端口服务,以提供worker节点executor与driver交互.
cat >ecc-spark-master.yaml <<EOF
kind: Deployment
apiVersion: apps/v1
metadata:
name: ecc-spark-master
namespace: ecc-spark-cluster
labels:
app: ecc-spark-master
spec:
replicas: 1
selector:
matchLabels:
app: ecc-spark-master
template:
metadata:
labels:
app: ecc-spark-master
spec:
serviceAccountName: spark-cdp
securityContext: {}
dnsPolicy: ClusterFirst
hostname: ecc-spark-master
containers:
- name: ecc-spark-master
image: acpimgehub.com.cn/eccp_dev/spark:202107_YD_0714_v3.2
imagePullPolicy: IfNotPresent
command: ["/bin/sh"]
args: ["-c","sh /opt/spark/sbin/start-master.sh && tail -f /opt/spark/logs/spark--org.apache.spark.deploy.master.Master-1-*"]
ports:
- containerPort: 7077
- containerPort: 8080
volumeMounts:
- mountPath: /opt/usrjars/
name: ecc-spark-pvc
livenessProbe:
failureThreshold: 9
initialDelaySeconds: 2
periodSeconds: 15
succe