このトピックでは、Kyuubiエンジンとその共有レベルについて説明し、Kyuubiエンジンを起動してジョブをKyuubiエンジンに送信する方法の例を示します。
Kyuubiエンジン
E-MapReduce(EMR)クラスターにKyuubiをインストールする場合は、事前にYARNエンジンとSpark 3.xエンジンがインストールされていることを確認してください。 EMRクラスターのKyuubiは、YARN上のSpark 3.xをサポートしていますが、Flink、Trino、またはSpark 2.xエンジンはサポートしていません。次の例では、Spark 3.xエンジンを使用して、Kyuubiエンジンの管理方法を説明します。各Spark 3.xエンジンは、YARN上のSparkアプリケーションに対応します。詳細については、例をご参照ください。
共有レベル
Kyuubiエンジンの共有レベルを設定するには、EMRコンソールのKyuubiサービスページの[kyuubi-defaults.conf] タブに移動し、[kyuubi.engine.share.level] パラメーターを設定します。次の表に、さまざまな共有レベルの詳細を示します。
共有レベル | 説明 | シナリオ | 分離度 | 共有性 |
CONNECTION | セッションごとに1つのエンジン |
| 高 | 低 |
USER | ユーザーごとに1つのエンジン | 中 | 中 | |
GROUP | リソースグループごとに1つのエンジン | 低 | 高 | |
SERVER | クラスターごとに1つのエンジン | 管理者 | 高セキュリティクラスターの場合は最高、標準クラスターの場合は最低 | 管理者のみが使用可能な高セキュリティクラスター |
例
次の例では、共有レベルUSERを使用して、Kyuubiエンジンの管理方法を説明します。例では、[kyuubi.engine.share.level] パラメーターはUSERに設定されており、すべてのユーザーはLightweight Directory Access Protocol(LDAP)認証またはKerberos認証に合格しています。
必要に応じてKyuubiエンジンを起動します。
user1という名前の新しいユーザーがSpark 3.xエンジンを使用する必要がある場合は、次のコマンドを実行します。 kyuubi-beelineを使用してジョブが送信されると、Kyuubiサーバーはジョブを処理するために新しいSpark 3.xエンジンを起動します。
kyuubi-beeline -n user1 \ -u "jdbc:hive2://master-1-1:10009/tpcds_parquet_1000" \ -f query1.sql
user2という名前の別の新しいユーザーがSpark 3.xエンジンによって使用されるリソースを設定する必要がある場合は、次のいずれかの方法を使用します。
方法 1:Java Database Connectivity(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 3.xエンジンによって使用されるリソースを設定します。サンプルコード:
# kyuubi-defatuls.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エンジンにジョブを送信します。
ジョブが完了した後、Kyuubiサーバーによって起動されたSpark 3.xエンジンは一定期間実行を継続します。他のジョブをエンジンに送信する場合、新しいYARNアプリケーションを起動せずにエンジンを直接再利用できます。これにより、ジョブまたはSQLクエリの パフォーマンスが向上します。一定期間内にジョブが送信されない場合、エンジンは自動的に実行状態を終了します。 Spark 3.xエンジンが実行を継続する期間は、[kyuubi.session.engine.idle.timeout] パラメーターによって指定されます。デフォルトでは、エンジンは再利用のために30分間待機します。期間を変更するには、Kyuubiサービスページの [kyuubi-defaults.conf] タブで、このパラメーターの値をPT30Mから別の値に変更できます。
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 3.xエンジンを使用します。
Kyuubiでは、Spark 3.xエンジンを複数のSparkセッションで使用できます。たとえば、user1という名前のユーザーが2つの端末から同時に2つのジョブを送信する場合、2つのジョブは計算に同じSpark 3.xエンジンを使用できます。エグゼキューターは、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