K8s客户端模式下Spark无法创建Delta Log目录问题排查
问题:K8s客户端模式下Spark无法创建Delta Log目录
我在K8s上以客户端模式运行Spark 3.1.2(共8个worker),配置NFS存储用于更新Delta文件,但执行写入时抛出权限相关错误,仅_delta_log目录无法创建,目录内的parquet文件可正常生成。
错误信息
java.io.IOException: Cannot create file:/spark-nfs/v_data/delta/table_1/_delta_log at org.apache.spark.sql.delta.DeltaLog.ensureLogDirectoryExist(DeltaLog.scala:290)
触发代码
df.write.partitionBy("Cod").format('delta').save(path="/spark-nfs/v_data/delta/table_1/", mode='overwrite')
环境配置
- Spark版本:3.1.2(K8s客户端模式,8个worker)
- Delta版本:
io.delta:delta-core_2.12:1.0.0 - Spark配置:
self.conf = { "spark.network.timeout": 36000000, "spark.executor.heartbeatInterval": 36000000, "spark.storage.blockManagerSlaveTimeoutMs": 36000000, "spark.driver.maxResultSize": "30g", "spark.sql.session.timeZone": "UTC", "spark.driver.extraJavaOptions": "-Duser.timezone=GMT", "spark.executor.extraJavaOptions": "-Duser.timezone=GMT", "spark.driver.host": pod_ip, "spark.driver.memory": executor_memory, "spark.memory.offHeap.enabled": True, "spark.memory.offHeap.size": executor_memory, "spark.sql.legacy.parquet.int96RebaseModeInRead" : "CORRECTED", "spark.sql.legacy.parquet.int96RebaseModeInWrite" : "CORRECTED", "spark.sql.legacy.parquet.datetimeRebaseModeInRead" : "CORRECTED", "spark.sql.legacy.parquet.datetimeRebaseModeInWrite" : "CORRECTED", "fs.permissions.umask-mode": "777" }
关键现象
仅_delta_log目录无法创建,目录内的parquet文件可正常生成。
排查与解决方法
修正NFS路径的URI格式
客户端模式下,executor运行在独立pod中,file:/协议指向的是本地pod的文件系统,无法跨pod共享NFS存储。需去掉file:/前缀,直接使用NFS在所有pod中一致挂载的绝对路径,或者改用HDFS兼容的存储协议(如hdfs://)。解决NFS权限与并发冲突
- 提前手动在NFS存储上创建
/spark-nfs/v_data/delta/table_1/_delta_log目录,并设置777权限; - 检查NFS服务器的export配置,确保添加了
no_root_squash参数(避免root用户被映射为nobody导致权限不足); - 添加Spark配置
spark.delta.log.cacheSize=0,禁用Delta日志缓存,减少并发创建目录的冲突概率。
- 提前手动在NFS存储上创建
验证Delta与Spark版本兼容性
Delta 1.0.0与Spark 3.1.2理论兼容,但部分环境下存在目录创建逻辑bug,可尝试升级Delta版本至1.1.0(官方兼容Spark 3.1.x)。调整Spark文件系统配置
添加Spark配置spark.hadoop.fs.file.impl=org.apache.hadoop.fs.LocalFileSystem,确保使用HDFS的本地文件系统实现,修复原生Java文件系统在NFS上的权限处理问题;同时检查NFS挂载参数,确保设置了rw,sync等允许写入的选项。
内容的提问来源于stack exchange,提问作者OdiumPura
相关产品推荐
相关产品推荐

