すべてのプロダクト
Search
ドキュメントセンター

DataWorks:EMR Shellノードの作成

最終更新日:Jul 10, 2025

特定のビジネス要件を満たすために、DataWorksでE-MapReduce (EMR) Shellノードを作成できます。カスタムShellスクリプトを指定し、スクリプトを実行して、データ処理、Hadoopコンポーネントの呼び出し、ファイル管理などの機能を使用できます。このトピックでは、DataWorksでEMR Shellノードを構成および使用して、Shellスクリプトを指定および実行する方法について説明します。

前提条件

  • ノードを開発する前に、コンポーネント環境をカスタマイズする必要がある場合は、公式イメージ dataworks_emr_base_task_pod に基づいてカスタムイメージを作成し、DataStudioでカスタムイメージを使用できます。

    たとえば、カスタムイメージを作成するときに、Spark JARパッケージを置き換えたり、特定の librariesfiles、または JAR packages を含めたりできます。

  • Alibaba Cloud EMRクラスタが作成され、DataWorksに登録されています。詳細については、「DataStudio (旧バージョン): EMR計算リソースを関連付ける」をご参照ください。

  • (RAMユーザーを使用してタスクを開発する場合に必要) RAMユーザーがDataWorksワークスペースにメンバーとして追加され、[開発] または [ワークスペース管理者] ロールが割り当てられています。ワークスペース管理者ロールには、必要以上の権限があります。ワークスペース管理者ロールを割り当てる場合は注意してください。メンバーの追加方法の詳細については、「ワークスペースメンバーを追加し、ロールを割り当てる」をご参照ください。

  • サーバーレスリソースグループが購入され、構成されています。構成には、ワークスペースとの関連付けとネットワーク構成が含まれます。詳細については、「6サーバーレスリソースグループを作成して使用する」をご参照ください。

  • DataStudioでワークフローが作成されます。

    DataStudioでは、さまざまなタイプの計算エンジンの開発操作がワークフローに基づいて実行されます。したがって、ノードを作成する前に、ワークフローを作成する必要があります。詳細については、「ワークフローを作成する」をご参照ください。

  • サードパーティ製パッケージは、使用するリソースグループに基づいてインストールされます。DataWorksリソースグループでPythonスクリプトを実行するときは、サードパーティ製パッケージを参照する必要があります。

    • サーバーレスリソースグループ (推奨) を使用する場合は、イメージ管理機能を使用してサードパーティ製パッケージをインストールできます。詳細については、「イメージの管理」をご参照ください。

    • スケジューリング専用の排他的リソースグループを使用する場合は、O&Mアシスタント機能を使用してサードパーティ製パッケージをインストールできます。詳細については、「O&Mアシスタント機能を使用する」をご参照ください。

制限

  • このタイプのノードは、サーバーレスリソースグループまたはスケジューリング専用の排他的リソースグループでのみ実行できます。サーバーレスリソースグループを使用することをお勧めします。 DataStudioでイメージを使用する必要がある場合は、サーバーレス計算リソースグループを使用してください。

  • DataWorksでDataLakeまたはカスタムクラスタのメタデータを管理する場合は、最初にクラスタでEMR-HOOKを構成する必要があります。クラスタでEMR-HOOKを構成しないと、メタデータがリアルタイムで表示されず、監査ログが生成されず、DataWorksにデータ系列が表示されません。 EMRガバナンスタスクも実行できません。 EMR-HOOKの構成方法については、「Hive拡張機能を使用してデータ系列と履歴アクセス情報を記録する」をご参照ください。

  • spark-submitを使用してノードをコミットする場合は、deploy-modeをclientではなくclusterに設定することをお勧めします。

  • EMR Shellノードは、EMRクラスタではなく、DataWorksのスケジューリング用リソースグループで実行されます。 EMRコンポーネントでサポートされている特定のコマンドを実行できますが、EMRリソースに関する情報を直接読み取ることはできません。 EMR ShellノードでEMRリソースを参照する場合は、最初にリソースをDataWorksにアップロードする必要があります。詳細については、「EMR JARリソースを作成して使用する」をご参照ください。

  • EMR Shellノードを使用してPythonスクリプトを実行することはできません。 Pythonスクリプトを実行するには、Shellノードを使用します。

ステップ 1: EMR Shellノードを作成する

  1. DataStudioページに移動します。

    DataWorksコンソールにログインします。 上部のナビゲーションバーで、目的のリージョンを選択します。 左側のナビゲーションウィンドウで、[データ開発とO&M] > [データ開発] を選択します。 表示されるページで、ドロップダウンリストから目的のワークスペースを選択し、[データ開発に移動] をクリックします。

  2. EMR Shellノードを作成します。

    1. 目的のワークフローを見つけ、ワークフローの名前を右クリックし、[ノードの作成] > [EMR] > [EMR Shell] を選択します。

      説明

      または、ポインタを [作成] アイコンの上に移動し、[ノードの作成] > [EMR] > [EMR Shell] を選択することもできます。

    2. [ノードの作成] ダイアログボックスで、[名前][エンジンインスタンス][ノードタイプ][パス] パラメータを構成します。 [確認] をクリックします。 EMR Shellノードの構成タブが表示されます。

      説明

      ノード名には、文字、数字、アンダースコア (_)、ピリオド (.) のみを含めることができます。

ステップ 2: EMR Shellタスクを開発する

ビジネス要件に基づいて、次のいずれかの方法を使用して、EMR Shellノードの構成タブでShellタスクを開発できます。

  • オンプレミス マシンからDataStudioにリソースをアップロードし、そのリソースを参照します。 詳細については、このトピックの 方法 1: EMR JARリソースをアップロードして参照する セクションを参照してください。 この方法を使用することをお勧めします。

  • OSS REFメソッドを使用してOSSリソースを参照します。 詳細については、このトピックの 方法 2: OSSリソースを参照する セクションを参照してください。

方法 1: EMR JARリソースをアップロードして参照する

DataWorksでは、リソースを参照する前に、オンプレミス マシンからDataStudioにリソースをアップロードできます。 使用するEMRクラスタがDataLakeクラスタの場合、次の手順を実行してEMR JARリソースを参照できます。 EMR Shellノードが大量のリソースに依存している場合、DataWorksコンソールを使用してリソースをアップロードすることはできません。 この場合、Hadoop Distributed File System (HDFS) にリソースを保存し、EMR Shellノードのコードでリソースを参照できます。

  1. EMR JARリソースを作成します。

    EMR JARリソースの作成方法の詳細については、「EMRリソースを作成して使用する」をご参照ください。 この例では、初期データとJARリソースパッケージを準備する セクションで生成されたJARパッケージは、emr/jars ディレクトリに保存されます。 このディレクトリは、JARリソースを保存するために使用されます。 EMR JARリソースを初めて使用する場合は、[承認] をクリックして、DataWorksがEMR JARリソースにアクセスすることを承認します。 次に、[アップロード] をクリックしてJARリソースをアップロードします。新建JAR资源

  2. EMR JARパッケージを参照します。

    1. [EMR Shell] ノードを開きます。 ノードの構成タブが表示されます。

    2. [EMR] フォルダの [リソース] の下にある参照するリソースを見つけ、リソース名を右クリックし、[リソースパスの挿入] を選択します。 この例では、リソースは onaliyun_mr_wordcount-1.0-SNAPSHOT.jar です。引用资源

    3. [EMR Shell] ノードの構成タブに ##@resource_reference{""} 形式の情報が表示されている場合は、コードリソースが参照されています。 次に、次のコードを実行します。 次のコードの情報は、実際の情報に置き換える必要があります。 情報には、リソースパッケージ名、バケット名、ディレクトリが含まれます。

      ##@resource_reference{"onaliyun_mr_wordcount-1.0-SNAPSHOT.jar"}
      onaliyun_mr_wordcount-1.0-SNAPSHOT.jar cn.apache.hadoop.onaliyun.examples.EmrWordCount oss://onaliyun-bucket-2/emr/datas/wordcount02/inputs oss://onaliyun-bucket-2/emr/datas/wordcount02/outputs
      説明

      EMR Shellノードのコードを記述するときにコメントを追加することはできません。

方法 2: OSSリソースを参照する

現在のノードは、OSS REF メソッドを使用してOSSリソースを参照できます。 ノードでタスクを実行すると、DataWorksはノードコードで指定されたOSSリソースを自動的にロードします。 この方法は、EMRタスクでJAR依存関係が必要な場合、またはEMRタスクがスクリプトに依存する必要がある場合によく使用されます。 参照形式:

ossref://{endpoint}/{bucket}/{object}
  • endpoint: OSSのエンドポイント。 endpointパラメータを空のままにすると、現在のEMRクラスタと同じリージョンにあるOSSバケット内のリソースのみを参照できます。

  • bucket: OSSでオブジェクトを保存するために使用されるコンテナ。 各 [bucket] には一意の名前があります。 OSSコンソールにログインして、現在のログインアカウント内のすべての [bucket] を表示できます。

  • object: [bucket] に保存されているファイル名またはパス。

  1. 目的のOSSバケットにオブジェクトをアップロードします。 この例では、emr_shell_test.sh が使用されます。 サンプルコンテンツ:

    #!/bin/sh
    echo "Hello, DataWorks!"
  2. EMR ShellノードでOSSリソースを参照します。

    sh ossref://oss-cn-shanghai.aliyuncs.com/test-oss-of-dataworks/emr_shell_test.sh
    説明

    oss-cn-shanghai.aliyuncs.com はOSSの endpointtest-oss-of-dataworksbucket の名前、emr_shell_test.shobject の名前です。

    emr_shell_test.sh の出力:

    ...
    >>> [2024-10-24 15:46:01][INFO   ][CommandExecutor       ]: Process ready to execute. command: sh ./emr_shell_test.sh
    >>> [2024-10-24 15:46:01][INFO   ][CommandExecutor       ]: Command state update to RUNNING
    >>> [2024-10-24 15:46:01][INFO   ][CommandExecutor       ]: Process start to execute...
    Process Output>>> Hello, DataWorks!
    ...

EMR Shellノードのスケジューリングパラメータを構成する

EMR Shellノードの構成タブで、ノードコードを開発します。 ノードコードで ${Variable} 形式で変数を定義し、[プロパティ] タブの [スケジューリングパラメータ] セクションで値として変数に割り当てられるスケジューリングパラメータを構成できます。 これにより、ノードの実行がスケジュールされると、スケジューリングパラメータの値がノードコードで動的に置き換えられます。 スケジューリングパラメータの使用方法の詳細については、「スケジューリングパラメータのサポートされている形式」をご参照ください。 サンプルコード:

DD=`date`;
echo "hello world, $DD"
## スケジューリングパラメータがサポートされています。
echo ${var};
説明

EMR DataLakeクラスタを使用する場合、次のコマンドラインもサポートされています。

  • Shellコマンド: /usr/bin および /bin の下のShellコマンド (ls、echoなど)。

  • YARN: hadoop、hdfs、yarn。

  • Spark: spark-submit。

  • Sqoop: sqoop-export、sqoop-import、sqoop-import-all-tables。

Sqoopサービスを使用するには、リソースグループの IP アドレスを、EMRクラスタのメタデータを保存するために使用されるApsaraDB RDSインスタンスの IP アドレスホワイトリストに追加する必要があります。

Shellタスクを実行する

  1. ツールバーの 高级运行 アイコンをクリックします。 [パラメータ] ダイアログボックスで、[リソースグループ名] ドロップダウンリストから目的のリソースグループを選択し、[実行] をクリックします。

    説明
    • インターネットまたは virtual private cloud (VPC) 経由で計算リソースにアクセスする場合は、計算リソースに接続されているスケジューリング用リソースグループを使用する必要があります。 詳細については、「ネットワーク接続ソリューション」をご参照ください。

    • 後続の操作でリソースグループを変更する場合は、高级运行 (パラメータ付きで実行) アイコンをクリックして、[パラメータ] ダイアログボックスでリソースグループを変更できます。

  2. 上部ツールバーの 保存 アイコンをクリックして、Shellスクリプトを保存します。

  3. オプション。 スモークテストを実行します。

    ノードをコミットするとき、またはノードをコミットした後に、開発環境でノードのスモークテストを実行できます。 詳細については、「スモークテストを実行する」をご参照ください。

ステップ 3: スケジューリングプロパティを構成する

システムにノードのタスクを定期的に実行させる場合は、ノードの構成タブの右側のナビゲーションウィンドウで [プロパティ] をクリックして、ビジネス要件に基づいてタスクスケジューリングプロパティを構成できます。 詳細については、「概要」をご参照ください。

説明
  • タスクをコミットする前に、[プロパティ] タブで [再実行] パラメータと [親ノード] パラメータを構成する必要があります。

  • コンポーネント環境をカスタマイズする必要がある場合は、公式イメージ dataworks_emr_base_task_pod に基づいてカスタムイメージを作成し、DataStudioでカスタムイメージを使用できます。

    たとえば、カスタムイメージを作成するときに、Spark JARパッケージを置き換えたり、特定の librariesfiles、または JAR packages を含めたりできます。

ステップ 4: タスクをデプロイする

ノードのタスクが構成されたら、タスクをコミットしてデプロイする必要があります。 タスクをコミットしてデプロイすると、システムはスケジューリング構成に基づいてタスクを定期的に実行します。

  1. 上部ツールバーの 保存 アイコンをクリックして、タスクを保存します。

  2. 上部ツールバーの 提交 アイコンをクリックして、タスクをコミットします。

    [送信] ダイアログボックスで、[変更の説明] パラメータを構成します。 次に、タスクをコミットした後にタスクコードを確認するかどうかを、ビジネス要件に基づいて決定します。

    説明
    • タスクをコミットする前に、[プロパティ] タブで [再実行] パラメータと [親ノード] パラメータを構成する必要があります。

    • コードレビュー機能を使用して、タスクのコード品質を確保し、無効なタスクコードによって発生するタスク実行エラーを防ぐことができます。 コードレビュー機能を有効にすると、コミットされたタスクコードは、コードレビューに合格した後でのみデプロイできます。 詳細については、「コードレビュー」をご参照ください。

標準モードのワークスペースを使用する場合は、タスクをコミットした後に、実稼働環境にタスクをデプロイする必要があります。 ノードにタスクをデプロイするには、ノードの構成タブの右上隅にある [デプロイ] をクリックします。 詳細については、「ノードのデプロイ」をご参照ください。

次のステップ

タスクをコミットしてデプロイすると、タスクはスケジューリング構成に基づいて定期的に実行されます。 対応するノードの構成タブの右上隅にある [オペレーションセンター] をクリックしてオペレーションセンターに移動し、タスクのスケジューリングステータスを表示できます。 詳細については、「自動トリガーされたタスクを表示および管理する」をご参照ください。

参考文献

Python 2またはPython 3コマンドを使用してEMR ShellノードでPythonスクリプトを実行する方法については、「Shellノードを使用してPythonスクリプトを実行する」をご参照ください。