如何在Kubernetes上部署不依赖Databricks Runtime的Delta Lake
非Databricks Runtime环境下Kubernetes适配Delta Lake部署指导
Delta Lake本身为开源项目,完全支持脱离Databricks Runtime独立部署运行,适配Kubernetes的核心逻辑是将Delta Lake依赖集成到自研/开源计算引擎镜像中,再通过Kubernetes调度运行即可,具体部署配置流程如下:
前置准备
- 运行正常的Kubernetes集群,版本建议1.21及以上,提前配置好集群存储类、私有镜像仓库、RBAC权限体系
- 兼容版本的开源Spark安装包,版本匹配规则参考:Delta Lake 2.4.x对应Spark 3.3.x,Delta Lake 3.0.x对应Spark 3.4.x/3.5.x
- Delta Lake核心依赖jar包,可从Maven公共仓库获取对应版本的delta-core、delta-storage组件
部署步骤
1. 构建兼容Delta Lake的计算镜像
- 基于官方开源Spark的Kubernetes基础镜像,将Delta Lake依赖jar包、对应存储介质的Hadoop客户端依赖(如对接S3/MinIO/OSS需要的s3a依赖包)拷贝到镜像内的
$SPARK_HOME/jars目录 - 完成镜像构建后推送至Kubernetes集群可访问的私有镜像仓库
2. 配置Kubernetes集群权限
- 为Spark驱动创建独立的ServiceAccount,配置RBAC权限,允许驱动在集群内创建、管理Executor Pod
- 若使用独立的Hive Metastore作为Delta元数据存储,提前打通Kubernetes集群到Metastore服务的网络访问,将Metastore连接配置预写入Spark配置文件
3. 提交作业验证部署有效性
使用spark-submit提交测试作业到Kubernetes集群,核心配置参考如下:
spark-submit \ --master k8s://https://<K8s APIServer地址>:6443 \ --deploy-mode cluster \ --name delta-validation \ --image <自定义Spark+Delta镜像地址> \ --conf spark.executor.instances=2 \ --conf spark.kubernetes.container.image.pullPolicy=IfNotPresent \ --conf spark.kubernetes.authenticate.driver.serviceAccountName=<创建的Spark ServiceAccount名称> \ # Delta Lake必须配置项 --conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension \ --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog \ local:///opt/spark/examples/jars/your-test-jar.jar
测试作业可包含Delta表创建、数据写入、数据查询三个核心步骤,确认所有流程无报错即部署完成。
生产环境优化建议
- 存储层:测试场景可使用hostPath存储,生产环境建议对接分布式块存储或对象存储,在Spark配置中提前配置存储访问密钥、endpoint等参数即可
- 元数据管理:小规模使用可直接依赖Delta Lake的路径元数据模式,无需单独部署元数据服务;生产环境建议对接独立部署的Hive Metastore或兼容的元数据管理组件
- 资源隔离:为Delta Lake作业单独创建Namespace、配置资源Quota,避免和其他集群作业抢占资源
内容的提问来源于stack exchange,提问作者Deb
相关产品推荐
相关产品推荐

