E-MapReduce (EMR) クラスター内の Kyuubi は、YARN 上で Spark 3.x を実行します。各 Spark 3.x エンジンは、YARN 上の 1 つの Spark アプリケーションに対応します。Flink、Trino、および Spark 2.x はサポートされていません。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
EMR クラスターに YARN および Spark 3.x がインストールされていること
すべてのユーザーが Lightweight Directory Access Protocol (LDAP) または Kerberos により認証済みであること
共有レベル
共有レベルは、単一の Kyuubi エンジンを何人のユーザーが共有するかを決定します。kyuubi.engine.share.level パラメーターは、EMR コンソールの Kyuubi サービスページにある kyuubi-defaults.conf タブで設定します。
| 共有レベル | エンジンの範囲 | 隔離度 | 共有性 | 利用シーン |
|---|---|---|---|---|
| CONNECTION | セッションごとに 1 つのエンジン | 高 | 低 | 大規模 ETL、アドホッククエリ |
| USER | ユーザーごとに 1 つのエンジン | 中 | 中 | — |
| GROUP | リソースグループごとに 1 つのエンジン | 低 | 高 | — |
| SERVER | クラスターごとに 1 つのエンジン | 高セキュリティクラスター:最高/標準クラスター:最低 | 高セキュリティクラスター:管理者のみ | 管理者 |
Kyuubi エンジンへのジョブの送信
Kyuubi サーバーは、エンジンを自動的に起動および停止します。新しいユーザーが初めて kyuubi-beeline を使用して接続すると、サーバーは新しい Spark 3.x エンジンを起動します。手動での起動は不要です。
以下の例では、共有レベルとして USER を使用します。すべてのユーザーは LDAP または Kerberos 認証を通過済みです。
新規ユーザーとしてジョブを送信する
user1 が初回接続すると、Kyuubi サーバーは自動的に新しい Spark 3.x エンジンを起動します。
kyuubi-beeline -n user1 \
-u "jdbc:hive2://master-1-1:10009/tpcds_parquet_1000" \
-f query1.sqlSpark エグゼキュータのリソースを設定する
Spark 3.x エンジンが使用するリソースを設定する方法は、以下の 2 つがあります。
方法 1:JDBC URL 内でリソースを設定する
接続 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 でユーザーごとのデフォルトを設定する
kyuubi-defaults.conf タブに、___username___.spark.param=value の形式でユーザー固有のエントリを追加します。
# 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実行中のエンジンを再利用する
ジョブが完了後、Spark 3.x エンジンは一定期間(アイドル状態)存続し、その後シャットダウンされます。この期間内に別のジョブを送信すると、既存のエンジンが再利用され、新しい YARN アプリケーションの起動が回避されるため、ジョブの起動時間が短縮されます。
アイドルタイムアウトは kyuubi.session.engine.idle.timeout パラメーターで制御されます(デフォルト値:PT30M、30 分)。タイムアウトを変更するには、このパラメーターを kyuubi-defaults.conf タブで更新します。
同一ユーザーから複数のエンジンへジョブを送信する
異なる事業部門向けにワークロードを分離して実行する場合、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 エンジンに対応するため、biz1、biz2、biz3 は相互に隔離された状態で実行されます。
複数のセッション間で 1 つのエンジンを共有する
同一ユーザーからの複数のセッションは、単一の Spark 3.x エンジンを共有します。たとえば、user1 が別々のターミナルから同時に 2 つのジョブを送信した場合、両方のジョブは同じエンジン上で実行されます。
# ターミナル 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エグゼキュータのリソースは、Spark のデフォルトスケジューリングルールに従って割り当てられます。