このトピックでは、EMR Shell ノードを使用してシェルスクリプトの設定、編集、および実行を行う方法について説明します。
前提条件
ノードのコンポーネント環境をカスタマイズするには、公式の
dataworks_emr_base_task_podイメージに基づいてカスタムイメージを作成します。詳細については、「カスタムイメージ」および「Data Development でのイメージの使用」をご参照ください。たとえば、カスタムイメージを作成する際に、Spark JAR パッケージを置き換えたり、特定の
libraries、files、または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-modeにclientモードではなくclusterモードを使用します。EMR Shell ノードは EMR クラスター上ではなく、DataWorks のスケジューリング用リソースグループ上で実行されます。一部の EMR コンポーネントコマンドは使用可能ですが、EMR クラスター上のリソースに直接アクセスすることはできません。リソースを参照するには、まずそのリソースを DataWorks にアップロードする必要があります。詳細については、「Resource Management」をご参照ください。
EMR Shell ノードでは Python ファイルの実行はサポートされていません。Shell ノード を使用して Python スクリプトを実行してください。
操作手順
EMR Shell ノードエディターで、以下の手順に従います:
シェルスクリプトの開発
ご利用のシナリオに応じて、以下のいずれかの方法を選択します。
方法 1:アップロード済みの JAR を参照
ローカルマシンから DataWorks へリソースをアップロードし、コード内で参照できます。Data Lake クラスターを使用している場合は、EMR JAR リソースを参照するための以下の手順に従うことができます。リソースが UI 経由でのアップロードには大きすぎる場合は、HDFS に格納し、そこから参照してください。
EMR JAR リソースを作成します。
詳細については、「Resource Management」をご参照ください。ソースデータおよび JAR パッケージの準備で生成した JAR パッケージを、
emr/jarsJAR リソースディレクトリに格納します。クリックしてアップロード をクリックして JAR リソースをアップロードします。ストレージパス、データソース、および リソースグループ を選択します。
保存 をクリックします。

EMR JAR リソースを参照します。
EMR Shell ノードのコードエディターを開きます。
左側のナビゲーションウィンドウにある Resource Management で、参照したいリソース(例:
onaliyun_mr_wordcount-1.0-SNAPSHOT.jar)を見つけ、右クリックして リソースを参照 を選択します。リソースを参照すると、ノードのコードエディターに成功メッセージが表示されます。その後、次のサンプルコマンドを実行し、リソースパッケージ名、バケット名、パスを実際の値に置き換えます。
##@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] に格納されます。
サンプル
スケジューリングパラメーターの構成
シェルエディターでは、コード内で `${Variable_Name}` 形式で変数を定義できます。その後、ノードエディター右側の スケジューリング構成 の下にある スケジューリングパラメーター セクションで、これらの変数に値を割り当てます。これにより、スケジュール実行時にコードへ動的にパラメーターを渡すことができます。スケジューリングパラメーターの使用方法については、「スケジューリングパラメーターのソースおよび式」をご参照ください。以下のコードはサンプルです:
DD=`date`; echo "hello world, $DD" ## スケジューリングパラメーターを使用できます。 echo ${var};説明Data Lake クラスターを使用している場合、以下のコマンドラインツールもサポートされています。
シェルコマンド:
/usr/binおよび/binディレクトリ内のシェルコマンド(例:ls、echo)。Yarn コンポーネント:
hadoop、hdfs、yarn。Spark コンポーネント:
spark-submit。Sqoop コンポーネント:
sqoop-export、sqoop-import、sqoop-import-all-tablesなど。
これらのコンポーネントを使用する場合、リソースグループの IP アドレスを ApsaraDB RDS インスタンスの許可リストに追加する必要があります。
シェルタスクの実行
Run Configuration で、計算リソース および リソースグループ を構成します。
説明必要に応じて、タスクが要求するリソースに基づいて スケジューリング CU も構成できます。デフォルト値は
0.25です。タスク要件に応じて イメージ を構成できます。
パブリックインターネットまたは VPC 経由でデータソースにアクセスするには、そのデータソースに接続可能なスケジューリング用リソースグループを使用する必要があります。詳細については、「ネットワーク接続ソリューション」をご参照ください。
ツールバーで 実行 をクリックします。
ノードタスクをスケジュール実行するには、そのスケジューリングプロパティを構成します。構成方法については、「ノードのスケジューリング構成」をご参照ください。
説明コンポーネント環境をカスタマイズするには、公式イメージに基づいてカスタム
dataworks_emr_base_task_podを作成し、「カスタムイメージ」および「Data Development でのイメージの使用」をご参照ください。たとえば、カスタムイメージを作成する際に、Spark JAR パッケージを置き換えたり、特定の
libraries、files、またはjar packagesへの依存関係を追加したりできます。ノードタスクの構成後は、必ずデプロイメントを実行する必要があります。詳細については、「ノードおよびワークフローのデプロイメント」をご参照ください。
タスクがデプロイされた後、オペレーションセンターで定期実行タスクの実行ステータスを確認できます。詳細については、「オペレーションセンターの使い始め」をご参照ください。
関連トピック
EMR Shell ノードで Python 2 または Python 3 コマンドを使用して Python スクリプトを実行する方法については、「Shell ノードを使用した Python スクリプトの実行」をご参照ください。
EMR Shell ノードで OSSUtils を使用する方法については、「Shell ノードでの ossutil を使用した OSS へのアクセス」をご参照ください。