AWS CLI を使用してジョブ実行を管理する - Amazon EMR

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS CLI を使用してジョブ実行を管理する

このページでは、AWS Command Line Interface (AWS CLI) を使用してジョブ実行を管理する方法について説明します。

ジョブ実行を構成するためのオプション

以下のオプションを使用して、ジョブ実行パラメータを設定します。

  • --execution-role-arn: ジョブの実行に使用する IAM ロールを指定する必要があります。詳細については、「Amazon EMR on EKS でのジョブ実行ロールの使用」を参照してください。

  • --release-label: Amazon EMR バージョン 5.32.0 および 6.2.0 以降を使用して Amazon EMR on EKS をデプロイできます。Amazon EMR on EKS は、以前の Amazon EMR リリースバージョンではサポートされていません。詳細については、「Amazon EMR on EKSリリース」を参照してください。

  • --job-driver: Job ドライバーは、メインジョブに入力を提供するために使用されます。これは、実行するジョブタイプの値の 1 つだけを渡すことができるユニオンタイプフィールドです。サポートされるジョブタイプには次のものが含まれます。

    • Spark 送信ジョブ - Spark 送信を通じてコマンドを実行するために使用されます。このジョブタイプを使用して、Scala、PySpark、SparkR、SparkSQL およびその他のサポートされているジョブを Spark 送信を通じて 実行できます。このジョブタイプには以下のパラメータがあります。

      • エントリポイント - これは、実行するメイン jar/py ファイルへの HCFS (Hadoop 互換ファイルシステム) 参照です。

      • EntryPointArguments - これはメイン jar/pyファイルに渡す引数の配列です。これらのパラメータの読み取りは、エントリーポイントコードを使用して処理する必要があります。配列の各引数は、カンマで区切る必要があります。EntryPointArguments には、()、{}、[] などの角括弧や丸括弧を含めることはできません。

      • SparkSubmitParameters - これらは、ジョブに送信する追加の Spark パラメータです。このパラメータを使用して、ドライバーメモリや —conf や —class などのエグゼキューターの数など、デフォルトの Spark プロパティを上書きします。詳細については、spark-submit を使用したアプリケーションの起動を参照してください。

    • Spark SQL ジョブ - Spark SQL を使用して SQL クエリファイルを実行するために使用されます。このジョブタイプを使用して SparkSQL ジョブを実行できます。このジョブタイプには以下のパラメータがあります。

      • エントリポイント - これは、実行する SQL クエリファイルへの HCFS (Hadoop 互換ファイルシステム) 参照です。

        Spark SQL ジョブに使用できるその他の Spark パラメータのリストについては、「StartJobRun API による Spark SQL スクリプトの実行」を参照してください。

  • --configuration-overrides: 設定オブジェクトを提供することで、アプリケーションのデフォルト設定を上書きできます。短縮構文を使用して、設定を指定したり、JSON ファイルの設定オブジェクトを参照したりできます。設定オブジェクトは、分類、プロパティ、オプションの入れ子になっている設定で構成されます。プロパティは、そのファイル内で上書きする設定で構成されます。単一の JSON オブジェクトで、複数のアプリケーションに複数の分類を指定できます。Amazon EMR リリースバージョンによって使用可能な設定分類は異なります。Amazon EMR の各リリースバージョンで使用可能な設定分類の一覧については、Amazon EMR on EKSリリース を参照してください。

    アプリケーションの上書きと Spark 送信パラメータで同じ設定を渡すと、Spark 送信パラメータが優先されます。完全な設定優先順位リストは、優先順位の最も高いものから最も低いものの順に表示されます。

    • SparkSession 作成時に提供される構成。

    • —conf を使用して sparkSubmitParameters の一部として提供される構成。

    • アプリケーションの上書きの一部として提供される設定。

    • リリース用に Amazon EMR によって選択された最適化された設定。

    • アプリケーションのデフォルトのオープンソース構成。

    Amazon CloudWatch または Amazon S3 を使用してジョブの実行をモニタリングするには、CloudWatch の設定の詳細を指定する必要があります。詳細については、Amazon S3 ログを使用するようにジョブ実行を設定する および Amazon CloudWatch Logs を使用するようにジョブ実行を設定する を参照してください。S3 バケットまたは CloudWatch Logs グループが存在しない場合、Amazon EMR はバケットにログをアップロードする前にそれを作成します。

  • Kubernetes 設定オプションのその他のリストについては、Kubernetes の Spark プロパティを参照してください。

    以下の Spark 設定はサポートされていません。

    • spark.kubernetes.authenticate.driver.serviceAccountName

    • spark.kubernetes.authenticate.executor.serviceAccountName

    • spark.kubernetes.namespace

    • spark.kubernetes.driver.pod.name

    • spark.kubernetes.container.image.pullPolicy

    • spark.kubernetes.container.image

      注記

      カスタマイズされた Docker イメージに spark.kubernetes.container.image を使用できます。詳細については、「EMR での Amazon の Docker イメージのカスタマイズ EKS」を参照してください。

Amazon S3 ログを使用するようにジョブ実行を設定する

ジョブの進行状況をモニタリングし、障害のトラブルシューティングをできるようにするには、Amazon S3、Amazon CloudWatch Logs、またはその両方にログ情報を送信するようにジョブを設定する必要があります。このトピックは、Amazon EMR on EKS で起動したジョブで Amazon S3 へのアプリケーションログの発行を開始するのに役立ちます。

S3 ログ IAM ポリシー

ジョブが Amazon S3 にログデータを送信できるようにするには、ジョブ実行ロールのアクセス許可ポリシーに次のアクセス許可を含める必要があります。DOC-EXAMPLE-BUCKET-LOGGING をログ記録バケットの名前に置き換えます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET-LOGGING", "arn:aws:s3:::DOC-EXAMPLE-BUCKET-LOGGING/*", ] } ] }
注記

Amazon EMR on EKS は、Amazon S3 バケットを作成することもできます。Amazon S3 バケットが利用できない場合は、IAM ポリシーに “s3:CreateBucket” アクセス許可を含めてください。

Amazon S3 にログを送信するための適切なアクセス許可を実行ロールに付与した後、「AWS CLI を使用してジョブ実行を管理する」に示すように、start-job-run リクエストの monitoringConfiguration セクションで s3MonitoringConfiguration が渡されると、ログデータは次の Amazon S3 の場所に送信されます。

  • コントローラーログ -/logUri/virtual-cluster-id/jobs/job-id/containers/pod-name/(stderr.gz/stdout.gz)

  • ドライバーログ - /logUri/virtual-cluster-id/jobs/job-id/containers/spark-application-id/spark-job-id-driver/(stderr.gz/stdout.gz)

  • エグゼキュターログ - /logUri/virtual-cluster-id/jobs/job-id/containers/spark-application-id/executor-pod-name/(stderr.gz/stdout.gz)

Amazon CloudWatch Logs を使用するようにジョブ実行を設定する

ジョブの進行状況をモニタリングし、障害のトラブルシューティングを行うには、Amazon S3、Amazon CloudWatch Logs、またはその両方にログ情報を送信するようにジョブを設定する必要があります。このトピックは、Amazon EMR on EKS で起動されたジョブでの CloudWatch Logs の使用開始に役立ちます。CloudWatch Logs について詳しくは、Amazon CloudWatch ユーザーガイドのログファイルのモニタリングを参照してください。

CloudWatch Logs IAM ポリシー

ジョブが CloudWatch Logs にログデータを送信するには、ジョブ実行ロールのアクセス許可ポリシーに次のアクセス許可を含める必要があります。my_log_group_namemy_log_stream_prefix を、それぞれ CloudWatch Logs グループとログストリームの名前に置き換えます。実行ロール ARN に適切なアクセス許可がある限り、Amazon EMR on EKS は、ロググループとログストリームが存在しない場合に作成します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogStream", "logs:DescribeLogGroups", "logs:DescribeLogStreams" ], "Resource": [ "arn:aws:logs:*:*:*" ] }, { "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:*:*:log-group:my_log_group_name:log-stream:my_log_stream_prefix/*" ] } ] }
注記

Amazon EMR on EKS はログストリームを作成することもできます。ログストリームが存在しない場合は、IAM ポリシーに "logs:CreateLogGroup" アクセス許可を含める必要があります。

実行ロールに適切なアクセス許可を付与した後、「AWS CLI を使用してジョブ実行を管理する」に示すように、start-job-run リクエストの monitoringConfiguration セクションで cloudWatchMonitoringConfiguration が渡されると、アプリケーションはそのログデータを CloudWatch Logs に送信します。

StartJobRun API で、log_group_name は CloudWatch のロググループ名であり、log_stream_prefix は CloudWatch のログストリーム名のプレフィックスです。これらのログは AWS Management Console で表示および検索できます。

  • コントローラーログ - logGroup/logStreamPrefix/virtual-cluster-id/jobs/job-id/containers/pod-name/(stderr/stdout)

  • ドライバーログ - logGroup/logStreamPrefix/virtual-cluster-id/jobs/job-id/containers/spark-application-id/spark-job-id-driver/(stderrstdout)

  • エグゼキュターログ - logGroup/logStreamPrefix/virtual-cluster-id/jobs/job-id/containers/spark-application-id/executor-pod-name/(stderr/stdout)

ジョブの実行のリスト

次の例に示すように、list-job-run を実行してジョブ実行の状態を表示できます。

aws emr-containers list-job-runs --virtual-cluster-id <cluster-id>

ジョブ実行の説明

次の例に示すように、describe-job-run を実行すると、ジョブの状態、状態の詳細、ジョブ名など、ジョブの詳細を取得できます。

aws emr-containers describe-job-run --virtual-cluster-id cluster-id --id job-run-id

ジョブ実行をキャンセルする

次の例に示すように、cancel-job-run を実行して実行中のジョブをキャンセルできます。

aws emr-containers cancel-job-run --virtual-cluster-id cluster-id --id job-run-id