Kyuubi は、セッション、ユーザー、グループ間で Spark エンジンの割り当てを制御する複数のエンジン共有レベルをサポートしています。
サポートされるエンジン
E-MapReduce クラスターに Kyuubi をインストールすると、依存関係として YARN および Spark 3 もインストールされます。E-MapReduce 上の Kyuubi は、YARN 上の Spark 3 のみをサポートします。Flink、Trino、および Spark 2 はサポートされていません。各 Spark エンジンは、YARN 上の 1 つの Spark アプリケーションに対応します。詳細については、「例」をご参照ください。
共有レベル
エンジンの共有レベルを設定するには、Kyuubi サービス構成ページの kyuubi-defaults.conf タブで、kyuubi.engine.share.level パラメーターを構成します。
|
共有レベル |
説明 |
ユースケース |
分離度 |
共有性 |
|
CONNECTION |
セッションごとに 1 つのエンジンが起動されます。 |
|
高 |
低 |
|
USER |
ユーザーごとに 1 つのエンジンが起動されます。 |
中 |
中 |
|
|
GROUP |
リソースグループごとに 1 つのエンジンが起動されます。 |
低 |
高 |
|
|
SERVER |
クラスターごとに 1 つのエンジンが起動されます。 |
管理者 |
高セキュリティクラスターでは最も高く、標準クラスターでは最も低くなります。 |
高セキュリティクラスターは管理者のみが利用できます。 |
例
以下の例では、USER 共有レベル(kyuubi.engine.share.level を USER に設定)を使用し、すべてのユーザーが Lightweight Directory Access Protocol (LDAP) または Kerberos を通じて認証されていることを前提としています。
-
オンデマンドでエンジンを起動する
新規ユーザー
user1が kyuubi-beeline ツールを使用してジョブを送信すると、Kyuubi サーバーはその処理のために新しい Spark エンジンを起動します。kyuubi-beeline -n user1 \ -u "jdbc:hive2://master-1-1:10009/tpcds_parquet_1000" \ -f query1.sql別のユーザー
user2が Spark エンジンのリソースを指定する必要がある場合は、次のいずれかの方法を使用できます。-
方法 1:JDBC URL 内で Spark アプリケーションのエグゼキュータなどのリソースを設定します。
# JDBC 接続 URL 経由でユーザー設定を指定 kyuubi-beeline -n user2 \ -u "jdbc:hive2://master-1-1:10009/tpcds_parquet_1000?spark.dynamicAllocation.enabled=false;spark.executor.cores=2;spark.executor.memory=4g;spark.executor.instances=4" \ -f query1.sql -
方法 2:kyuubi-defaults.conf 設定ファイルで Spark エンジンのリソースを設定します。
# kyuubi-defaults.conf でユーザーのデフォルト設定を指定 # ___user2___.spark.dynamicAllocation.enabled=false # ___user2___.spark.executor.memory=5g # ___user2___.spark.executor.cores=2 # ___user2___.spark.executor.instances=10 kyuubi-beeline -n user2 \ -u "jdbc:hive2://master-1-1:10009/tpcds_parquet_1000" \ -f query1.sql
-
-
特定のエンジンにジョブを送信する
ジョブ完了後、Kyuubi が起動した Spark エンジンは、設定可能な期間アクティブな状態を維持します。新しいジョブはこのアイドル状態のエンジンを再利用でき、新しい YARN アプリケーションを起動する必要がなくなるため、パフォーマンスが向上します。この期間内に新しいジョブが送信されない場合、エンジンは自動的に終了します。kyuubi.session.engine.idle.timeout パラメーターはアイドルタイムアウト期間を指定し、デフォルト値は
PT30M(30 分)です。このパラメーターは kyuubi-defaults.conf タブで構成できます。Kyuubi では、同じ共有レベル内でサブドメインを作成できます。たとえば、ユーザー
user4が異なるビジネスシナリオに対して異なるエンジンリソースを必要とする場合、JDBC URL 内で kyuubi.engine.share.level.subdomain パラメーターを設定することで、異なるエンジンにジョブを送信できます。kyuubi-beeline -n user4 \ -u "jdbc:hive2://master-1-1:10009/biz1?kyuubi.engine.share.level.subdomain=biz1" \ -f query1.sql kyuubi-beeline -n user4 \ -u "jdbc:hive2://master-1-1:10009/biz2?kyuubi.engine.share.level.subdomain=biz2" \ -f query2.sql kyuubi-beeline -n user4 \ -u "jdbc:hive2://master-1-1:10009/biz3?kyuubi.engine.share.level.subdomain=biz3" \ -f query3.sql -
単一のエンジンが複数の Spark セッションをサポートする
複数の Spark セッションが、単一の Spark エンジンを同時に使用できます。たとえば、ユーザー
user1が 2 つの異なる端末から同時に 2 つのジョブを送信した場合、両方のジョブは同じ Spark エンジン上で実行されます。Spark は、内部のデフォルトスケジューリングメカニズムに基づいて、ジョブにエグゼキュータリソースを割り当てます。# コンソール 1 kyuubi-beeline -n user1 \ -u "jdbc:hive2://master-1-1:10009/biz1" \ -f query1.sql # コンソール 2 kyuubi-beeline -n user1 \ -u "jdbc:hive2://master-1-1:10009/biz2" \ -f query2.sql