Spark on MaxCompute ジョブは、ローカルモードまたはクラスターモードで実行できます。DataWorks は、クラスターモードで Spark on MaxCompute バッチジョブを実行し、他のノードタイプとの統合とスケジュールを可能にします。このトピックでは、DataWorks で Spark on MaxCompute ジョブを設定およびスケジュールする方法について説明します。
概要
Spark on MaxCompute は、オープンソースの Spark と互換性のある MaxCompute コンピューティングサービスです。コンピューティングリソースとデータ権限の統一されたシステム上に構築された Spark コンピューティングフレームワークを提供し、使い慣れた開発パターンを使用して Spark ジョブを送信および実行し、多様なデータ処理および分析のニーズに対応できます。DataWorks では、MaxCompute Spark ノードを使用して Spark on MaxCompute タスクをスケジュールおよび実行し、他のジョブと統合できます。
Spark on MaxCompute は、Java、Scala、Python での開発をサポートしており、ローカルモードまたはクラスターモードでタスクを実行できます。DataWorks で Spark on MaxCompute バッチジョブを実行する場合、DataWorks はそれらをクラスターモードで実行します。Spark on MaxCompute の実行モードの詳細については、「実行モード」をご参照ください。
権限
(オプション、RAM ユーザー向け) タスクを開発する RAM ユーザーは、[開発者] または [ワークスペース管理者] のロールを持つワークスペースのメンバーである必要があります。[ワークスペース管理者] ロールは広範な権限を持つため、慎重に割り当ててください。メンバーの追加方法の詳細については、「ワークスペースへのメンバーの追加とロールの割り当て」をご参照ください。
Alibaba Cloud アカウント (root ユーザー) を使用している場合は、このステップをスキップできます。
制限事項
MaxCompute Spark ノードで Spark 3.x を選択し、ジョブの送信に失敗した場合は、サーバーレスリソースグループを購入して使用する必要があります。詳細については、「サーバーレスリソースグループの購入と使用」をご参照ください。
前提条件
MaxCompute Spark ノードは、Java/Scala および Python で記述された Spark on MaxCompute バッチジョブの実行をサポートしています。開発手順と設定インターフェイスは言語ごとに異なります。ビジネスニーズに最も適した言語を選択してください。
Java/Scala
MaxCompute Spark ノードで Java または Scala コードを実行する前に、ローカルで Spark on MaxCompute ジョブコードを開発し、MaxCompute リソースとして DataWorks にアップロードする必要があります。次の手順に従ってください:
開発環境の準備
ご利用のオペレーティングシステムに基づいて、Spark on MaxCompute タスクを実行するための開発環境を準備します。詳細については、「Java 開発環境の準備」および「Scala 開発環境の準備」をご参照ください。
Java/Scala コードの開発
MaxCompute Spark ノードで Java または Scala コードを実行する前に、ローカルまたは既存の環境で Spark on MaxCompute コードを開発します。開発には、Spark on MaxCompute が提供するサンプルプロジェクトテンプレートの使用を推奨します。
コードのパッケージ化と DataWorks へのアップロード
コードを開発した後、パッケージ化して MaxCompute リソースとして DataWorks にアップロードします。詳細については、「MaxCompute リソースの作成と使用」をご参照ください。
Python (デフォルト)
DataWorks では、Python リソースに直接コードを記述して PySpark ジョブを開発し、MaxCompute Spark ノードを使用してジョブを送信できます。DataWorks で Python リソースを作成する方法と PySpark の開発例については、「PySpark 開発例」をご参照ください。
この方法では、DataWorks が提供するデフォルトの Python 環境を使用しますが、プリインストールされているサードパーティパッケージの数は限られています。デフォルトの環境が PySpark ジョブの依存関係の要件を満たさない場合は、「Python (カスタム Python 環境の使用)」セクションで説明されているように、カスタム Python 環境を準備できます。または、Python リソースのサポートがより優れている PyODPS 2 または PyODPS 3 ノードを使用することもできます。
Python (カスタム)
プラットフォームが提供するデフォルトの Python 環境がビジネスニーズを満たさない場合は、次の手順に従ってカスタム Python 環境を使用して Spark on MaxCompute タスクを実行します。
ローカルで Python 環境を準備する
ビジネスニーズに基づいて Python 環境を設定できます。詳細については、「PySpark でサポートされる Python のバージョンと依存関係」をご参照ください。
環境のパッケージ化と DataWorks へのアップロード
Python 環境を ZIP パッケージに圧縮し、MaxCompute リソースとして DataWorks にアップロードします。このリソースは、Spark on MaxCompute タスクの実行環境として機能します。
設定プロパティ
DataWorks は、クラスターモードで Spark on MaxCompute バッチジョブを実行します。このモードでは、プログラムのエントリーポイントである main クラスを指定する必要があります。main メソッドが Success または Fail のステータスで終了すると、Spark ジョブは終了します。さらに、spark-defaults.conf ファイルの各設定を MaxCompute Spark ノードの設定プロパティに追加する必要があります。例としては、executor インスタンスの数、メモリサイズ、spark.hadoop.odps.runtime.end.point プロパティなどがあります。
spark-defaults.conf ファイルをアップロードする必要はありません。代わりに、spark-defaults.conf ファイルの各設定を MaxCompute Spark ノードの設定プロパティに追加してください。
Java/Scala ジョブ

パラメーター | 説明 | Spark-submit コマンド |
Spark バージョン | サポートされているバージョンには、Spark 1.x、Spark 2.x、Spark 3.x があります。 説明 MaxCompute Spark ノードで Spark 3.x を選択し、ジョブの送信に失敗した場合は、サーバーレスリソースグループを購入して使用する必要があります。詳細については、「サーバーレスリソースグループの購入と使用」をご参照ください。 | — |
言語 | Java/Scala または Python を選択します。Spark on MaxCompute の開発に使用した言語を選択してください。 | — |
メイン JAR | タスクのメイン JAR リソースファイルを指定します。 リソースファイルを DataWorks にアップロードして送信する必要があります。詳細については、「MaxCompute リソースの作成と使用」をご参照ください。 |
|
設定プロパティ | ジョブを送信するための設定プロパティを指定します。次の点にご注意ください:
|
|
Main class | メインクラスの名前を指定します。このパラメーターは |
|
引数 | 必要に応じて、スペースで区切って引数を追加できます。DataWorks はスケジュールパラメーターをサポートしています。引数は スケジュールパラメーターでサポートされている値のフォーマットについては、「スケジュールパラメーターの設定」をご参照ください。 |
|
JAR リソース | このパラメーターは リソースファイルを DataWorks にアップロードして送信する必要があります。詳細については、「MaxCompute リソースの作成と使用」をご参照ください。 | リソースコマンド:
|
ファイルリソース | ファイルリソースを指定します。 |
|
アーカイブリソース | アーカイブリソースを指定します。ZIP フォーマットのリソースのみ選択できます。 |
|
Python ジョブ

パラメーター | 説明 | Spark-submit コマンド |
Spark バージョン | サポートされているバージョンには、Spark 1.x、Spark 2.x、Spark 3.x があります。 説明 MaxCompute Spark ノードで Spark 3.x を選択し、ジョブの送信に失敗した場合は、サーバーレスリソースグループを購入して使用する必要があります。詳細については、「サーバーレスリソースグループの購入と使用」をご参照ください。 | — |
言語 | Python を選択します。Spark on MaxCompute の開発に使用した言語を選択してください。 | — |
メイン Python リソース | タスクのメイン Python リソースファイルを指定します。 リソースファイルを DataWorks にアップロードして送信する必要があります。詳細については、「MaxCompute リソースの作成と使用」をご参照ください。 |
|
設定プロパティ | ジョブを送信するための設定プロパティを指定します。次の点にご注意ください:
|
|
引数 | 必要に応じて、スペースで区切って引数を追加できます。DataWorks はスケジュールパラメーターをサポートしています。引数は スケジュールパラメーターでサポートされている値のフォーマットについては、「スケジュールパラメーターの設定」をご参照ください。 |
|
Python リソース | このパラメーターは リソースファイルを DataWorks にアップロードして送信する必要があります。詳細については、「MaxCompute リソースの作成と使用」をご参照ください。 |
|
ファイルリソース | ファイルリソースを指定します。 |
|
アーカイブリソース | アーカイブリソースを指定します。ZIP フォーマットのリソースのみ選択できます。 |
|
操作手順
リソースの作成
[データ開発] ページで、左側のナビゲーションウィンドウで [リソース管理] を見つけます。[作成] をクリックし、[MaxCompute Spark Python] を選択してリソースを作成します。リソースに
spark_is_number.pyという名前を付けます。詳細については、「MaxCompute リソースの作成と使用」をご参照ください。例:# -*- coding: utf-8 -*- import sys from pyspark.sql import SparkSession try: # Python 2 の場合 reload(sys) sys.setdefaultencoding('utf8') except: # Python 3 では不要 pass if __name__ == '__main__': spark = SparkSession.builder\ .appName("spark sql")\ .config("spark.sql.broadcastTimeout", 20 * 60)\ .config("spark.sql.crossJoin.enabled", True)\ .config("odps.exec.dynamic.partition.mode", "nonstrict")\ .config("spark.sql.catalogImplementation", "odps")\ .getOrCreate() def is_number(s): try: float(s) return True except ValueError: pass try: import unicodedata unicodedata.numeric(s) return True except (TypeError, ValueError): pass return False print(is_number('foo')) print(is_number('1')) print(is_number('1.3')) print(is_number('-1.37')) print(is_number('1e3'))リソースを保存します。
作成した MaxCompute Spark ノードで、ノードとスケジュールパラメーターを設定します。詳細については、「MaxCompute Spark ノードの設定」をご参照ください。
ノードを定期的に実行する必要がある場合は、ビジネス要件に基づいてスケジュールプロパティを設定します。詳細については、「スケジュールプロパティの設定」をご参照ください。
ノードを設定した後、デプロイします。詳細については、「タスクのデプロイ」をご参照ください。
タスクをデプロイした後、運用保守センターで定期タスクの実行ステータスを表示できます。詳細については、「自動トリガータスクの表示と管理」をご参照ください。
説明MaxCompute Spark ノードは、データ開発ページのエディターから直接実行することはできません。運用保守センターからタスクを実行する必要があります。
補足インスタンスが正常に実行された後、実行ログからトラッキング URL を開くことで結果を表示できます。
関連トピック
Spark on MaxCompute タスクの一般的な開発シナリオの詳細については、次のトピックをご参照ください:
Spark FAQ:Spark ジョブの実行時によくある問題について学び、例外をより迅速にトラブルシューティングするのに役立ちます。詳細については、「Spark に関するよくある質問」をご参照ください。
Spark ジョブの診断:MaxCompute は、Spark ジョブ用に Logview ツールと Spark Web UI を提供しています。ジョブログを確認して、ジョブの送信と実行が正しいことを確認できます。詳細については、「Spark ジョブの診断」をご参照ください。