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 ノードを使用してください。
操作手順
-
EMR Shell ノードエディターで、次の操作を実行します。
シェルコードの開発
特定の要件に基づいてオプションを選択できます:
オプション1:EMR JARのアップロードと参照
ローカルマシンから Data Studio にリソースをアップロードして参照できます。DataLake クラスターを使用している場合は、次の手順に従って EMR JAR リソースを参照してください。EMR Shell ノードが依存するリソースが大きすぎて DataWorks UI からアップロードできない場合は、リソースを HDFS に保存し、コードで参照できます。
-
EMR JAR リソースを作成します。
-
詳細については、「リソース管理」をご参照ください。初期データと JAR パッケージを準備するで生成された JAR パッケージを JAR リソースディレクトリ
emr/jarsに格納します。Click Upload をクリックします。 -
Storage Path、Data Sources、Resource Group を選択します。
-
Save をクリックします。
[ストレージパス] には、[HDFS] を選択します。
-
-
EMR JAR リソースを参照します。
-
作成した [EMR Shell] ノードを開き、コード編集ページに移動します。
-
左側のナビゲーションペインで、「リソース管理」の下にある参照するリソース (例:
onaliyun_mr_wordcount-1.0-SNAPSHOT.jar) を見つけます。リソースを右クリックし、Insert Resource Path を選択します。 -
参照を選択すると、[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]:ファイル名やパスなど、バケット に格納されている特定のオブジェクト。
例
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 コンポーネント:
hadoop、hdfs、yarn。 -
Spark コンポーネント:
spark-submit。 -
Sqoop コンポーネント:
sqoop-export、sqoop-import、sqoop-import-all-tablesなど。
これらのコンポーネントを使用して RDS インスタンスにアクセスする場合、リソースグループの IP アドレスを RDS の許可リストに追加する必要があります。
Shell タスクの実行
-
Run Configuration セクションで、Compute Resource と Resource Group を設定します。
説明-
タスクの実行に必要なリソースに基づいて、CUs for Scheduling を設定することもできます。デフォルトの CU は
0.25です。 -
タスクの要件に応じて ミラー を選択できます。
-
パブリックネットワークまたは VPC 環境のデータソースにアクセスするには、データソースに接続できるスケジューリングリソースグループを使用する必要があります。詳細については、「ネットワーク接続ソリューション」をご参照ください。
-
-
ツールバーで Run をクリックして Shell タスクを実行します。
-
-
ノードタスクを定期的に実行するには、そのスケジューリングプロパティを設定する必要があります。詳細については、「ノードのスケジューリングプロパティの設定」をご参照ください。
説明コンポーネント環境をカスタマイズする必要がある場合は、公式イメージ
dataworks_emr_base_task_podに基づいてカスタムイメージを作成し、データ開発でイメージを使用することができます。たとえば、カスタムイメージを作成する際に、Spark JAR パッケージを置き換えたり、特定の
ライブラリ、ファイル、またはJAR パッケージに依存したりできます。 -
ノードを設定した後、デプロイしてください。詳細については、「ノードとワークフローのデプロイ」をご参照ください。
-
タスクをデプロイした後、オペレーションセンターでその実行ステータスを表示できます。詳細については、「オペレーションセンター入門」をご参照ください。
よくある質問
Q: 従来のスケジューリングリソースグループに hosts マッピングが設定されていますが、EMR Shell ノードで名前解決に失敗します。この問題を解決するにはどうすればよいですか?
A: EMR Shell スクリプトが新しく追加された hosts マッピングを認識できるように、設定済みのリソースグループを使用して EMR クラスターを再初期化する必要があります。計算リソースのリストページに移動し、[リソースの初期化] をクリックし、ダイアログボックスで 再度初期化 をクリックして、初期化が正常に完了したことを確認してください。
関連ドキュメント
-
EMR Shell ノードで Python 2 または Python 3 コマンドを使用して Python スクリプトを実行する方法については、「ShellタイプノードでのPythonスクリプトの実行」をご参照ください。
-
EMR Shell ノードで ossutil ツールを使用する方法については、「Shellタイプノードでのossutilの使用」をご参照ください。