Kubernetes版Spark集群的配置与使用

背景

在云计算和大数据时代,容器化技术和Kubernetes(K8s)已成为构建和管理大规模数据处理平台的关键。传统应用部署常面临环境不一致、资源利用率低和维护成本高的问题,而容器化通过将应用和依赖打包在轻量级容器中,提供了一致的运行环境,大幅简化了开发和运维流程。

Kubernetes作为强大的容器编排平台,具备自动化部署、扩展和管理容器应用的能力,其自我修复、负载均衡和滚动更新等特性让应用保持高可用性。因此,Kubernetes非常适合于支持计算密集型的Spark集群,使得用户能够高效地部署和管理Spark,充分发挥计算和存储能力。

SuperMap iServer处理自动化服务(GPA),提供了简洁的建模页面,无需编写代码,就能实现数据处理与分析过程的自动化。通过简单的拖拽方式搭建业务流程模型,显著提高工作效率,大幅降低开发成本。

本文将结合SuperMap GPA产品,探讨如何在Kubernetes上配置和使用Spark集群,希望帮助读者理解Kubernetes与Spark的结合及其最佳实践。

一、准备工作

部署Spark on K8S集群前,需要准备如下环境与镜像:

软件版本描述备注
Kubernetes1.20.0

Kubernetes基础环境,可选单节点或集群部署

SuperMap提供的Kubernetes离线部署方式

helm

3.8.0

软件包管理器,用于部署Spark

helm安装包

helm安装教程

bitnami/spark

3.3.4

Spark镜像

Spark镜像包

Kuboard

3.5.2.7Kubernetes可视化管理平台Kuboard安装教程

iObjects_bin

与iServer版本一致

iObjectsbin包,可从iServer\support\objectsjava\bin目录获取

-

Spark容器依赖项

-

用于确保GPA大数据任务的正常提交与执行,需要放在iObjects_bin目录中

GPA调用Spark必要依赖项

二、部署 Spark 集群

1、添加 bitnami 仓库(公网环境下配置

helm repo add bitnami https://charts.bitnami.com/bitnami

2、保存 bitnami/spark chart 模板(内网环境使用需操作)

//下载模板
helm pull bitnami/spark --untar

//打包模板
helm package spark

3、自定义 spark.yaml

global:
  storageClass: "nfs"
ingress:
  enabled: true
  ingressClassName: "nginx"
  hostname: "supermap.spark.com"
master:
  configOptions:
    -Dspark.ui.reverseProxy=true
    -Dspark.ui.reverseProxyUrl=http://supermap.spark.com
worker:
  configOptions:
    -Dspark.ui.reverseProxy=true
    -Dspark.ui.reverseProxyUrl=http://supermap.spark.com

4、在 Kuboard 中添加 storageClass 、ingress

① storageClass 配置:

② ingress 配置:

5、在 Kuboard 中添加 spark 命名空间

6、开始部署 Spark 集群

//有bitnami仓库的公网环境
helm install spark bitnami/spark -f spark.yaml -n spark

//内网环境
helm install spark ./spark-9.2.9.tgz -f spark.yaml -n spark

 7、修改 Master 和 Worker 的镜像配置

8、修改 spark-master-svc 为 NodePort 访问

9、为 Master 和 Worker 的 Dspark.ui.reverseProxyUrl 加上端口

 10、为Master和Worker添加iObjects_bin挂载

请确保spark所需依赖项已拷贝至iObjects_bin目录中

11、通过访问 Spark 主页,验证 Spark 的运行状态

三、使用 Spark 集群(以 SuperMap iServer GPA 为例)

此种方式配置的 Spark 集群仅支持 Cluster 模式

1、配置 K8S 版 Spark 专用【spark环境设置】,v11.2.0+版本可配置“集群环境参数”方便使用

  • spark.executor.extraLibraryPath
    • /usr/java/packages/lib
  • spark.driver.extraLibraryPath
    • /usr/java/packages/lib
  • spark.driver.extraJavaOptions
    • --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.base/jdk.internal.ref=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/sun.nio.cs=ALL-UNNAMED --add-opens=java.base/sun.security.action=ALL-UNNAMED --add-opens=java.base/sun.util.calendar=ALL-UNNAMED --add-opens=java.security.jgss/sun.security.krb5=ALL-UNNAMED -Duser.language=zh -Duser.country=CN
  • spark.executor.extraJavaOptions
    • --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.base/jdk.internal.ref=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/sun.nio.cs=ALL-UNNAMED --add-opens=java.base/sun.security.action=ALL-UNNAMED --add-opens=java.base/sun.util.calendar=ALL-UNNAMED --add-opens=java.security.jgss/sun.security.krb5=ALL-UNNAMED

附示例模型:https://download.youkuaiyun.com/download/qq_46005336/90109867

2、执行模型任务,验证Spark可用性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃辣我第一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值