web-dev-qa-db-ja.com

Spark別のユーザーとしてyarnに送信する

sparkジョブをyarnクラスターに送信し、コマンドラインまたはjar内で、どのユーザーがジョブを「所有」するかを選択することは可能ですか?

Spark-submitは、ユーザーを含むスクリプトから起動されます。

PS:クラスターにKerberos構成(およびスクリプトのキータブ)がある場合でも可能ですか?

9
Benjamin

非kerberizedクラスターの場合:export HADOOP_USER_NAME=zorro Sparkジョブを送信する前にトリックを実行します。
必ずunset HADOOP_USER_NAMEその後、シェルスクリプトの残りの部分(またはインタラクティブなシェルセッション)でデフォルトの資格情報に戻したい場合。

kerberized clusterの場合、他のジョブ/セッション(おそらくdefaultチケットに依存します)を破棄せずに別のアカウントになりすますクリーンな方法は何かでしょうこの行で...

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

カーネル化されていないクラスターの場合、Spark conf as:

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

ユーザーが存在する場合でも、spark submit with su $ my_user -c spark submit [...]

Kerberos keytabについてはよくわかりませんが、このユーザーでkinitを作成すれば、問題ないはずです。

パスワードが必要ないためにsuを使用できない場合は、次のスタックオーバーフローの回答をご覧ください: パスワードなしで別のユーザーとしてスクリプトを実行する方法

1
kulssaka

もう1つの(はるかに安全な)アプローチは、proxy authenticationを使用することです。基本的には、サービスアカウントを作成し、それを他のユーザーに偽装できるようにします。

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

ケルバライズされた/保護されたクラスターを想定しています。

偽装する必要のあるすべてのユーザーのキータブを保存(および管理)する必要がないため、はるかに安全であると述べました。

偽装を有効にするには、Hadoop側で有効にして、どのアカウントがどのユーザーまたはグループおよびどのサーバーで偽装できるかを指示する必要があるいくつかの設定があります。 svc_spark_prdサービスアカウント/ユーザーを作成したとしましょう。

hadoop.proxyuser.svc_spark_prd.hosts-偽装されたSparkアプリケーションの送信を許可されているサーバーの完全修飾ドメイン名のリスト。*は許可されていますが、どのホストにも推奨されていません。

また、hadoop.proxyuser.svc_spark_prd.usersまたはhadoop.proxyuser.svc_spark_prd.groupsのいずれかを指定して、svc_spark_prdが偽装できるユーザーまたはグループを一覧表示します。 *は許可されていますが、どのユーザー/グループにも推奨されていません。

また、 プロキシ認証に関するドキュメント も確認してください。

Apache Livy たとえば、このアプローチを使用して、他のエンドユーザーに代わってSparkジョブを送信します。

0
Tagar