web-dev-qa-db-fra.com

Spark soumettre à fil en tant qu'un autre utilisateur

Est-il possible de soumettre un travail d'étincelle à un cluster de fils et de choisir, avec la ligne de commande ou à l'intérieur du fichier jar, quel utilisateur sera "propriétaire" du travail?

L'étincelle-soumission sera lancée à partir d'un script contenant l'utilisateur.

PS: est-ce toujours possible si le cluster a une configuration Kerberos (et le script un keytab)?

7
Benjamin

Pour un cluster non kerberisé : export HADOOP_USER_NAME=zorro avant de soumettre le travail Spark fera l'affaire.
Assurez-vous de unset HADOOP_USER_NAME après, si vous souhaitez rétablir vos informations d'identification par défaut dans le reste du script Shell (ou dans votre session Shell interactive).

Pour un kerberized cluster , le moyen propre d'emprunter l'identité d'un autre compte sans supprimer vos autres travaux/sessions (qui dépendent probablement de votre default ticket) serait quelque chose dans cette ligne ...

export KRB5CCNAME=FILE:/tmp/krb5cc_$(id -u)_temp_$$
kinit -kt ~/.protectedDir/zorro.keytab [email protected]
spark-submit ...........
kdestroy
4

Pour un cluster non kerberisé, vous pouvez ajouter une conf Spark en tant que:

--conf spark.yarn.appMasterEnv.HADOOP_USER_NAME=<user_name>
3
Kalyan Ghosh

Si votre utilisateur existe, vous pouvez toujours lancer votre envoi spark avec su $ my_user -c spark submit [...]

Je ne suis pas sûr du clavier de Kerberos, mais si vous créez un lien avec cet utilisateur, tout devrait bien se passer.

Si vous ne pouvez pas utiliser su parce que vous ne voulez pas le mot de passe, je vous invite à voir cette réponse stackoverflow: comment exécuter le script sous un autre utilisateur sans mot de passe

1
kulssaka

Une autre approche (beaucoup plus sûre) consiste à utiliser proxy authentication - en gros, vous créez un compte de service, puis vous l'autorisez à emprunter l'identité d'autres utilisateurs.

$ spark-submit --help 2>&1 | grep proxy
  --proxy-user NAME           User to impersonate when submitting the application.

En supposant que le cluster soit sécurisé/Kerberisé.

J'ai mentionné que c'était beaucoup plus sûr car vous n'avez pas besoin de stocker (et de gérer) les keytabs de tous les utilisateurs auxquels vous devrez vous faire passer.

Pour activer l'emprunt d'identité, vous devez activer plusieurs paramètres du côté Hadoop pour déterminer le ou les comptes qui peuvent emprunter l'identité de quels utilisateurs ou groupes et de quels serveurs. Supposons que vous ayez créé svc_spark_prd compte/utilisateur de service.

hadoop.proxyuser.svc_spark_prd.hosts - liste des noms de domaine pleinement qualifiés pour les serveurs autorisés à soumettre des applications Spark personnifiées. * est autorisé mais non recommandé pour tout hôte.

Spécifiez également hadoop.proxyuser.svc_spark_prd.users ou hadoop.proxyuser.svc_spark_prd.groups pour répertorier les utilisateurs ou les groupes pour lesquels svc_spark_prd est autorisé à emprunter l'identité. * est autorisé mais non recommandé pour aucun utilisateur/groupe.

Consultez également la documentation sur l’authentification du proxy .

Apache Livy utilise par exemple cette approche pour soumettre des travaux Spark au nom d’autres utilisateurs finaux.

0
Tagar