Sparkは汎用ビッグデータ分析エンジンです。 Sparkは、高性能、使いやすさ、そして幅広い用途という特徴があります。 Sparkを使用して複雑なメモリ分析を実行し、大規模で低レイテンシのデータ分析アプリケーションを構築できます。 DataWorksは、DataWorksでSparkタスクを開発し、定期的にスケジュールするために使用できるE-MapReduce (EMR) Sparkノードを提供します。 このトピックでは、EMR Sparkノードの作成方法について説明し、EMR Sparkノードの機能がどのように動作するかの例を示します。
前提条件
ノードの開発を開始する前に、必要に応じてコンポーネント環境をカスタマイズできます。 そのためには、公式イメージ
dataworks_emr_base_task_pod
に基づいてカスタムイメージを作成し、DataStudioで使用できます。たとえば、カスタムイメージを作成するときに、Spark JARパッケージを置き換えたり、特定の
ライブラリ
、ファイル
、またはJARパッケージ
を含めたりできます。EMRクラスタがDataWorksに登録されています。 詳細については、「DataStudio (旧バージョン): EMR計算リソースの関連付け」をご参照ください。
(RAMユーザーを使用してタスクを開発する場合に必要) RAMユーザーは、メンバーとしてDataWorksワークスペースに追加され、[開発] ロールまたは [ワークスペースマネージャー] ロールが割り当てられます。 ワークスペースマネージャーロールには、必要以上の権限があります。 ワークスペースマネージャーロールを割り当てる際には注意してください。 メンバーの追加方法の詳細については、「ワークスペースメンバーを追加し、ロールを割り当てる」をご参照ください。
リソースグループが購入され、構成されています。 構成には、ワークスペースとの関連付けとネットワーク構成が含まれます。 詳細については、「6サーバーレスリソースグループを作成して使用する」をご参照ください。
ワークフローが作成されます。 さまざまなタイプの計算エンジンの開発操作は、DataStudioのワークフローに基づいて実行されます。 したがって、ノードを作成する前に、ワークフローを作成する必要があります。 詳細については、「ワークフローの作成」をご参照ください。
特定の開発環境を使用してタスクを開発する場合は、DataWorksコンソールでカスタムイメージを作成できます。 詳細については、「イメージの管理」をご参照ください。
制限
このタイプのノードは、スケジューリング用に サーバーレスリソースグループ または専用リソースグループでのみ実行できます。 サーバーレスリソースグループを使用することをお勧めします。
DataWorksでDataLakeまたはカスタムクラスタのメタデータを管理する場合は、最初にクラスタでEMR-HOOKを構成する必要があります。 クラスタでEMR-HOOKを構成しないと、メタデータがリアルタイムで表示されず、監査ログが生成されず、データ系列がDataWorksに表示されません。 また、関連するEMRガバナンスタスクを実行できません。 EMR-HOOKの構成方法の詳細については、「Spark SQL拡張機能を使用してデータ系列と履歴アクセス情報を記録する」をご参照ください。
EMR on ACKページで作成されたSparkクラスタのデータ系列を表示することはできません。 EMR Serverless Sparkクラスタのデータ系列を表示できます。
EMR on ACKページで作成されたSparkクラスタとEMR Serverless Sparkクラスタの場合、Object Storage Service (OSS) REFメソッドのみを使用してOSSリソースを参照し、リソースをOSSにアップロードできます。 Hadoop Distributed File System (HDFS) にリソースをアップロードすることはできません。
DataLakeおよびカスタムクラスタの場合、OSS REFメソッドを使用してOSSリソースを参照し、リソースをOSSまたはHDFSにアップロードできます。
注意事項
ワークスペースに関連付けられているEMRクラスタのSparkコンポーネントに対してRanger権限制御を有効にしている場合は、次の点に注意してください。
デフォルトイメージを使用してSparkタスクを実行する場合、Ranger権限制御はデフォルトで有効になります。
カスタムイメージを使用してSparkタスクを実行する場合は、[チケットを送信]してテクニカルサポートに連絡し、イメージをアップグレードする必要があります。 これにより、Sparkタスクを実行するときにRanger権限制御を有効にすることができます。
準備: Sparkタスクコードを準備し、JARパッケージを取得する
DataWorksを使用してEMR Sparkタスクをスケジュールする前に、EMRでSparkタスクコードを準備し、タスクコードをコンパイルしてJARパッケージを生成する必要があります。 Sparkタスクコードの準備の詳細については、「概要」をご参照ください。
取得したJARパッケージをDataWorksコンソールにアップロードする必要があります。 これにより、DataWorksはEMR Sparkタスクを定期的にスケジュールできます。
ステップ 1: EMR Sparkノードを作成する
DataStudioページに移動します。
DataWorksコンソールにログインします。 上部のナビゲーションバーで、目的のリージョンを選択します。 左側のナビゲーションウィンドウで、 を選択します。 表示されるページで、ドロップダウンリストから目的のワークスペースを選択し、[データ開発に移動] をクリックします。
EMR Sparkノードを作成します。
目的のワークフローを見つけ、ワークフロー名を右クリックし、
を選択します。説明または、ポインタを [作成] アイコンの上に移動し、
を選択することもできます。[ノードの作成] ダイアログボックスで、[名前]、[エンジンインスタンス]、[ノードタイプ]、[パス] パラメータを構成します。 [確認] をクリックします。 EMR Sparkノードの構成タブが表示されます。
説明ノード名には、文字、数字、アンダースコア(_) 、ピリオド(.)を含めることができます。
ステップ 2: Sparkタスクを開発する
ビジネス要件に基づいて、次のいずれかの方法を使用して、EMR Sparkノードの構成タブでSparkタスクを開発できます。
(推奨) オンプレミス マシンからDataStudioにリソースをアップロードしてから、リソースを参照します。 詳細については、このトピックの「方法 1: EMR JARリソースをアップロードして参照する」セクションを参照してください。
OSS REFメソッドを使用してOSSリソースを参照します。 詳細については、このトピックの「方法 2: OSSリソースを参照する」セクションを参照してください。
方法 1: EMR JARリソースをアップロードして参照する
DataWorksでは、リソースを参照する前に、オンプレミス マシンからDataStudioにリソースをアップロードできます。 SparkタスクのコードがEMRでコンパイルされた後に生成されるJARパッケージを取得して保存する必要があります。 JARパッケージの保存方法は、JARパッケージのサイズによって異なります。
JARパッケージをEMR JARリソースとしてDataWorksコンソールにアップロードし、リソースをコミットできます。 また、JARパッケージをEMRのHDFSに保存することもできます。 EMR on ACKページで作成されたSparkクラスタまたはEMR Serverless Sparkクラスタの場合、HDFSにリソースをアップロードすることはできません。
JARパッケージのサイズが 200 MB未満の場合
EMR JARリソースを作成します。
JARパッケージをオンプレミス マシンからDataWorksコンソールにEMR JARリソースとしてアップロードできます。 これにより、DataWorksコンソールでJARパッケージを視覚的に管理できます。 EMR JARリソースを作成したら、リソースをコミットする必要があります。 詳細については、「EMRリソースを作成して使用する」をご参照ください。
説明EMR JARリソースを初めて作成するときに、JARパッケージのアップロード後にJARパッケージをOSSに保存する場合は、最初に表示されるプロンプトに従って承認を実行する必要があります。
EMR JARリソースを参照します。
作成した [EMR Spark] ノードの名前をダブルクリックして、ノードの構成タブに移動します。
[EMR] フォルダの [リソース] にある目的の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 は、アップロードしたJARパッケージの名前です。
EMR Sparkノードのコードを書き直し、spark-submitコマンドを追加します。 次のサンプルコードは参照用です。
説明EMR Sparkノードのコードを記述するときにコメントを追加することはできません。 コメントを追加すると、EMR Sparkノードを実行するときにエラーが報告されます。 次のサンプルコードを参照して、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: アップロードしたJARパッケージの名前。
他のパラメータの設定は変更せずにそのまま使用できます。 また、次のコマンドを実行して、
spark-submit
コマンドの使用に関するヘルプドキュメントを表示し、ビジネス要件に基づいてspark-submit
コマンドを変更することもできます。説明spark-submit
コマンドを実行することで簡略化されたパラメータ (例:--executor-memory 2G
) をEMR Sparkノードで使用する場合、そのパラメータをEMR Sparkノードのコードに追加する必要があります。YARN上のSparkノードを使用してジョブを送信できるのは、ノードがクラスタモードの場合のみです。
spark-submit
を使用してノードをコミットする場合は、deploy-modeをclientではなくclusterに設定することをお勧めします。
spark-submit --help
JARパッケージのサイズが 200 MB以上の場合
JARパッケージをEMRのHDFSに保存します。
JARパッケージをオンプレミス マシンからDataWorksコンソールにDataWorksリソースとしてアップロードすることはできません。 JARパッケージをEMRのHDFSに保存し、JARパッケージの保存パスを記録することをお勧めします。 これにより、DataWorksを使用してSparkタスクをスケジュールするときに、このパスでJARパッケージを参照できます。
JARパッケージを参照します。
EMR SparkノードのコードでJARパッケージの保存パスを指定することで、JARパッケージを参照できます。
作成した [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-submitコマンドを変更することもできます。
重要spark-submitコマンドを実行することで簡略化されたパラメータ (例:
--executor-memory 2G
) をEMR Sparkノードで使用する場合、そのパラメータをEMR Sparkノードのコードに追加する必要があります。YARN上のSparkノードを使用してジョブを送信できるのは、ノードがクラスタモードの場合のみです。
spark-submitを使用してノードをコミットする場合は、deploy-modeをclientではなくclusterに設定することをお勧めします。
spark-submit --help
方法 2: OSSリソースを参照する
(オプション) 詳細パラメータを構成する
現在のノードの構成タブの [詳細設定] タブで、Spark固有のパラメータを構成できます。 パラメータの構成方法の詳細については、「Spark Configuration」を参照してください。 次の表に、さまざまなタイプのEMRクラスタに構成できる詳細パラメータを示します。
DataLakeクラスタまたはカスタムクラスタ: EMR on ECSページで作成
詳細パラメータ | 説明 |
queue | ジョブがコミットされるスケジューリングキュー。 デフォルト値: default。 EMRクラスタをDataWorksワークスペースに登録するときに、ワークスペースレベルの [YARNキュー] を構成した場合、次の構成が適用されます。
EMR YARNの詳細については、「YARNスケジューラ」を参照してください。 EMRクラスタを登録するときのキュー構成の詳細については、「グローバルYARNキューを構成する」を参照してください。 |
priority | 優先度。 デフォルト値: 1。 |
FLOW_SKIP_SQL_ANALYZE | SQL文の実行方法。 有効値:
説明 このパラメータは、DataWorksワークスペースの開発環境でのテストにのみ使用できます。 |
その他 |
|
Hadoopクラスタ: EMR on ECSページで作成
詳細パラメータ | 説明 |
queue | ジョブがコミットされるスケジューリングキュー。 デフォルト値: default。 EMRクラスタをDataWorksワークスペースに登録するときに、ワークスペースレベルの [YARNキュー] を構成した場合、次の構成が適用されます。
EMR YARNの詳細については、「YARNスケジューラ」を参照してください。 EMRクラスタを登録するときのキュー構成の詳細については、「グローバルYARNキューを構成する」を参照してください。 |
priority | 優先度。 デフォルト値: 1。 |
FLOW_SKIP_SQL_ANALYZE | SQL文の実行方法。 有効値:
説明 このパラメータは、DataWorksワークスペースの開発環境でのテストにのみ使用できます。 |
USE_GATEWAY | 現在のノードでジョブをコミットするためにゲートウェイクラスタを使用するかどうかを指定します。 有効値:
説明 ノードが属するEMRクラスタがゲートウェイクラスタに関連付けられていないが、USE_GATEWAYパラメータが |
その他 |
|
Sparkクラスタ: EMR on ACKページで作成
詳細パラメータ | 説明 |
queue | このパラメータはサポートされていません。 |
priority | このパラメータはサポートされていません。 |
FLOW_SKIP_SQL_ANALYZE | SQL文の実行方法。 有効値:
説明 このパラメータは、DataWorksワークスペースの開発環境でのテストにのみ使用できます。 |
その他 |
|
EMR Serverless Sparkクラスタ
パラメータ設定の詳細については、「spark-submit CLIを使用してSparkジョブを送信する」トピックの「ステップ 3: Sparkジョブを送信する」セクションを参照してください。
詳細パラメータ | 説明 |
queue | ジョブがコミットされるスケジューリングキュー。 デフォルト値: dev_queue。 |
priority | 優先度。 デフォルト値: 1。 |
FLOW_SKIP_SQL_ANALYZE | SQL文の実行方法。 有効値:
説明 このパラメータは、DataWorksワークスペースの開発環境でのテストにのみ使用できます。 |
SERVERLESS_RELEASE_VERSION | Sparkエンジンのバージョン。 デフォルトでは、[EMRクラスタの登録] ページの [デフォルトエンジンバージョン] パラメータで指定された値が使用されます。 [EMRクラスタの登録] ページに移動するには、次の操作を実行します。 [設定センター] ページに移動します。 左側のナビゲーションウィンドウで、[クラスタ管理] をクリックします。 [クラスタ管理] ページで、[クラスタの登録] をクリックし、[クラスタタイプの選択] ダイアログボックスで [E-MapReduce] を選択します。 このパラメータを構成して、さまざまなタイプのタスクに異なるエンジンバージョンを指定できます。 |
SERVERLESS_QUEUE_NAME | リソースキュー。 デフォルトでは、[EMRクラスタの登録] ページの [デフォルトリソースキュー] パラメータで指定された値が使用されます。 リソースの隔離と管理の要件を満たすために、キューを追加できます。 詳細については、「リソースキューの管理」を参照してください。 |
その他 |
|
SQL文を実行する
上部ツールバーの
アイコンをクリックします。 [パラメータ] ダイアログボックスで、スケジューリング用に作成されたリソースグループを選択し、[実行] をクリックします。
説明インターネットまたは virtual private cloud (VPC) 経由で計算ソースにアクセスする場合は、計算ソースに接続されているスケジューリング用リソースグループを使用します。 詳細については、「ネットワーク接続ソリューション」を参照してください。
後続の操作でリソースグループを変更する場合は、
[(パラメータ付きで実行)] アイコンをクリックして、[パラメータ] ダイアログボックスでリソースグループを変更できます。
EMR Sparkノードを使用してデータのクエリを実行する場合、最大 10,000 件のデータレコードを返すことができ、返されるデータレコードの合計サイズは 10 MBを超えることはできません。
上部ツールバーの
アイコンをクリックして、SQL文を保存します。
オプション。 スモークテストを実行します。
ノードをコミットするとき、またはノードをコミットした後に、開発環境でノードのスモークテストを実行できます。 詳細については、「スモークテストを実行する」を参照してください。
ステップ 3: スケジューリングプロパティを構成する
システムにノードのタスクを定期的に実行させる場合は、ノードの構成タブの右側のナビゲーションウィンドウで [プロパティ] をクリックして、ビジネス要件に基づいてタスクスケジューリングプロパティを構成できます。 詳細については、「概要」を参照してください。
タスクをコミットする前に、[プロパティ] タブで [再実行] パラメータと [親ノード] パラメータを構成する必要があります。
コンポーネント環境をカスタマイズする必要がある場合は、公式イメージ
dataworks_emr_base_task_pod
に基づいてカスタムイメージを作成し、DataStudioで使用できます。たとえば、カスタムイメージを作成するときに、Spark JARパッケージを置き換えたり、特定の
ライブラリ
、ファイル
、またはJARパッケージ
を含めたりできます。
ステップ 4: タスクをデプロイする
ノードのタスクが構成されたら、タスクをコミットしてデプロイする必要があります。 タスクをコミットしてデプロイすると、システムはスケジューリング構成に基づいてタスクを定期的に実行します。
上部ツールバーの
アイコンをクリックして、タスクを保存します。
上部ツールバーの
アイコンをクリックして、タスクをコミットします。
[送信] ダイアログボックスで、[変更の説明] パラメータを構成します。 次に、タスクのコミット後にタスクコードを確認するかどうかを、ビジネス要件に基づいて決定します。
説明タスクをコミットする前に、[プロパティ] タブで [再実行] パラメータと [親ノード] パラメータを構成する必要があります。
コードレビュー機能を使用して、タスクのコード品質を確保し、無効なタスクコードによって発生するタスク実行エラーを防ぐことができます。 コードレビュー機能を有効にすると、コミットされたタスクコードは、コードレビューに合格した後にのみデプロイできます。 詳細については、「コードレビュー」を参照してください。
標準モードのワークスペースを使用する場合は、タスクをコミットした後に本番環境にデプロイする必要があります。 ノードにタスクをデプロイするには、ノードの構成タブの右上隅にある [デプロイ] をクリックします。 詳細については、「ノードのデプロイ」を参照してください。
次のステップ
タスクをコミットしてデプロイすると、タスクはスケジューリング構成に基づいて定期的に実行されます。 対応するノードの構成タブの右上隅にある [オペレーションセンター] をクリックしてオペレーションセンターに移動し、タスクのスケジューリングステータスを表示できます。 詳細については、「自動トリガーされたタスクの表示と管理」を参照してください。