You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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文件可正常生成。


排查与解决方法

  1. 修正NFS路径的URI格式
    客户端模式下,executor运行在独立pod中,file:/协议指向的是本地pod的文件系统,无法跨pod共享NFS存储。需去掉file:/前缀,直接使用NFS在所有pod中一致挂载的绝对路径,或者改用HDFS兼容的存储协议(如hdfs://)。

  2. 解决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日志缓存,减少并发创建目录的冲突概率。
  3. 验证Delta与Spark版本兼容性
    Delta 1.0.0与Spark 3.1.2理论兼容,但部分环境下存在目录创建逻辑bug,可尝试升级Delta版本至1.1.0(官方兼容Spark 3.1.x)。

  4. 调整Spark文件系统配置
    添加Spark配置spark.hadoop.fs.file.impl=org.apache.hadoop.fs.LocalFileSystem,确保使用HDFS的本地文件系统实现,修复原生Java文件系统在NFS上的权限处理问题;同时检查NFS挂载参数,确保设置了rw,sync等允许写入的选项。


内容的提问来源于stack exchange,提问作者OdiumPura

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 03:31:04