このトピックでは、Lindorm Distributed Processing System(LDPS)の Spark ジョブのパラメーターを設定する方法について説明します。
Spark ジョブのパラメーターを設定する
LDPS では、リソース、実行、監視に関連するパラメーターを含む、Spark ジョブの共通パラメーターを設定できます。
表 1. Kyuubi パラメーター
制限付きパラメーター
spark.master パラメーターと spark.submit.deployMode パラメーターはシステム パラメーターであるため、カスタマイズできません。
パラメーター | 説明 |
spark.master | クラスター管理システムのエンドポイントです。 |
spark.submit.deployMode | Spark ドライバーがデプロイされるモードです。 |
リソースパラメーター
LDPS は、エラスティックリソースプールに基づいてサービスを提供します。デフォルトでは、設定できるリソースの最大数に制限はありません。これらのリソースは従量課金制で課金されます。設定できるリソースの最大数を変更する方法の詳細については、「LDPS の設定を変更する」をご参照ください。
JDBC、JAR、Python ジョブなど、LDPS に送信する各ジョブのリソースパラメーターを設定できます。リソースパラメーターには、仕様パラメーターと容量パラメーターが含まれます。
仕様パラメーター
基本仕様パラメーター
パラメーター | 説明 | デフォルト値 |
spark.driver.memory | ドライバーのヒープメモリのサイズです。単位:MB。 | 8192M |
spark.driver.memoryOverhead | ドライバーのオフヒープメモリのサイズです。単位:MB。 | 8192M |
spark.kubernetes.driver.disk.size | ドライバーのローカルディスクのサイズです。単位:GB。 | 50 |
spark.executor.cores | 単一のエグゼキューターノードの CPU コア数です。 | 4 |
spark.executor.memory | 単一のエグゼキューターのヒープメモリのサイズです。単位:MB。 | 8192M |
spark.executor.memoryOverhead | 単一のエグゼキューターのオフヒープメモリのサイズです。単位:MB。 | 8192M |
spark.kubernetes.executor.disk.size | 単一のエグゼキューターのローカルディスクのサイズです。単位:GB。 | 50 |
高度な仕様パラメーター
パラメーター | 説明 | デフォルト値 |
spark.{driver/executor}.resourceTag | リソース仕様セットです。有効な値:
| なし |
spark.kubernetes.{driver/executor}.ecsModelPreference | 計算ノードのモデルです。このパラメーターは、 LDPS は、モデルが指定された順序でモデルに適用されます。指定されたすべてのモデルの在庫がない場合、LDPS は指定されたリソース仕様に基づいて、使用可能なモデルをランダムに適用します。 | なし |
spark.kubernetes.{driver/executor}.annotation.k8s.aliyun.com/eci-use-specs | GPU の仕様とモデルです。詳細については、「Podを作成するためのECSインスタンスタイプの指定」をご参照ください。 | ecs.gn7i-c8g1.2xlarge |
spark.{driver/executor}.resource.gpu.vendor | GPU の製造元です。 説明 このパラメーターの値は、指定された GPU 仕様に対応している必要があります。 | nvidia.com |
spark.{driver/executor}.resource.gpu.amount | GPU の数です。 説明 このパラメーターを 1 に設定します。 | 1 |
spark.{driver/executor}.resource.gpu.discoveryScript | スクリプトファイルが配置されているパスです。 説明 このパラメーターで指定されたスクリプトファイルは、Spark ドライバーまたはエグゼキューターを起動するときに GPU リソースをクエリして関連付けるために使用されます。このパラメーターを | /opt/spark/examples/src/main/scripts/getGpusResources.sh |
spark.kubernetes.executor.annotation.k8s.aliyun.com/eci-use-specs | エグゼキューターインスタンスの仕様です。十分な容量を確保するために、エグゼキューターのディスクを拡張します。 次の仕様がサポートされています。
説明 | なし |
容量パラメーター
パラメーター | 説明 | デフォルト値 |
spark.executor.instances | ジョブに適用されるエグゼキューターの数です。 | 2 |
spark.dynamicAllocation.enabled | 動的リソース割り当てを有効にするかどうかを指定します。有効な値:
動的リソース割り当てが有効になると、LDPS はジョブのリアルタイムワークロードに基づいてエグゼキューターを申請および解放します。 | true |
spark.dynamicAllocation.minExecutors | 動的リソース割り当てが有効な場合の最小エグゼキューター数です。 | 0 |
spark.dynamicAllocation.maxExecutors | 動的リソース割り当てが有効な場合の最大エグゼキューター数です。 説明 最大エグゼキューター数は、指定された同時タスク数と同じです。 | 無限 |
spark.dynamicAllocation.executorIdleTimeout | 動的リソース割り当てが有効な場合のエグゼキューターの最大アイドル時間です。エグゼキューターが指定された値よりも長い時間アイドル状態の場合、エグゼキューターは解放されます。単位:秒。 | 600s |
実行パラメーター
パラメーター | 説明 | デフォルト値 |
spark.speculation | 投機的実行を有効にするかどうかを指定します。有効な値:
タスクの実行に時間がかかる場合、ドライバーはロングテールを回避するためにタスクを再送信します。 説明 ロングテールとは、一部のタスクの実行時間が他のタスクの実行時間よりも大幅に長いことを示します。 | true |
spark.task.maxFailures | タスクに許容される最大失敗回数です。タスクが失敗した回数がこの値を超えると、タスクが属するジョブは失敗します。 | 4 |
spark.dfsLog.executor.enabled | エグゼキューターのログを LindormDFS に保存するかどうかを指定します。有効な値:
LDPS のジョブの規模が大きい場合、このパラメーターを false に設定して、ログストリームによって引き起こされる過剰な DFS 負荷を防ぐことができます。 | true |
spark.jars | タスクの送信時に必要な JAR パッケージのパスです。このパラメーターの値は、OSS または HDFS のパスにすることができます。 このパラメーターを OSS パスに設定する場合は、次のパラメーターも設定する必要があります。
重要 JDBC を使用して LDFS に接続する場合、このパラメーターは HDFS パスにのみ設定できます。 | なし |
spark.hadoop.fs.oss.endpoint | OSS のエンドポイントです。エンドポイントの取得方法の詳細については、「リージョンとエンドポイント」をご参照ください。 | なし |
spark.hadoop.fs.oss.accessKeyId | Alibaba Cloud アカウントまたは Alibaba Cloud アカウントの RAM ユーザーの AccessKey ID です。 AccessKey ID と AccessKey シークレットの取得方法の詳細については、「AccessKey ペアを取得する」をご参照ください。 | なし |
spark.hadoop.fs.oss.accessKeySecret | Alibaba Cloud アカウントまたは Alibaba Cloud アカウントの RAM ユーザーの AccessKey シークレットです。 AccessKey ID と AccessKey シークレットの取得方法の詳細については、「AccessKey ペアを取得する」をご参照ください。 | なし |
spark.hadoop.fs.oss.impl | OSS にアクセスするために使用されるクラスです。 このパラメーターを | なし |
spark.default.parallelism | データソースの同時実行性とシャッフルの同時実行性を含む、非 SQL タスクのデフォルトの同時実行性です。 | なし |
spark.sql.shuffle.partitions | SQL タスクのデフォルトのシャッフル同時実行性です。 | 200 |
監視パラメーター
LDFS では、カスタマイズされたパラメーターを使用してインスタンスの状態を監視できます。これらのパラメーターを設定して、ジョブログにドライバーとエグゼキューターの状態を記録できます。
パラメーター | 説明 | デフォルト値 |
spark.monitor.cmd | ジョブ監視のコマンドグループです。複数のコマンドはセミコロン(;)で区切ります。このパラメーターで指定されたコマンドは、一定の間隔で順番に実行されます。コマンドの実行結果はジョブログに記録されます。 監視コマンドの例:
ステートメントの例:
重要 Beeline または JDBC を使用してジョブを送信する場合、このパラメーターは設定できません。 | なし |
spark.monitor.interval | グループ内のコマンドが実行される間隔です。単位:秒。 spark.monitor.cmd パラメーターで指定されたコマンドは、このパラメーターで指定された間隔で実行されます。 | 60 |
spark.monitor.timeout | 監視コマンドのタイムアウト時間です。単位:秒。 spark.monitor.cmd パラメーターで指定されたコマンドグループ内の監視コマンドの実行時間が指定されたタイムアウト期間を超えた場合、そのコマンドはスキップされ、後続のコマンドが実行されます。このようにして、監視情報はブロックされることなくログに記録できます。 | 2 |
オープンソース Spark に関連するパラメーター
オープンソース Spark に関連するパラメーターの詳細については、「Spark 設定」をご参照ください。
設定方法
LDPS にジョブを送信するときに、カスタマイズされたリソースパラメーターを設定できます。設定方法は、ジョブの送信方法によって異なります。
Beeline
Beeline コマンドラインツールが配置されている Spark パッケージの conf/beeline.conf
設定ファイルを編集することで設定方法を指定できます。詳細については、「クイックスタート」をご参照ください。
設定ファイルの内容の例を次に示します。
# Lindorm Compute Engine のエンドポイント。例:jdbc:hive2://123.456.XX.XX:10009/;?token=bb8a15-jaksdj-sdfjsd-ak****
endpoint=jdbc:hive2://ld-bp13ez23egd123****-proxy-ldps-pub.lindorm.aliyuncs.com:10009/;?token=jfjwi2453-fe39-cmkfe-afc9-01eek2j5****
// 接続のユーザー名。デフォルトは root です。
user=root
// 接続のパスワード。デフォルトは root です。
password=root
// 異なるセッション間で Spark リソースを共有するかどうか。デフォルトは true です。
shareResource=false
// 通常の Spark 設定
spark.dynamicAllocation.enabled=true
spark.dynamicAllocation.minExecutors=3
JDBC
JDBC 接続文字列を使用してパラメーターを設定できます。JDBC URL の詳細については、「アプリケーション開発で JDBC を使用する」をご参照ください。
たとえば、JDBC 接続文字列を使用して、Spark シャッフルパーティションのデフォルト数を 2 に設定し、エグゼキューターが使用するメモリ空間を 8 GB に設定できます。
jdbc:hive2://${host}:${port}/;?token=${token};spark.executor.memory=8g;spark.sql.shuffle.partitions=2
JAR
Lindorm コンソールで Java ジョブを送信するときに、ジョブコンテンツテンプレートに基づいて Java ジョブのパラメーターを設定できます。詳細については、「Lindorm コンソールでジョブを管理する」をご参照ください。
DMS を使用して Java ジョブを送信する場合、ジョブノードページの [ジョブ設定] セクションでジョブのカスタマイズされたパラメーターを設定できます。詳細については、「DMS を使用してジョブを管理する」をご参照ください。
Python
Lindorm コンソールで Python ジョブを送信するときに、ジョブコンテンツテンプレートに基づいて Python ジョブのパラメーターを設定できます。詳細については、「Lindorm コンソールでジョブを管理する」をご参照ください。
DMS を使用して Python ジョブを送信する場合、ジョブノードページの [ジョブ設定] セクションでジョブのカスタマイズされたパラメーターを設定できます。詳細については、「DMS を使用してジョブを管理する」をご参照ください。