このトピックでは、Lindorm 分散処理システム (LDPS) の Spark ジョブのパラメーターを設定する方法について説明します。
Spark ジョブのパラメーターを設定する
LDPS では、リソース、実行、モニタリングに関連するパラメーターなど、Spark ジョブの共通パラメーターを設定できます。
制限付きパラメーター
spark.master および spark.submit.deployMode パラメーターはシステムパラメーターであり、カスタマイズできません。
パラメーター | 説明 |
spark.master | クラスター管理システムのエンドポイント。 |
spark.submit.deployMode | Spark ドライバーがデプロイされるモード。 |
リソースパラメーター
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 の仕様とモデル。詳細については、「ECS インスタンスタイプを指定して Pod を作成する」をご参照ください。 | 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 | 動的リソース割り当てが有効な場合のエグゼキューターの最大数。 説明 エグゼキューターの最大数は、指定された同時タスクの数と同じです。 | Infinity |
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 Secret の取得方法の詳細については、「AccessKey ペアの取得」をご参照ください。 | なし |
spark.hadoop.fs.oss.accessKeySecret | Alibaba Cloud アカウントまたは Alibaba Cloud アカウントの RAM ユーザーの AccessKey Secret。 AccessKey ID と AccessKey Secret の取得方法の詳細については、「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.log.level | ジョブログの出力レベルを設定します。 利用可能なレベルは次のとおりです:
| INFO |
オープンソース Spark に関連するパラメーター
オープンソース Spark に関連するパラメーターの詳細については、「Spark 設定」をご参照ください。
設定方法
LDPS にジョブを送信する際に、カスタマイズされたリソースパラメーターを設定できます。設定方法は、ジョブの送信方法によって異なります。
Beeline
Beeline コマンドラインツールが配置されている Spark パッケージ内の conf/beeline.conf 設定ファイルを変更することで、設定方法を指定できます。詳細については、「はじめに」をご参照ください。
次の例は、設定ファイルの内容を示しています:
# Lindorm コンピューティングエンジンのエンドポイント、例: 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=3JDBC
JDBC 接続文字列を使用してパラメーターを設定できます。JDBC URL の詳細については、「アプリケーション開発での JDBC の使用」をご参照ください。
たとえば、JDBC 接続文字列を使用して、Spark シャッフルパーティションのデフォルト数を 2 に、エグゼキューターが使用するメモリ空間を 8 GB に設定できます。
jdbc:hive2://${host}:${port}/;?token=${token};spark.executor.memory=8g;spark.sql.shuffle.partitions=2JAR
Lindorm コンソールで Java ジョブを送信する際に、ジョブコンテンツテンプレートに基づいて Java ジョブのパラメーターを設定できます。詳細については、「Lindorm コンソールでのジョブの管理」をご参照ください。
DMS を使用して Java ジョブを送信する場合、ジョブノードページの [ジョブ設定] セクションでジョブのカスタマイズされたパラメーターを設定できます。詳細については、「DMS を使用したジョブの管理」をご参照ください。
Python
Lindorm コンソールで Python ジョブを送信する際に、ジョブコンテンツテンプレートに基づいて Python ジョブのパラメーターを設定できます。詳細については、「Lindorm コンソールでのジョブの管理」をご参照ください。
DMS を使用して Python ジョブを送信する場合、ジョブノードページの [ジョブ設定] セクションでジョブのカスタマイズされたパラメーターを設定できます。詳細については、「DMS を使用したジョブの管理」をご参照ください。