Spark在AKS(Kubernetes)上写入输出时触发chmod权限错误如何解决
问题根因
报错是Azure File Share的原生协议限制导致:SMB协议的Azure文件共享默认不支持POSIX权限操作,非root用户执行chmod命令会被直接拒绝。而Spark 2.4.5版本执行saveAsTextFile操作时,完成文件写入后会默认尝试修改输出目录与文件的权限,和Azure File Share的限制直接冲突,就触发了Operation not permitted报错。
解决方案(按改造成本从低到高排序)
方案1:新增Spark配置禁用自动权限修改
直接在现有spark-submit命令中添加如下配置即可,无需改动存储侧配置:
--conf spark.hadoop.fs.permissions.umask-mode=000 \ --conf spark.hadoop.mapreduce.fileoutputcommitter.permissions.setUmask=false
方案2:调整PV挂载参数适配权限
在你现有PV的yaml中新增mountOptions字段,指定挂载目录、文件的默认权限,以及Spark运行用户的ID,从存储侧消除权限修改需求:
spec: mountOptions: - dir_mode=0777 - file_mode=0777 - uid=185 - gid=0 - mfsymlinks - nobrl # 原有spec下的capacity、accessModes、azureFile等配置保持不变
上述配置中的uid=185是datamechanics Spark镜像默认的spark运行用户ID,如果你使用自定义镜像,替换成实际运行Spark进程的用户ID即可。修改PV配置后重新挂载PVC即可生效。
方案3:更换存储介质
如果后续有更多POSIX语义的操作需求,可将输出存储替换为Azure Blob存储(通过abfss协议访问)或Azure Managed Disk,天然支持chmod类权限操作,不会触发该类报错。
内容的提问来源于stack exchange,提问作者Maaverik
相关产品推荐
相关产品推荐

