プロジェクトでは、データ開発のためのジョブを作成できます。
背景情報
このトピックでは、以下の内容について説明します。
前提条件
プロジェクトを作成済みであるか、プロジェクトに追加されている必要があります。詳細については、「プロジェクト管理」をご参照ください。
ジョブの作成
-
データプラットフォームのプロジェクトページに移動します。
-
お使いの Alibaba Cloud アカウントで E-MapReduce コンソールにログインします。
-
トップナビゲーションバーで、リージョンとリソースグループを選択します。
-
Data Development タブをクリックします。
-
-
編集するプロジェクトの行で、[ジョブの編集] をクリックします。
-
ジョブを作成します。
-
左側のペインで、対象のフォルダを右クリックし、[新しいジョブ] を選択します。
説明フォルダを右クリックして、[新しいサブフォルダ]、[フォルダ名の変更]、Delete Folder などの他の操作を実行することもできます。
-
[新しいジョブ] ダイアログボックスで、ジョブ名 と [説明] を入力し、ジョブタイプ ドロップダウンリストからジョブタイプを選択します。
Alibaba Cloud E-MapReduce のデータ開発では、Shell、Hive、Hive SQL、Spark、SparkSQL、Spark Shell、Spark Streaming、MR、Sqoop、Pig、Flink、Streaming SQL、Presto SQL、Impala SQL のジョブタイプをサポートしています。
説明ジョブタイプ は、ジョブ作成後に変更することはできません。
-
OK をクリックします。
ジョブを作成した後、その設定と編集ができます。
-
ジョブの設定
さまざまなタイプのジョブの開発と設定方法の詳細については、「ジョブ」をご参照ください。このセクションでは、ジョブの 基本設定、Advanced Settings、[共有ライブラリ]、Alert Settings について説明します。
-
[ジョブの編集] ページで、右上隅にある ジョブ設定 をクリックします。
-
ジョブ設定 パネルで、基本情報を設定します。
パラメーター
説明
ジョブの概要
ジョブ名
作成したジョブの名前です。
ジョブタイプ
作成したジョブのタイプです。
Retries After Failure
ジョブが失敗した後にリトライする回数です。0 から 5 までの値を選択できます。
Policy upon Failure
ジョブが失敗した場合に適用するポリシーです。以下のオプションが利用可能です:
-
[現在のワークフローを一時停止]:ジョブが失敗した場合、現在のワークフローを一時停止します。
-
[次のジョブの実行を続行]:現在のジョブが失敗した場合、ワークフロー内の次のジョブに進みます。
ビジネス要件に応じて、[最新のジョブコンテンツとパラメーターを使用] スイッチをオンまたはオフにできます。
-
オフ:リトライでは元のジョブコンテンツとパラメーターが使用されます。
-
オン:リトライでは最新のジョブコンテンツとパラメーターが使用されます。
説明
右側の 編集 をクリックして、ジョブの説明を修正します。
ランタイムリソース
アイコンをクリックして、JAR パッケージや UDF など、ジョブが依存するリソースを追加します。まずリソースを OSS にアップロードし、その後 [ランタイムリソース] セクションで追加する必要があります。
設定パラメーター
ジョブコードで参照される変数の値を指定します。${variable_name} 形式を使用してコード内で変数を参照できます。
アイコンをクリックしてキーと値を追加します。値を暗号化するかどうかを選択できます。キーは変数名で、値は変数の値です。スケジュールされた開始時刻に基づいて時間変数を設定することもできます。詳細については、「ジョブの日付を設定する」をご参照ください。 -
-
ジョブ設定 パネルで、Advanced Settings タブをクリックします。
パラメーター
説明
モード
-
送信ノード:ジョブが送信されるノードです。詳細については、「ジョブ送信モード」をご参照ください。以下のモードが利用可能です:
-
[ワーカーノードで送信]:YARN がリソースを割り当てた後、ランチャーがワーカーノードからジョブを送信します。
-
[ヘッダー/ゲートウェイノードで送信]:ジョブはヘッダー/ゲートウェイノードで直接実行されます。
-
-
最大予想ランタイム:0 から 10,800 秒。
環境変数
ジョブ実行のための環境変数を追加します。ジョブスクリプト内で直接環境変数をエクスポートすることもできます。
-
例 1:コンテンツが
echo ${ENV_ABC}の Shell ジョブで、環境変数ENV_ABC=12345を設定した場合、echoコマンドの出力は12345になります。 -
例 2:コンテンツが
java -jar abc.jarの Shell ジョブで、abc.jar のコンテンツが以下のようになっている場合:public static void main(String[] args) {System.out.println(System.getEnv("ENV_ABC"));}返される結果は
12345です。ここで環境変数を設定することは、以下のスクリプトを実行することと同じです:export ENV_ABC=12345 java -jar abc.jar
Scheduling Parameters
YARN キュー、メモリ、vCore、優先度、送信ユーザーなど、ジョブのスケジューリング情報を設定します。これらのパラメーターを設定しない場合、Hadoop クラスターのデフォルト値が使用されます。
説明メモリ設定は、ランチャーのメモリクォータを設定します。
-
-
ジョブ設定 パネルで、[共有ライブラリ] タブをクリックします。
[依存ライブラリ] エリアで、ライブラリ一覧 を指定します。
ジョブの実行は、特定のデータソース関連のライブラリファイルに依存する場合があります。Alibaba Cloud E-MapReduce は、これらをスケジューリングサービスリポジトリ内の共有ライブラリとして提供します。ジョブを作成する際には、使用する依存ライブラリのバージョンを指定する必要があります。例:
sharedlibs:streamingsql:datasources-bundle:2.0.0。 -
ジョブ設定 パネルで、Alert Settings タブをクリックします。
パラメーター
説明
Failed
ジョブが失敗した場合に、ユーザーアラートグループまたは DingTalk アラートグループに通知を送信します。
起動タイムアウト
ジョブの起動がタイムアウトした場合に、ユーザーアラートグループまたは DingTalk アラートグループに通知を送信します。
実行タイムアウト時
ジョブの実行がタイムアウトした場合に、ユーザーアラートグループまたは DingTalk アラートグループに通知を送信します。
ジョブへのアノテーションの追加
データ開発中に、ジョブコンテンツに特定のアノテーションを追加することで、ジョブパラメーターを追加できます。アノテーションのフォーマットは次のとおりです:
!!! @<AnnotationName>: <AnnotationContent>
!!! 文字は行の先頭にインデントなしで配置する必要があります。1行に1つのアノテーションを使用してください。
以下のアノテーションがサポートされています。
|
アノテーション名 |
説明 |
例 |
|
rem |
コメント行を示します。 |
|
|
env |
環境変数を追加します。 |
|
|
var |
カスタム変数を追加します。 |
|
|
resource |
リソースファイルを追加します。 |
|
|
sharedlibs |
依存ライブラリを追加します。このアノテーションは Streaming SQL ジョブでのみ有効です。複数のライブラリを指定する場合は、カンマ (,) で区切ります。 |
|
|
scheduler.queue |
送信キューを設定します。 |
|
|
scheduler.vmem |
要求メモリを MB 単位で設定します。 |
|
|
scheduler.vcores |
要求する vCore の数を設定します。 |
|
|
scheduler.priority |
リクエストの優先度を設定します。値の範囲は 1 から 100 です。 |
|
|
scheduler.user |
送信ユーザー名を設定します。 |
|
アノテーションを使用する際の注意点:
-
システムは無効なアノテーションを自動的に無視します。
-
アノテーションで指定されたジョブパラメーターは、ジョブ設定で構成されたパラメーターをオーバーライドします。
ジョブの実行
-
ジョブを実行します。
-
ジョブページで、右上隅にある 実行 をクリックします。
-
Run Job ダイアログボックスで、リソースグループと実行クラスターを選択します。
-
OK をクリックします。
-
-
ジョブの実行ログを表示します。
-
ジョブの実行が開始された後、Log タブで実行ログを表示できます。
2021-09-02 16:37:54.653 [main] INFO c.a.e.f.a.j.l.impl.CommonShellJobLauncherImpl - [COMMAND][FJI-xxx] submit user: hadoop 2021-09-02 16:37:54.654 [main] INFO c.a.e.f.a.j.l.impl.CommonShellJobLauncherImpl - [COMMAND][FJI-3xxx] envs(override): {EMR_FLOW_AGENT_JOB_ID=FJI-xxx, PATH=/mnt/disk3/yarn/usercache/hadoop/appcache/application_1630311773326_0022/container_1630311773326_0022_01_000001, EMR_FLOW_CLUSTER_ID=C-xxx, FLOW_SKIP_SQL_ANALYZE=false, EMR_FLOW_JOB_INSTANCE_ID="xxx", EMR_FLOW_NODE_INSTANCE_ID="xxx", EMR_FLOW_JOB_ID="xxx"} 2021-09-02 16:37:54.654 [main] INFO c.a.e.f.a.j.l.impl.CommonShellJobLauncherImpl - [COMMAND][xxx] Executing command line: [bash, -c, echo 234] 2021-09-02 16:37:54.655 [main] INFO c.a.e.f.a.j.l.impl.CommonShellJobLauncherImpl - [COMMAND][FJI-3xxx] Shell Executor type: com.aliyun.emr.flow.agent.common.shell.JavaShellExecutor. ===================JOB OUTPUT BEGIN=================== 234 ===================JOB OUTPUT END===================== 2021-09-02 16:37:55.159 [main] INFO c.a.e.f.a.j.l.impl.CommonShellJobLauncherImpl - [COMMAND][FJI-3E78xxx] Finished command line, exit code=0. Thu Sep 02 16:37:55 CST 2021 [JobLauncherRunner] INFO Closing job launcher ... 2021-09-02 16:37:55.161 [main] INFO c.a.emr.flow.agent.jobs.launcher.JobLauncherBase - [FJI-3E788xxx] Closing ... 2021-09-02 16:37:55.162 [main] INFO c.a.e.f.a.j.l.impl.CommonShellJobLauncherImpl - [FJI-3E788F6xxx] Stopping command executor ... Thu Sep 02 16:37:55 CST 2021 [YarnJobLauncherAM] INFO Closing launcher am ... 2021-09-02 16:37:55.167 [main] INFO o.a.hadoop.yarn.client.api.impl.AMRMClientImpl - Waiting for application to be successfully unregistered. Thu Sep 02 16:37:55 CST 2021 [YarnJobLauncherAM] INFO Emr flow launcher is quit. 2021-09-02 16:37:55.385 [Shutdown-FJI-3E788F67373BAECD_0] INFO c.a.emr.flow.agent.jobs.launcher.JobLauncherBase - [FJI-3E78xxx] Call shutdown hook. 2021-09-02 16:37:55.385 [Shutdown-FJI-3E788F67373BAECD_0] INFO c.a.emr.flow.agent.jobs.launcher.JobLauncherBase - [FJI-378xxx] Closing ... 2021-09-02 16:37:55.385 [Shutdown-FJI-3E788F67373BAECD_0] INFO c.a.emr.flow.agent.jobs.launcher.JobLauncherBase - [FJI-3E78xxx] This launcher is closed already, skip. ######END_OF_LOG###### -
Execution Records タブをクリックして、ジョブの実行記録を表示します。
-
レコードの Details をクリックして O&M Center に移動し、ジョブインスタンスに関する詳細情報を表示します。
-
ジョブで利用可能な操作
[ジョブの編集] エリアで、ジョブ名を右クリックして以下の操作を実行できます。
|
アクション |
説明 |
|
ジョブの複製 |
現在のジョブの設定を複製して、同じフォルダに新しいジョブを作成します。 |
|
ジョブ名の変更 |
ジョブの名前を変更します。 |
|
ジョブ削除 |
ジョブの削除は、そのジョブがワークフローに関連付けられていない場合、または関連付けられたワークフローが実行中でもスケジュールされてもいない場合にのみ可能です。 |
ジョブ送信モード
データ開発モジュールにおけるランチャーである spark-submit プロセスは、Spark ジョブを送信するために使用される Spark コマンドです。通常、600 MB 以上のメモリを消費します。ジョブ設定パネルのメモリ設定は、ランチャーのメモリクォータを設定します。
以下の2つのジョブ送信モードが利用可能です:
|
ジョブ送信モード |
説明 |
|
ヘッダー/ゲートウェイノードで送信 |
spark-submit プロセスはヘッダー/ゲートウェイノードで実行され、YARN によって監視されません。spark-submit は大量のメモリを消費するため、このモードで多数のジョブを実行すると、ヘッダー/ゲートウェイノードのリソースに負荷がかかり、クラスター全体の安定性が損なわれるリスクがあります。 |
|
ワーカーノードで送信 |
spark-submit プロセスはワーカーノードで実行され、YARN コンテナを占有し、YARN によって監視されます。このモードは、ヘッダー/ゲートウェイノードのリソース負荷を軽減できます。 |
Alibaba Cloud E-MapReduce クラスターでは、ジョブインスタンスが消費するメモリは次のように計算されます:
ジョブインスタンスが消費するメモリ = ランチャーが消費するメモリ + ユーザージョブが消費するメモリ
Spark ジョブの場合、ユーザージョブが消費するメモリはさらに次のように分類できます:
ジョブが消費するメモリ = spark-submit (論理モジュール、プロセスではない) が消費するメモリ + ドライバーが消費するメモリ + エグゼキュータが消費するメモリ
ドライバーの物理メモリの場所は、次の表に示すように、ジョブの設定によって異なります。
|
Spark 実行モード |
spark-submit とドライバー |
プロセスの詳細 |
|
|
Yarn-Client モード |
ジョブ送信プロセスは LOCAL モードを使用 |
spark-submit とドライバーは同じプロセスで実行されます。 |
ジョブ送信プロセスはヘッダー/ゲートウェイノードで実行され、YARN によって監視されません。 |
|
ジョブ送信プロセスは YARN モードを使用 |
ジョブ送信プロセスはワーカーノードで実行され、YARN コンテナを占有し、YARN によって監視されます。 |
||
|
Yarn-Cluster モード |
ドライバーは spark-submit とは別のプロセスで実行されます。 |
ドライバーは YARN コンテナを占有します。 |
|