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

DataWorks:EMR Shell ノード

最終更新日:Feb 05, 2026

このトピックでは、EMR Shell ノードを使用してシェルスクリプトの設定、編集、および実行を行う方法について説明します。

前提条件

  • ノードのコンポーネント環境をカスタマイズするには、公式の dataworks_emr_base_task_pod イメージに基づいてカスタムイメージを作成します。詳細については、「カスタムイメージ」および「Data Development でのイメージの使用」をご参照ください。

    たとえば、カスタムイメージを作成する際に、Spark JAR パッケージを置き換えたり、特定の librariesfiles、または JAR packages への依存関係を追加したりできます。

  • Alibaba Cloud E-MapReduce (EMR) クラスターを作成し、DataWorks に登録済みである必要があります。詳細については、「Data Studio:EMR 計算リソースの関連付け」をご参照ください。

  • (任意:RAM ユーザーの場合のみ必須)タスク開発を担当する RAM ユーザーをワークスペースに追加し、Developer または Workspace Administrator のロールを割り当てます。Workspace Administrator ロールは広範な権限を持つため、慎重に付与してください。メンバーの追加方法については、「ワークスペースへのメンバーの追加」をご参照ください。

    Alibaba Cloud アカウントを使用している場合は、この手順はスキップできます。

制限事項

  • このタスクタイプは、Serverless リソースグループ(推奨)または専用スケジューリングリソースグループでのみ実行されます。Data Development でイメージを使用する場合は、Serverless リソースグループを使用する必要があります。

  • DataWorks で Data Lake クラスターまたはカスタムクラスターのメタデータを管理するには、クラスター上で EMR-HOOK を構成する必要があります。EMR-HOOK の構成方法については、「Hive 向け EMR-HOOK の構成」をご参照ください。

    説明

    クラスター上で EMR-HOOK が構成されていない場合、DataWorks でリアルタイムのメタデータの表示、監査ログの生成、データ系統(Data Lineage)の表示、および EMR 関連のデータガバナンスタスクを実行できません。

  • spark-submit タスクでは、deploy-modeclient モードではなく cluster モードを使用します。

  • EMR Shell ノードは EMR クラスター上ではなく、DataWorks のスケジューリング用リソースグループ上で実行されます。一部の EMR コンポーネントコマンドは使用可能ですが、EMR クラスター上のリソースに直接アクセスすることはできません。リソースを参照するには、まずそのリソースを DataWorks にアップロードする必要があります。詳細については、「Resource Management」をご参照ください。

  • EMR Shell ノードでは Python ファイルの実行はサポートされていません。Shell ノード を使用して Python スクリプトを実行してください。

操作手順

  1. EMR Shell ノードエディターで、以下の手順に従います:

    シェルスクリプトの開発

    ご利用のシナリオに応じて、以下のいずれかの方法を選択します。

    方法 1:アップロード済みの JAR を参照

    ローカルマシンから DataWorks へリソースをアップロードし、コード内で参照できます。Data Lake クラスターを使用している場合は、EMR JAR リソースを参照するための以下の手順に従うことができます。リソースが UI 経由でのアップロードには大きすぎる場合は、HDFS に格納し、そこから参照してください。

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

      1. 詳細については、「Resource Management」をご参照ください。ソースデータおよび JAR パッケージの準備で生成した JAR パッケージを、emr/jars JAR リソースディレクトリに格納します。クリックしてアップロード をクリックして JAR リソースをアップロードします。

      2. ストレージパスデータソース、および リソースグループ を選択します。

      3. 保存 をクリックします。

      image

    2. EMR JAR リソースを参照します。

      1. EMR Shell ノードのコードエディターを開きます。

      2. 左側のナビゲーションウィンドウにある Resource Management で、参照したいリソース(例:onaliyun_mr_wordcount-1.0-SNAPSHOT.jar)を見つけ、右クリックして リソースを参照 を選択します。

      3. リソースを参照すると、ノードのコードエディターに成功メッセージが表示されます。その後、次のサンプルコマンドを実行し、リソースパッケージ名、バケット名、パスを実際の値に置き換えます。

      ##@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 リソースを直接参照できます。EMR ノードを実行すると、DataWorks はコードで指定された OSS リソースを自動的にローカル環境にダウンロードします。この方法は、EMR タスクが JAR 依存関係やスクリプトに依存するシナリオでよく使用されます。参照フォーマットは以下のとおりです:

    ossref://{endpoint}/{bucket}/{object}
    • endpoint:OSS サービスのパブリックエンドポイント。このパラメーターを省略した場合、OSS バケットは EMR クラスターと同じリージョン内にある必要があります。

    • Bucket:オブジェクトを格納する OSS 内のコンテナーです。各 Bucket には一意の名前があります。アカウント内のすべてのバケットは、OSS コンソールで確認できます。

    • [オブジェクト]: 特定のオブジェクト(例:ファイル名またはパス)で、[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.comendpointtest-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!
      ...

    スケジューリングパラメーターの構成

    シェルエディターでは、コード内で `${Variable_Name}` 形式で変数を定義できます。その後、ノードエディター右側の スケジューリング構成 の下にある スケジューリングパラメーター セクションで、これらの変数に値を割り当てます。これにより、スケジュール実行時にコードへ動的にパラメーターを渡すことができます。スケジューリングパラメーターの使用方法については、「スケジューリングパラメーターのソースおよび式」をご参照ください。以下のコードはサンプルです:

    DD=`date`;
    echo "hello world, $DD"
    ## スケジューリングパラメーターを使用できます。
    echo ${var};
    説明

    Data Lake クラスターを使用している場合、以下のコマンドラインツールもサポートされています。

    • シェルコマンド:/usr/bin および /bin ディレクトリ内のシェルコマンド(例:lsecho)。

    • Yarn コンポーネント:hadoophdfsyarn

    • Spark コンポーネント:spark-submit

    • Sqoop コンポーネント:sqoop-exportsqoop-importsqoop-import-all-tables など。

    これらのコンポーネントを使用する場合、リソースグループの IP アドレスを ApsaraDB RDS インスタンスの許可リストに追加する必要があります。

    シェルタスクの実行

    1. Run Configuration で、計算リソース および リソースグループ を構成します。

      説明
      • 必要に応じて、タスクが要求するリソースに基づいて スケジューリング CU も構成できます。デフォルト値は 0.25 です。

      • タスク要件に応じて イメージ を構成できます。

      • パブリックインターネットまたは VPC 経由でデータソースにアクセスするには、そのデータソースに接続可能なスケジューリング用リソースグループを使用する必要があります。詳細については、「ネットワーク接続ソリューション」をご参照ください。

    2. ツールバーで 実行 をクリックします。

  2. ノードタスクをスケジュール実行するには、そのスケジューリングプロパティを構成します。構成方法については、「ノードのスケジューリング構成」をご参照ください。

    説明

    コンポーネント環境をカスタマイズするには、公式イメージに基づいてカスタム dataworks_emr_base_task_pod を作成し、「カスタムイメージ」および「Data Development でのイメージの使用」をご参照ください。

    たとえば、カスタムイメージを作成する際に、Spark JAR パッケージを置き換えたり、特定の librariesfiles、または jar packages への依存関係を追加したりできます。

  3. ノードタスクの構成後は、必ずデプロイメントを実行する必要があります。詳細については、「ノードおよびワークフローのデプロイメント」をご参照ください。

  4. タスクがデプロイされた後、オペレーションセンターで定期実行タスクの実行ステータスを確認できます。詳細については、「オペレーションセンターの使い始め」をご参照ください。

関連トピック