Spark は、大規模データ分析のための多用途、パフォーマンス専有型、かつユーザーフレンドリなエンジンです。 Spark を使用して、複雑なインメモリ分析を実行し、大規模で低レイテンシーのデータ分析アプリケーションを構築できます。 DataWorks は、Spark タスクを開発し、定期的にスケジュールするのに役立つ EMR Spark ノードを提供します。 このトピックでは、EMR Spark ノードを作成する方法について説明し、詳細な例を示します。
前提条件
ノードを開発する前に、コンポーネント環境をカスタマイズする必要がある場合は、公式イメージ
dataworks_emr_base_task_podに基づいてカスタムイメージを作成し、DataStudio でカスタムイメージを使用できます。たとえば、カスタムイメージを作成するときに、Spark JAR パッケージを置き換えたり、特定の
libraries、files、またはJAR packagesを含めたりできます。EMR クラスターが DataWorks に登録されています。 詳細については、「DataStudio (レガシーバージョン): EMR 計算リソースのバインド」をご参照ください。
(オプション) Resource Access Management (RAM) ユーザーを使用してタスクを開発する場合、そのユーザーを対応するワークスペースに追加し、[開発者] または [ワークスペース管理者] ロールを付与する必要があります。 ワークスペース管理者ロールには広範な権限が含まれているため、慎重に付与する必要があります。 詳細については、「ワークスペースへのメンバーの追加」をご参照ください。
リソースグループが購入され、構成されています。 構成には、ワークスペースのバインドとネットワークの構成が含まれます。 詳細については、「サーバーレスリソースグループの使用」をご参照ください。
ビジネスフローを作成する必要があります。 DataStudio でのさまざまなエンジンの開発操作はビジネスフローに基づいて実行されるため、ノードを作成する前にビジネスフローを作成する必要があります。 詳細については、「ビジネスフローの作成」をご参照ください。
タスクに特定の開発環境が必要な場合は、DataWorks のカスタムイメージ機能を使用して、タスク実行用のコンポーネントイメージを構築できます。 詳細については、「カスタムイメージ」をご参照ください。
制限事項
このタイプのノードは、サーバーレスリソースグループまたはスケジューリング専用リソースグループでのみ実行できます。 サーバーレスリソースグループを使用することをお勧めします。 DataStudio でイメージを使用する必要がある場合は、サーバーレスコンピューティングリソースグループを使用してください。
DataLake またはカスタムクラスターの場合、クラスターで EMR-HOOK を構成して DataWorks のメタデータを管理する必要があります。 EMR-HOOK が構成されていない場合、DataWorks でメタデータをリアルタイムで表示したり、監査ログを生成したり、データリネージを表示したり、EMR 関連のデータ管理タスクを実行したりすることはできません。 EMR-HOOK の構成方法の詳細については、「Spark SQL 用に EMR-HOOK を構成する」をご参照ください。
ACK Spark クラスター上の EMR は、データリネージの表示をサポートしていません。 EMR Serverless Spark クラスターは、データリネージの表示をサポートしています。
ACK Spark クラスター上の EMR および EMR Serverless Spark クラスターは、OSS REF を使用した OSS リソースの参照と OSS へのリソースのアップロードのみをサポートします。 HDFS へのリソースのアップロードはサポートしていません。
DataLake クラスターとカスタムクラスターは、OSS REF を使用した OSS リソースの参照、OSS へのリソースのアップロード、および HDFS へのリソースのアップロードをサポートしています。
注意事項
現在のワークスペースにバインドされている EMR クラスターで Spark の Ranger アクセス制御を有効にした場合:
この機能は、デフォルトイメージを使用する Spark タスクを実行する場合、デフォルトで利用可能です。
カスタムイメージを使用する Spark タスクを実行するには、ヘルプデスクにチケットを送信して、この機能をサポートするようにイメージをアップグレードする必要があります。
準備: Spark タスクを開発し、JAR パッケージを取得する
DataWorks で EMR Spark タスクをスケジュールする前に、EMR で Spark タスクコードを開発し、それをコンパイルして JAR パッケージを生成する必要があります。 EMR Spark タスクの開発方法の詳細については、「Spark の概要」をご参照ください。
タスク JAR パッケージを DataWorks にアップロードして、EMR Spark タスクを定期的にスケジュールする必要があります。
ステップ 1: EMR Spark ノードの作成
DataStudio ページに移動します。
DataWorks コンソールにログインします。 上部のナビゲーションバーで、目的のリージョンを選択します。 左側のナビゲーションウィンドウで、 を選択します。 表示されたページで、ドロップダウンリストから目的のワークスペースを選択し、[データ開発へ] をクリックします。
EMR Spark ノードを作成します。
ターゲットのビジネスフローを右クリックし、 を選択します。
説明[作成] にカーソルを合わせ、 を選択することもできます。
[ノードの作成] ダイアログボックスで、[名前] を入力し、[エンジンインスタンス]、[ノードタイプ]、および [パス] を選択します。 [OK] をクリックして、EMR Spark ノードエディターページを開きます。
説明ノード名には、大文字、小文字、漢字、数字、アンダースコア (_)、ピリオド (.) を使用できます。
ステップ 2: Spark タスクの開発
EMR Spark ノードエディターページで、作成したノードをダブルクリックしてタスク開発ページに移動します。 シナリオに基づいて、次のいずれかの操作を選択します:
(推奨) ローカルマシンから DataStudio にリソースをアップロードしてから、リソースを参照します。 詳細については、「シナリオ 1: EMR JAR リソースをアップロードしてから参照する」をご参照ください。
OSS REF を使用して OSS リソースを参照します。 詳細については、「シナリオ 2: OSS リソースを直接参照する」をご参照ください。
シナリオ 1: EMR JAR リソースをアップロードしてから参照する
DataWorks では、ローカルマシンから DataStudio にリソースをアップロードしてから、リソースを参照できます。 EMR Spark タスクをコンパイルした後、コンパイルされた JAR パッケージを取得します。 JAR パッケージリソースは、そのサイズに基づいて保存することをお勧めします。
JAR パッケージリソースをアップロードし、DataWorks EMR リソースとして作成してから送信できます。 または、EMR の HDFS に直接保存することもできます。 ACK Spark クラスター上の EMR および EMR Serverless Spark クラスターは、HDFS へのリソースのアップロードをサポートしていません。
JAR パッケージが 500 MB 未満の場合
EMR JAR リソースを作成します。
JAR パッケージが 500 MB 未満の場合、ローカルマシンから DataWorks EMR JAR リソースとしてアップロードできます。 この方法により、DataWorks コンソールでリソースを簡単に管理できます。 リソースを作成した後、それを送信する必要があります。 詳細については、「EMR リソースの作成と使用」をご参照ください。
説明初めて EMR リソースを作成するときに、アップロードした JAR パッケージを OSS に保存する場合は、まずページ上のプロンプトに従って権限付与を実行する必要があります。
EMR JAR リソースを参照します。
[EMR Spark] ノードをダブルクリックして、そのコードエディターを開きます。
ノードで、アップロードした EMR JAR リソースを見つけます。 リソースを右クリックし、[リソースの参照] を選択します。
リソースを選択すると、リソース参照コードが現在の EMR Spark ノードのエディターページに自動的に追加されます。 次のコードは一例です。
##@resource_reference{"spark-examples_2.12-1.0.0-SNAPSHOT-shaded.jar"} spark-examples_2.12-1.0.0-SNAPSHOT-shaded.jar前の参照コードが自動的に追加された場合、リソースは参照されます。 コードでは、spark-examples_2.12-1.0.0-SNAPSHOT-shaded.jar はアップロードした EMR JAR リソースの名前です。
EMR Spark ノードのコードを変更して、spark-submit コマンドを追加します。 次のコードは一例です。
説明EMR Spark ノードエディターはコメントをサポートしていません。 次の例に示すようにタスクコードを変更してください。 コメントを追加しないでください。 そうしないと、ノードの実行時にエラーが発生します。
##@resource_reference{"spark-examples_2.11-2.4.0.jar"} spark-submit --class org.apache.spark.examples.SparkPi --master yarn spark-examples_2.11-2.4.0.jar 100ここで:
org.apache.spark.examples.SparkPi: コンパイルされた JAR パッケージ内のタスクのメインクラス。
spark-examples_2.11-2.4.0.jar: アップロードした EMR JAR リソースの名前。
他のパラメーターについては、前の例の値を使用するか、次のコマンドを実行して
spark-submitのヘルプドキュメントを表示し、必要に応じてspark-submitコマンドを変更できます。説明Spark ノードで
spark-submitコマンドの簡略化されたパラメーターを使用するには、それらをコードに追加する必要があります。 例:--executor-memory 2G。Spark ノードは、YARN のクラスターモードでのみジョブの送信をサポートします。
spark-submitを使用して送信されたタスクの場合、deploy-mode を client ではなく cluster に設定することをお勧めします。
spark-submit --help
JAR パッケージが 500 MB 以上の場合
EMR JAR リソースを作成します。
JAR パッケージが 500 MB 以上の場合、ローカルマシンから DataWorks リソースとしてアップロードすることはできません。 JAR パッケージを EMR の HDFS に保存し、その保存パスを記録することをお勧めします。 DataWorks で Spark タスクをスケジュールするときに、このパスを使用してパッケージを参照する必要があります。
EMR JAR リソースを参照します。
JAR パッケージが HDFS に保存されている場合、コードでそのパスを指定することで、EMR Spark ノードで参照できます。
[EMR Spark] ノードをダブルクリックして、そのコードエディターを開きます。
spark-submit コマンドを記述します。 次のコードは一例です。
spark-submit --master yarn --deploy-mode cluster --name SparkPi --driver-memory 4G --driver-cores 1 --num-executors 5 --executor-memory 4G --executor-cores 1 --class org.apache.spark.examples.JavaSparkPi hdfs:///tmp/jars/spark-examples_2.11-2.4.8.jar 100各項目の意味は次のとおりです。
hdfs:///tmp/jars/spark-examples_2.11-2.4.8.jar: HDFS 内の JAR パッケージの実際のパス。
org.apache.spark.examples.JavaSparkPi: コンパイルされた JAR パッケージ内のタスクのメインクラス。
他のパラメーターは実際の EMR クラスター用であり、必要に応じて構成する必要があります。 次のコマンドを実行して spark-submit のヘルプ情報を表示し、必要に応じてコマンドを変更することもできます。
重要Spark ノードで Spark-submit コマンドの簡略化されたパラメーターを使用するには、それらをコードに追加する必要があります。 例:
--executor-memory 2G。Spark ノードは、YARN のクラスターモードでのみジョブの送信をサポートします。
spark-submit を使用して送信されたタスクの場合、deploy-mode を client ではなく cluster に設定することをお勧めします。
spark-submit --help
シナリオ 2: OSS リソースを直接参照する
(オプション) 詳細パラメーターの構成
ノードの [詳細設定] で Spark 固有のプロパティパラメーターを構成できます。 Spark プロパティパラメーターの詳細については、「Spark の構成」をご参照ください。 使用可能な詳細パラメーターは、次の表に示すように、EMR クラスターの種類によって異なります。
DataLake クラスター/カスタムクラスター: EMR on ECS
詳細パラメーター | 構成の説明 |
queue | ジョブを送信するためのスケジューリングキュー。 デフォルトのキューは `default` です。 DataWorks ワークスペースに EMR クラスターを登録するときに、ワークスペースレベルの [YARN リソースキュー] を構成した場合:
EMR YARN の詳細については、「基本的なキュー構成」をご参照ください。 EMR クラスター登録時のキュー構成の詳細については、「グローバル YARN リソースキューの設定」をご参照ください。 |
priority | 優先度。 デフォルト値は 1 です。 |
FLOW_SKIP_SQL_ANALYZE | SQL 文の実行モード。 有効値:
説明 このパラメーターは、開発環境でのフローのテストと実行にのみ使用できます。 |
その他 |
|
EMR Serverless Spark クラスター
パラメーター設定の詳細については、「Spark タスクの送信パラメーターの設定」をご参照ください。
詳細パラメーター | 構成の説明 |
queue | ジョブを送信するためのスケジューリングキュー。 デフォルトのキューは `dev_queue` です。 |
priority | 優先度。 デフォルト値は 1 です。 |
FLOW_SKIP_SQL_ANALYZE | SQL 文の実行モード。 有効値:
説明 このパラメーターは、開発環境でのフローのテストと実行にのみ使用できます。 |
SERVERLESS_RELEASE_VERSION | Spark エンジンのバージョン。 デフォルトでは、[管理センター] の [クラスター管理] でクラスターに構成されている [デフォルトのエンジンバージョン] が使用されます。 タスクごとに異なるエンジンバージョンを設定するには、ここで設定できます。 |
SERVERLESS_QUEUE_NAME | リソースキューを指定します。 デフォルトでは、[管理センター] の [クラスター管理] でクラスターに構成されている [デフォルトのリソースキュー] が使用されます。 リソースの隔離と管理の要件がある場合は、キューを追加できます。 詳細については、「リソースキューの管理」をご参照ください。 |
その他 |
|
Spark クラスター: EMR ON ACK
詳細パラメーター | 構成の説明 |
queue | サポートされていません。 |
priority | サポートされていません。 |
FLOW_SKIP_SQL_ANALYZE | SQL 文の実行モード。 有効値:
説明 このパラメーターは、開発環境でのフローのテストと実行にのみ使用できます。 |
その他 |
|
Hadoop クラスター: EMR on ECS
詳細パラメーター | 構成の説明 |
queue | ジョブを送信するためのスケジューリングキュー。 デフォルトのキューは `default` です。 DataWorks ワークスペースに EMR クラスターを登録するときに、ワークスペースレベルの [YARN リソースキュー] を構成した場合:
EMR YARN の詳細については、「基本的なキュー構成」をご参照ください。 EMR クラスター登録時のキュー構成の詳細については、「グローバル YARN リソースキューの設定」をご参照ください。 |
priority | 優先度。 デフォルト値は 1 です。 |
FLOW_SKIP_SQL_ANALYZE | SQL 文の実行モード。 有効値:
説明 このパラメーターは、開発環境でのフローのテストと実行にのみ使用できます。 |
USE_GATEWAY | Gateway クラスターを介してジョブを送信するかどうかを指定します。 有効値:
説明 このノードが存在するクラスターが Gateway クラスターに関連付けられていない場合、このパラメーターを |
その他 |
|
SQL タスクの実行
ツールバーで、
アイコンをクリックします。 [パラメーター] ダイアログボックスで、作成したスケジューリングリソースグループを選択し、[実行] をクリックします。説明パブリックネットワークまたは VPC の計算リソースにアクセスするには、計算リソースとのネットワーク接続テストに合格したスケジューリングリソースグループを使用する必要があります。 詳細については、「ネットワーク接続ソリューション」をご参照ください。
タスクのリソースグループを変更するには、[パラメーターを指定して実行]
アイコンをクリックし、ターゲットリソースグループを選択します。EMR Spark ノードを使用してデータをクエリする場合、最大 10,000 件のデータレコードを返すことができ、合計データサイズは 10 MB を超えることはできません。
アイコンをクリックして SQL 文を保存します。(オプション) スモークテストを実行します。
開発環境でスモークテストを実行する場合は、ノードの送信時またはノードの送信後に行うことができます。 詳細については、「スモークテストの実行」をご参照ください。
ステップ 3: ノードスケジューリングの構成
システムがノード上のタスクを定期的に実行するようにする場合は、ノードの構成タブの右側のナビゲーションウィンドウで [プロパティ] をクリックして、ビジネス要件に基づいてタスクスケジューリングプロパティを構成できます。 詳細については、「概要」をご参照ください。
ステップ 4: ノードタスクの公開
ノード上のタスクが構成された後、タスクをコミットしてデプロイする必要があります。 タスクをコミットしてデプロイすると、システムはスケジューリング構成に基づいてタスクを定期的に実行します。
上部のツールバーの
アイコンをクリックしてタスクを保存します。上部のツールバーの
アイコンをクリックしてタスクをコミットします。[送信] ダイアログボックスで、[変更の説明] パラメーターを構成します。 次に、ビジネス要件に基づいて、タスクをコミットした後にタスクコードをレビューするかどうかを決定します。
説明タスクをコミットする前に、[プロパティ] タブで [再実行] および [親ノード] パラメーターを構成する必要があります。
コードレビュー機能を使用して、タスクのコード品質を確保し、無効なタスクコードによるタスク実行エラーを防ぐことができます。 コードレビュー機能を有効にすると、コミットされたタスクコードは、タスクコードがコードレビューに合格した後にのみデプロイできます。 詳細については、「コードレビュー」をご参照ください。
標準モードのワークスペースを使用している場合は、タスクをコミットした後に本番環境にタスクをデプロイする必要があります。 ノードにタスクをデプロイするには、ノードの構成タブの右上隅にある [デプロイ] をクリックします。 詳細については、「ノードのデプロイ」をご参照ください。
その他の操作
タスクをコミットしてデプロイすると、タスクはスケジューリング構成に基づいて定期的に実行されます。 対応するノードの構成タブの右上隅にある [オペレーションセンター] をクリックしてオペレーションセンターに移動し、タスクのスケジューリングステータスを表示できます。 詳細については、「定期タスクの表示と管理」をご参照ください。
よくある質問
Q: ノードの実行がタイムアウトしました。 どうすればよいですか?
A: リソースグループとクラスター間のネットワーク接続を確認してください。 計算リソースリストページに移動して、リソースを初期化します。 表示されるダイアログボックスで、[再初期化] をクリックし、初期化が成功したことを確認します。


アイコンをクリックします。 作成したサーバーレスリソースグループを選択して、EMR Spark ノードを実行します。 タスクが完了したら、コンソールに出力される 