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

DataWorks:EMR Shell ノード

最終更新日:Jun 23, 2026

DataWorks で EMR Shell ノードを作成して、カスタムシェルスクリプトを実行し、データ処理、Hadoop コンポーネントの呼び出し、ファイル管理などの高度な操作を実行できます。このトピックでは、EMR Shell ノードを設定および使用して、Shell タスクを編集および実行する方法について説明します。

前提条件

  • ノード開発を開始する前に、カスタムコンポーネント環境が必要な場合は、公式の dataworks_emr_base_task_pod イメージに基づいてカスタムイメージを作成し、Data Studio で使用してください。詳細については、「カスタムイメージの作成」および「データ開発でのイメージの使用」をご参照ください。

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

  • Alibaba Cloud E-MapReduce クラスターを作成し、DataWorks に登録します。詳細については、「新しい Data Studio:EMR 計算リソースのアタッチ」をご参照ください。

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

    ルートアカウントを使用している場合は、このステップをスキップしてください。

制限事項

  • EMR Shell ノードは、サーバーレスリソースグループ (推奨) または専用スケジューリングリソースグループでのみ実行できます。データ開発にカスタムイメージを使用するには、サーバーレスリソースグループが必要です。

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

    説明

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

  • spark-submit でサブミットするタスクでは、デプロイモードcluster に設定してください。client モードは推奨されません。

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

  • EMR Shell ノードは、Python ファイルの実行をサポートしていません。Python ファイルを実行する場合は、Shell ノードを使用してください。

操作手順

  1. EMR Shell ノードエディターで、次の操作を実行します。

    シェルコードの開発

    特定の要件に基づいてオプションを選択できます:

    オプション1:EMR JARのアップロードと参照

    ローカルマシンから Data Studio にリソースをアップロードして参照できます。DataLake クラスターを使用している場合は、次の手順に従って EMR JAR リソースを参照してください。EMR Shell ノードが依存するリソースが大きすぎて DataWorks UI からアップロードできない場合は、リソースを HDFS に保存し、コードで参照できます。

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

      1. 詳細については、「リソース管理」をご参照ください。初期データと JAR パッケージを準備するで生成された JAR パッケージを JAR リソースディレクトリ emr/jars に格納します。Click Upload をクリックします。

      2. Storage PathData SourcesResource Group を選択します。

      3. Save をクリックします。

      [ストレージパス] には、[HDFS] を選択します。

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

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

      2. 左側のナビゲーションペインで、「リソース管理」の下にある参照するリソース (例: onaliyun_mr_wordcount-1.0-SNAPSHOT.jar) を見つけます。リソースを右クリックし、Insert Resource Path を選択します。

      3. 参照を選択すると、[EMR Shell] ノードのコード編集ページに成功メッセージが表示されます。これは、コードリソースが正常に参照されたことを示します。次に、次のコマンドを実行する必要があります。次のコマンドのリソースパッケージ、バケット名、パス情報は一例です。実際の情報に置き換えてください。

      ##@resource_reference{"onaliyun_mr_wordcount-1.0-SNAPSHOT.jar"}
      hadoop 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 リソースを自動的にロードします。

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

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

    • [object]:ファイル名やパスなど、バケット に格納されている特定のオブジェクト。

    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[エンドポイント]test-oss-of-dataworks[バケット] 名、emr_shell_test.sh[オブジェクト] ファイル名です。

      このコマンドは、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} 形式を使用して変数を定義できます。次に、ノードエディターの右側にある Scheduling Settings の下の Scheduling Parameters セクションで変数に値を割り当てます。これにより、定期実行中にパラメーターを動的に渡すことができます。スケジューリングパラメーターの詳細については、「スケジューリングパラメーターのソースと式」をご参照ください。次のコードは一例です:

    DD=`date`;
    echo "hello world, $DD"
    ## スケジューリングパラメーターと併用可能
    echo ${var};
    説明

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

    • Shell コマンド: /usr/bin/bin にある ls や echo などの Shell コマンド。

    • YARN コンポーネント: hadoophdfsyarn

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

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

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

    Shell タスクの実行

    1. Run Configuration セクションで、Compute ResourceResource Group を設定します。

      説明
      • タスクの実行に必要なリソースに基づいて、CUs for Scheduling を設定することもできます。デフォルトの CU は 0.25 です。

      • タスクの要件に応じて ミラー を選択できます。

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

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

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

    説明

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

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

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

  4. タスクをデプロイした後、オペレーションセンターでその実行ステータスを表示できます。詳細については、「オペレーションセンター入門」をご参照ください。

よくある質問

Q: 従来のスケジューリングリソースグループに hosts マッピングが設定されていますが、EMR Shell ノードで名前解決に失敗します。この問題を解決するにはどうすればよいですか?

A: EMR Shell スクリプトが新しく追加された hosts マッピングを認識できるように、設定済みのリソースグループを使用して EMR クラスターを再初期化する必要があります。計算リソースのリストページに移動し、[リソースの初期化] をクリックし、ダイアログボックスで 再度初期化 をクリックして、初期化が正常に完了したことを確認してください。

関連ドキュメント