還原 HDFS 權限

重要

Microsoft SQL Server 2019 巨量資料叢集附加元件將會淘汰。 SQL Server 2019 巨量資料叢集的支援將于 2025 年 2 月 28 日結束。 如需詳細資訊,請參閱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 會顯示處於 KILLED 狀態的應用程式識別碼。

當您嘗試以網域使用者的身分寫入資料夾時,也會失敗。 您可以使用下列範例來進行測試:

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 會針對該應用程式識別碼顯示處於 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 搭配 admin:

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