还原 HDFS 权限

重要

Microsoft SQL Server 2019 大数据群集附加产品将停用。 对 SQL Server 2019 大数据群集的支持将于 2025 年 2 月 28 日结束。 具有软件保障的 SQL Server 2019 的所有现有用户都将在平台上获得完全支持,在此之前,该软件将继续通过 SQL Server 累积更新进行维护。 有关详细信息,请参阅公告博客文章Microsoft SQL Server 平台上的大数据选项

HDFS 访问控制列表(ACLs)的修改可能会影响 HDFS 中的 /system/tmp 文件夹。 ACL更改的最可能原因是用户手动操作文件夹ACL。 不支持直接修改 /system 文件夹和 /tmp/logs 文件夹中的权限。

症状

Spark 作业通过 ADS 提交时失败,具体原因是 SparkContext 初始化错误和 AccessControlException。

583 ERROR spark.SparkContext: Error initializing SparkContext.
org.apache.hadoop.security.AccessControlException: Permission denied: user=<UserAccount>, access=WRITE, inode="/system/spark-events":sph:BDCAdmin:drwxr-xr-x

Yarn UI 显示处于 KILLED 状态的应用程序 ID。

尝试以域用户身份写入文件夹时,该操作也会失败。 可以使用以下示例进行测试:

kinit <UserAccount>
hdfs dfs -touch /system/spark-events/test
hdfs dfs -rm /system/spark-events/test

原因

已针对 BDC 用户域安全组修改 HDFS ACL。 可能的修改包括 /system 和 /tmp 文件夹的 ACL。 不支持修改这些文件夹。

验证 Livy 日志中的效果:

INFO utils.LineBufferedStream: YYYY-MM-DD-HH:MM:SS,858 INFO yarn.Client: Application report for application_1580771254352_0041 (state: ACCEPTED)
...
WARN rsc.RSCClient: Client RPC channel closed unexpectedly.
INFO interactive.InteractiveSession: Failed to ping RSC driver for session <ID>. Killing application

YARN UI 显示应用程序 ID 处于 KILLED 状态的应用程序。

若要获取 RPC 连接关闭的根本原因,请检查与应用程序对应的应用的 YARN 应用程序日志。 在前面的示例中,它引用 application_1580771254352_0041了 。 使用kubectl连接到sparkhead-0 pod,然后运行命令:

以下命令查询应用程序的 YARN 日志。

yarn logs -applicationId application_1580771254352_0041

在下面的结果中,用户权限被拒绝。

YYYY-MM-DD-HH:MM:SS,583 ERROR spark.SparkContext: Error initializing SparkContext.
org.apache.hadoop.security.AccessControlException: Permission denied: user=user1, access=WRITE, inode="/system/spark-events":sph:BDCAdmin:drwxr-xr-x

原因可能是 BDC 用户以递归方式添加到 HDFS 根文件夹。 这可能会影响默认权限。

决议

使用以下脚本还原权限:与管理员一起使用 kinit

hdfs dfs -chmod 733 /system/spark-events
hdfs dfs -setfacl --set default:user:sph:rwx,default:other::--- /system/spark-events
hdfs dfs -setfacl --set default:user:app-setup:r-x,default:other::--- /system/appdeploy
hadoop fs -chmod 733 /tmp/logs
hdfs dfs -setfacl --set default:user:yarn:rwx,default:other::--- /tmp/logs