还原 HDFS 权限
重要
Microsoft SQL Server 2019 大数据群集附加产品将停用。 对 SQL Server 2019 大数据群集的支持将于 2025 年 2 月 28 日结束。 具有软件保障的 SQL Server 2019 的所有现有用户都将在平台上获得完全支持,在此之前,该软件将继续通过 SQL Server 累积更新进行维护。 有关详细信息,请参阅公告博客文章和 Microsoft SQL Server 平台上的大数据选项。
对 HDFS 访问控制列表 (ACL) 的修改可能已影响 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 显示应用程序 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 为“已终止”状态的应用程序。
若要了解 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