Restaurer des autorisations HDFS

Important

Les clusters Big Data Microsoft SQL Server 2019 sont mis hors service. La prise en charge des clusters Big Data SQL Server 2019 a pris fin le 28 février 2025. Pour plus d’informations, consultez le billet de blog d’annonce et les options Big Data sur la plateforme Microsoft SQL Server.

Les modifications des listes de contrôle d'accès (ACL) HDFS peuvent avoir affecté les dossiers /system et /tmp dans HDFS. La cause la plus probable de la modification de la liste de contrôle d’accès est un utilisateur qui manipule manuellement les listes de contrôle d’accès du dossier. La modification directe des autorisations dans le dossier /system et le dossier /tmp/logs ne sont pas prises en charge.

Symptom

Un travail Spark est soumis via ADS et échoue en raison d'une erreur d'initialisation de SparkContext et d'une 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

L’interface utilisateur Yarn affiche l’ID d’application dans l’état ARRÊTÉ.

Lorsque vous essayez d’écrire dans le dossier en tant qu’utilisateur de domaine, il échoue également. Vous pouvez tester avec l’exemple suivant :

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

Cause

Les ACL HDFS ont été modifiées pour le groupe de sécurité du domaine utilisateur BDC. Les modifications possibles incluaient des listes de contrôle d’accès pour les dossiers /system et /tmp. Les modifications de ces dossiers ne sont pas prises en charge.

Vérifiez l’effet dans les fichiers journaux de 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

L’interface utilisateur YARN affiche les applications dans l’état KILLED pour l’ID d’application.

Pour obtenir la cause racine de la fermeture de la connexion RPC, vérifiez le journal de l’application YARN correspondant à l’application. Dans l’exemple précédent, il fait référence à application_1580771254352_0041. Permet kubectl de se connecter au pod sparkhead-0 et d’exécuter cette commande :

La commande suivante interroge le journal YARN pour l’application.

yarn logs -applicationId application_1580771254352_0041

Dans les résultats ci-dessous, l’autorisation est refusée pour l’utilisateur.

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

La cause peut être que l’utilisateur BDC a été ajouté de manière récursive au dossier racine HDFS. Cela peut avoir affecté les autorisations par défaut.

Resolution

Restaurez les autorisations avec le script suivant : Utilisez kinit avec l’administrateur :

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