個別のユーザーとしてのSparkプロセスの実行
Sparkプロセスを構成して、個別のオペレーティング・システム・ユーザーとして実行できます。
dse.yaml
dse.yamlファイルの場所は、インストールのタイプによって異なります。パッケージ・インストール | /etc/dse/dse.yaml |
tarボール・インストール | installation_location/resources/dse/conf/dse.yaml |
Sparkプロセスを構成して、個別のオペレーティング・システム・ユーザーとして実行できます。
デフォルトでは、DSEによって起動されるプロセスは、DSEサーバー・プロセスを起動した同じOSユーザーとして実行されます。これは、DSEサービス・ユーザーと呼ばれます。この結果として、クラスターで実行されるすべてのアプリケーションはDSEデータと構成ファイル、ならびに他のアプリケーションのファイルにアクセスできます。
ランナー・プロセスやユーザーに対するSparkアプリケーションの実行権限は、 dse.yamlのオプションを変更することで委任できます。
run_asプロセス・ランナーの概要
run_as
プロセス・ランナーを使用して、DSEサービス・ユーザーとは別のOSユーザーとして、Sparkアプリケーションを実行することができます。この機能が有効かつ構成済みの場合:
- 1つのDSEサービス・ユーザーによってデプロイされる同時実行中のすべてのアプリケーションは、単一のOSユーザーとして実行されます。
- 別のDSEサービス・ユーザーによってデプロイされるアプリケーションは、別のOSユーザーによって実行されます。
- すべてのアプリケーションは、DSEサービス・ユーザーとは別のOSユーザーとして実行されます。
これにより、アプリケーションがDSEサーバー占有ファイルにアクセスするのを防ぎ、1つのアプリケーションが別のアプリケーションの占有ファイルにアクセスするのを防ぎます。
run_asプロセス・ランナーの仕組み
DSEはsudo
を使用して、特定のOSユーザーとしてSparkアプリケーション・コンポーネント(ドライバーやエグゼキューター)を実行します。DSEは、DSEサービス・ユーザーと特定のOSユーザーをリンクさせません。代わりに、予備のユーザー・アカウントまたはスロットの構成可能な数を使用します。エグゼキューターまたはドライバーを実行する要求を受け取った時点で、DSEは未使用のスロットを見つけ、そのアプリケーション用にロックします。アプリケーションが終了するまで、そのアプリケーションのプロセスはすべて、そのスロットのユーザーとして実行されます。アプリケーションが完了すると、スロット・ユーザーがリリースされ、他のアプリケーションで使用できるようになります。
スロット数は制限されているため、同じDSEサービス・ユーザーによって実行される同時実行中のアプリケーションすべての間で、1つのスロットが共有されます。こうしたスロットは、対象ユーザーのすべてのアプリケーションが削除されるとリリースされます。アプリケーションを実行するのに十分な数のスロットがない場合は、エラーがログに記録され、DSEは別のノードでエグゼキューターまたはドライバーを実行しようと試みます。DSEは、構成できるスロット数は制限しません。さらに多くのアプリケーションを同時に実行する必要がある場合は、さらにスロット・ユーザーを作成します。
スロットの割り当ては、ノードごとに行われます。1つのアプリケーションのエグゼキューターは、別のDSEノードで別のスロット・ユーザーを実行する場合があります。肥大化したノードでDSEを実行すると、同じOS内で実行中の別のDSEインスタンスは、別のスロット・ユーザー・セットで構成する必要があります。同じスロット・ユーザーが使用されている場合、単一のOSユーザーは2つの異なるDSEサービス・ユーザーのアプリケーションを実行する場合があります。
スロットがリリースされると、通常、アプリケーション用にSparkで管理されているディレクトリーはすべて削除されます。アプリケーションは終了していないものの、すべてのエグゼキューターがノードで実行され、スロット・ユーザーをリリースしようとすると、すべてのアプリケーション・ファイルは修正され、その所有権が所有者専用パーミッションでDSEサービス・ユーザーに変更されます。このアプリケーション用の新しいエグゼキューターをこのノードで実行すると、アプリケーション・ファイルは、そのアプリケーションに割り当てられているスロット・ユーザーに再度割り当てられます。
run_asプロセス・ランナーを構成する
管理者は、DSEを構成する前に、OSでスロット・ユーザーを作成する必要があります。run_as
プロセス・ランナーには、以下が必要です。
- 各スロット・ユーザーは固有のプライマリ・グループを持っており、その名前はスロット・ユーザー名と同じであること。通常、これはOSのデフォルト動作です。たとえば、
slot1
ユーザーのプライマリ・グループはslot1
です。 - DSEサービス・ユーザーは、各スロットのプライマリ・グループのメンバーであること。たとえば、DSEサービス・ユーザーが
cassandra
の場合、cassandra
ユーザーは、slot1
グループのメンバーです。 - DSEサービス・ユーザーは、サービス・ユーザーと同じ名前のグループのメンバーです。たとえば、DSEサービス・ユーザーが
cassandra
の場合、cassandra
ユーザーはcassandra
グループのメンバーです。 - DSEサービス・ユーザーがパスワードを入力することなく、スロット・ユーザーとしてあらゆるコマンドを実行できるように、
sudo
を構成すること。
スロット・ユーザーに対してumask
設定を007
にオーバーライドすると、サブプロセスで作成されたファイルにはデフォルトで誰もアクセスできなくなります。また、DSE構成ファイルはスロット・ユーザーには表示されません。
OSのlimits.conf
ファイルを変更して、各スロット・ユーザーに空きディスク領域を正確に割り当てることで、DSEのサーバー環境をさらにセキュリティで保護することができます。
スロット・ユーザーとグループを追加し、OSを構成したら、dse.yaml ファイルを変更します。Spark_process_runner
セクションで、run_as
プロセス・ランナーを有効にして、各ノードのスロット・ユーザーのリストを設定します。
spark_process_runner:
# Allowed options are: default, run_as
runner_type: run_as
run_as_runner_options:
user_slots:
- slot1
- slot2
run_asプロセス・ランナーの構成例
この例では、slot1
とslot2
の2つのスロット・ユーザーが作成され、DSEで構成されます。cassandra
のデフォルトのDSEサービス・ユーザーが使用されています。
- スロット・ユーザーを作成します。
sudo useradd -r -s /bin/false slot1 && sudo useradd -r -s /bin/false slot2
- DSEサービス・ユーザーのグループにスロット・ユーザーを追加します。
sudo usermod -a -G slot1,slot2 cassandra
- DSEサービス・ユーザーは、サービス・ユーザーと同じ名前のグループのメンバーです。たとえば、DSEサービス・ユーザーが
cassandra
の場合、次のようになります。groups cassandra
cassandra : cassandra
- ログアウトしてからもう一度ログインして、グループの変更を有効にします。
- スロット・ユーザーで、sudoersファイルを変更します。
Runas_Alias SLOTS = slot1, slot2 Defaults>SLOTS umask=007 Defaults>SLOTS umask_override cassandra ALL=(SLOTS) NOPASSWD: ALL
- dse.yaml を変更して、
run_as
プロセス・ランナーを有効にし、新しいランナーを追加します。# Configure the way how the driver and executor processes are created and managed. spark_process_runner: # Allowed options are: default, run_as runner_type: run_as # RunAs runner uses sudo to start Spark drivers and executors. A set of predefined fake users, called slots, is used # for this purpose. All drivers and executors owned by some DSE user are run as some slot user x. At the same time # drivers and executors of any other DSE user use different slots. run_as_runner_options: user_slots: - slot1 - slot2