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

DataWorks:EMR Shell ノード

最終更新日:Nov 09, 2025

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

前提条件

  • ノードを開発する前に、公式の dataworks_emr_base_task_pod イメージに基づいて カスタムイメージ を作成し、Data Studio でイメージを使用して コンポーネント環境をカスタマイズします。

    たとえば、カスタムイメージを作成する際に、Spark JAR パッケージを置き換えたり、特定の ライブラリファイル、または JAR パッケージ を含めたりすることができます。

  • Alibaba Cloud EMR クラスターを作成し、DataWorks にバインドしていること。 詳細については、「Data Studio (新バージョン): EMR 計算リソースのバインド」をご参照ください。

  • (オプション) Resource Access Management (RAM) ユーザーの場合は、タスク開発用のワークスペースに追加され、[開発者] または [ワークスペース管理者] ロールが割り当てられていることを確認してください。 ワークスペース管理者ロールには広範な権限があります。 このロールは慎重に付与してください。 メンバーの追加に関する詳細については、「ワークスペースへのメンバーの追加」をご参照ください。

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

制限事項

  • このタイプのノードは、サーバーレスリソースグループ (推奨) または専用スケジューリングリソースグループでのみ実行できます。 Data Studio でイメージを使用するには、サーバーレスリソースグループを使用する必要があります。

  • DataWorks で DataLake またはカスタムクラスターのメタデータを管理する場合は、まずクラスターで EMR-HOOK を設定する必要があります。 EMR-HOOK の設定方法の詳細については、「Hive 用に EMR-HOOK を設定する」をご参照ください。

    説明

    クラスターで EMR-HOOK が設定されていない場合、メタデータをリアルタイムで表示したり、監査ログを生成したり、データリネージを表示したり、DataWorks で EMR 関連の管理タスクを実行したりすることはできません。

  • spark-submit を使用して送信されるタスクについては、deploy-mode を client ではなく cluster に設定することをお勧めします。

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

  • EMR Shell ノードは Python ファイルの実行をサポートしていません。 Shell ノード を使用して Python ファイルを実行できます。

手順

  1. EMR Shell ノードのノードエディターページで、ノードを開発します。

    Shell コードの開発

    シナリオに基づいて、次のいずれかの方法を選択できます。

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

    DataWorks では、ローカルマシンから Data Studio にリソースをアップロードして、そのリソースを参照できます。 DataLake クラスターを使用する場合は、次の手順に従って EMR JAR リソースを参照する必要があります。 EMR Shell ノードが DataWorks ページからアップロードできない大規模なリソースに依存している場合は、そのリソースを Hadoop 分散ファイルシステム (HDFS) に保存し、コードで参照できます。

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

      1. 詳細については、「Resource Management」をご参照ください。 初期データと JAR パッケージの準備 で生成された JAR パッケージを、JAR リソースの emr/jars ディレクトリに保存します。 次に、[アップロード] をクリックして JAR リソースをアップロードします。

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

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

      image

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

      1. 作成した [EMR Shell] ノードを開き、コードエディターページに移動します。

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

      3. リソースを参照すると、参照文が [EMR Shell] ノードのコードエディターに自動的に追加されます。 次に、次のコマンドを実行します。 コマンド内のリソースパッケージ、バケット名、およびパス情報はデモンストレーションのみを目的としています。 実際の情報に置き換える必要があります。

      ##@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 文を使用して、ノードから Object Storage Service (OSS) リソースを直接参照できます。 EMR ノードを実行すると、DataWorks はコードで指定された OSS リソースをローカルマシンに自動的にロードします。 この方法は、EMR タスクが JAR 依存関係を必要とするか、スクリプトに依存するシナリオでよく使用されます。 参照フォーマットは次のとおりです。

    ossref://{endpoint}/{bucket}/{object}
    • [endpoint]: OSS にアクセスするために使用されるエンドポイント。 このパラメーターを空のままにすると、EMR クラスターと同じリージョンにある OSS バケットのみを使用できます。

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

    • [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.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!
      ...

    EMR Shell ノードのスケジューリングパラメーターの設定

    Shell エディターでタスクコードを開発し、${variable_name} 形式で変数を定義できます。 次に、ノードエディターページの右側にある [スケジュール] タブの [スケジューリングパラメーター] セクションで、変数に値を割り当てます。 これにより、ノードが実行されるようにスケジュールされたときに、パラメーターを動的に渡すことができます。 スケジューリングパラメーターの使用方法の詳細については、「サポートされているスケジューリングパラメーターの形式」をご参照ください。 次のコードは例です。

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

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

    • Shell コマンド: /usr/bin および /bin ディレクトリ内の ls や echo などの Shell コマンド。

    • Yarn コンポーネント: hadoop、hdfs、および yarn。

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

    • Sqoop コンポーネント: sqoop-export、sqoop-import、および sqoop-import-all-tables。

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

    Shell タスクの実行

    1. [デバッグ] タブで、[計算リソース][リソースグループ] を設定します。

      説明
      • タスクの実行に必要なリソースに基づいて、[スケジューリング用 CU] を設定することもできます。 デフォルト値は 0.25 CU です。

      • 必要に応じて [イメージ] 情報を設定できます。

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

    2. ツールバーで [実行] をクリックして Shell タスクを実行します。

  2. ノードタスクを定期的に実行するには、必要に応じてノードのスケジューリングプロパティを設定できます。 詳細については、「ノードのスケジューリングプロパティの設定」をご参照ください。

    説明

    コンポーネント環境をカスタマイズするには、公式の dataworks_emr_base_task_pod イメージに基づいて カスタムイメージ を作成し、Data Studio でイメージを使用 できます。

    たとえば、カスタムイメージを作成する際に、Spark JAR パッケージを置き換えたり、特定の ライブラリファイル、または JAR パッケージ を含めたりすることができます。

  3. ノードタスクを設定した後、ノードをデプロイします。 詳細については、「ノードとワークフローのデプロイ」をご参照ください。

  4. タスクが公開された後、オペレーションセンターで定期タスクの実行ステータスを表示できます。 詳細については、「オペレーションセンターの概要」をご参照ください。

リファレンス