個別のユーザーとしての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プロセス・ランナーの構成例

この例では、slot1slot2の2つのスロット・ユーザーが作成され、DSEで構成されます。cassandraのデフォルトのDSEサービス・ユーザーが使用されています。

  1. スロット・ユーザーを作成します。
    sudo useradd -r -s /bin/false slot1 && 
    sudo useradd -r -s /bin/false slot2
  2. DSEサービス・ユーザーのグループにスロット・ユーザーを追加します。
    sudo usermod -a -G slot1,slot2 cassandra
  3. DSEサービス・ユーザーは、サービス・ユーザーと同じ名前のグループのメンバーです。たとえば、DSEサービス・ユーザーがcassandraの場合、次のようになります。
    groups cassandra
    cassandra : cassandra
  4. ログアウトしてからもう一度ログインして、グループの変更を有効にします。
  5. スロット・ユーザーで、sudoersファイルを変更します。
    Runas_Alias     SLOTS = slot1, slot2
    Defaults>SLOTS  umask=007
    Defaults>SLOTS  umask_override
    cassandra       ALL=(SLOTS) NOPASSWD: ALL
  6. 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