での Amazon の Spark 演算子での垂直的自動スケーリングEMRの使用 EKS - Amazon EMR

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

での Amazon の Spark 演算子での垂直的自動スケーリングEMRの使用 EKS

Amazon 7.0 EMR 以降では、Amazon EMR on EKS垂直的自動スケーリングを使用してリソース管理を簡素化できます。Amazon EMRSpark アプリケーションに提供するワークロードのニーズに合わせて、メモリとCPUリソースを自動的に調整します。詳細については、「Amazon EMR Spark ジョブで垂直的自動スケーリングを使用する」を参照してください。

このセクションでは、垂直的自動スケーリングを使用するように Spark 演算子を設定する方法について説明します。

前提条件

続行する前に、以下の設定を完了していることを確認してください。

  • で Amazon の Spark 演算子EMRを設定する EKS」のステップを完了します。

  • (オプション) 以前に古いバージョンの Spark 演算子をインストールした場合は、 SparkApplication/ を削除しますScheduledSparkApplication CRD。

    kubectl delete crd sparkApplication kubectl delete crd scheduledSparkApplication
  • Spark 演算子をインストールする」のステップを完了します。ステップ 3 では、インストールコマンドに以下の行を追加して、演算子にウェブフックを許可します。

    --set webhook.enable=true
  • Amazon EMR on EKS の垂直的自動スケーリングのセットアップ」のステップを完了します。

  • Amazon S3 の場所にあるファイルへのアクセスを許可します。

    1. S3 アクセス許可JobExecutionRoleを持つ でドライバーおよびオペレーターサービスアカウントに注釈を付けます。

      kubectl annotate serviceaccount -n spark-operator emr-containers-sa-spark eks.amazonaws.com/role-arn=JobExecutionRole kubectl annotate serviceaccount -n spark-operator emr-containers-sa-spark-operator eks.amazonaws.com/role-arn=JobExecutionRole
    2. その名前空間のジョブ実行ロールの信頼ポリシーを更新します。

      aws emr-containers update-role-trust-policy \ --cluster-name cluster \ --namespace ${Namespace}\ --role-name iam_role_name_for_job_execution
    3. ジョブ実行IAMロールのロール信頼ポリシーを編集し、 を serviceaccountから emr-containers-sa-spark-*-*-xxxxに更新しますemr-containers-sa-*

      { "Effect": "Allow", "Principal": { "Federated": "OIDC-provider" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringLike": { "OIDC": "system:serviceaccount:${Namespace}:emr-containers-sa-*" } } }
    4. Amazon S3 をファイルストレージとして使用している場合は、yaml ファイルに次のデフォルトを追加します。

      hadoopConf: # EMRFS filesystem fs.s3.customAWSCredentialsProvider: com.amazonaws.auth.WebIdentityTokenCredentialsProvider fs.s3.impl: com.amazon.ws.emr.hadoop.fs.EmrFileSystem fs.AbstractFileSystem.s3.impl: org.apache.hadoop.fs.s3.EMRFSDelegate fs.s3.buffer.dir: /mnt/s3 fs.s3.getObject.initialSocketTimeoutMilliseconds: "2000" mapreduce.fileoutputcommitter.algorithm.version.emr_internal_use_only.EmrFileSystem: "2" mapreduce.fileoutputcommitter.cleanup-failures.ignored.emr_internal_use_only.EmrFileSystem: "true" sparkConf: # Required for EMR Runtime spark.driver.extraClassPath: /usr/lib/hadoop-lzo/lib/*:/usr/lib/hadoop/hadoop-aws.jar:/usr/share/aws/aws-java-sdk/*:/usr/share/aws/emr/emrfs/conf:/usr/share/aws/emr/emrfs/lib/*:/usr/share/aws/emr/emrfs/auxlib/*:/usr/share/aws/emr/security/conf:/usr/share/aws/emr/security/lib/*:/usr/share/aws/hmclient/lib/aws-glue-datacatalog-spark-client.jar:/usr/share/java/Hive-JSON-Serde/hive-openx-serde.jar:/usr/share/aws/sagemaker-spark-sdk/lib/sagemaker-spark-sdk.jar:/home/hadoop/extrajars/* spark.driver.extraLibraryPath: /usr/lib/hadoop/lib/native:/usr/lib/hadoop-lzo/lib/native:/docker/usr/lib/hadoop/lib/native:/docker/usr/lib/hadoop-lzo/lib/native spark.executor.extraClassPath: /usr/lib/hadoop-lzo/lib/*:/usr/lib/hadoop/hadoop-aws.jar:/usr/share/aws/aws-java-sdk/*:/usr/share/aws/emr/emrfs/conf:/usr/share/aws/emr/emrfs/lib/*:/usr/share/aws/emr/emrfs/auxlib/*:/usr/share/aws/emr/security/conf:/usr/share/aws/emr/security/lib/*:/usr/share/aws/hmclient/lib/aws-glue-datacatalog-spark-client.jar:/usr/share/java/Hive-JSON-Serde/hive-openx-serde.jar:/usr/share/aws/sagemaker-spark-sdk/lib/sagemaker-spark-sdk.jar:/home/hadoop/extrajars/* spark.executor.extraLibraryPath: /usr/lib/hadoop/lib/native:/usr/lib/hadoop-lzo/lib/native:/docker/usr/lib/hadoop/lib/native:/docker/usr/lib/hadoop-lzo/lib/native

Spark 演算子で垂直的自動スケーリングを使用してジョブを実行する

Spark 演算子を使用して Spark アプリケーションを実行する前に、「前提条件」のステップを完了する必要があります。

Spark 演算子で垂直的自動スケーリングを使用するには、Spark アプリケーション仕様のドライバーに次の設定を追加して、垂直的自動スケーリングを有効にします。

dynamicSizing: mode: Off signature: "my-signature"

この設定は垂直的自動スケーリングを有効にし、ジョブの署名を選択できる必須の署名設定です。

設定とパラメータ値の詳細については、「 EMRでの Amazon の垂直的自動スケーリングの設定EKS」を参照してください。デフォルトでは、ジョブは垂直的自動スケーリングのモニタリング専用 [オフ] モードで送信されます。このモニタリング状態では、自動スケーリングを実行しなくてもリソースレコメンデーションを計算して表示できます。詳細については、「垂直的自動スケーリングモード」を参照してください。

以下は、垂直的自動スケーリングを使用するために必要な設定spark-pi.yamlを含む という名前のサンプルSparkApplication定義ファイルです。

apiVersion: "sparkoperator.k8s.io/v1beta2" kind: SparkApplication metadata: name: spark-pi namespace: spark-operator spec: type: Scala mode: cluster image: "895885662937.dkr.ecr.us-west-2.amazonaws.com/spark/emr-7.2.0:latest" imagePullPolicy: Always mainClass: org.apache.spark.examples.SparkPi mainApplicationFile: "local:///usr/lib/spark/examples/jars/spark-examples.jar" sparkVersion: "3.4.1" dynamicSizing: mode: Off signature: "my-signature" restartPolicy: type: Never volumes: - name: "test-volume" hostPath: path: "/tmp" type: Directory driver: cores: 1 coreLimit: "1200m" memory: "512m" labels: version: 3.4.1 serviceAccount: emr-containers-sa-spark volumeMounts: - name: "test-volume" mountPath: "/tmp" executor: cores: 1 instances: 1 memory: "512m" labels: version: 3.4.1 volumeMounts: - name: "test-volume" mountPath: "/tmp"

次に、以下のコマンドを使用して、Spark アプリケーションを送信します。これにより、spark-pi という名前の SparkApplication オブジェクトも作成されます。

kubectl apply -f spark-pi.yaml

Spark 演算子を使用して Spark にアプリケーションを送信する方法の詳細については、「」のspark-on-k8s-operatorドキュメントのSparkApplicationの使用」を参照してください GitHub。

垂直的自動スケーリング機能の検証

垂直的自動スケーリングが送信されたジョブで正しく機能することを確認するには、kubectl を使用して verticalpodautoscaler カスタムリソースを取得し、スケーリングの推奨事項を確認してください。

kubectl get verticalpodautoscalers --all-namespaces \ -l=emr-containers.amazonaws.com/dynamic.sizing.signature=my-signature

このクエリの出力は以下のようになります。

NAMESPACE NAME MODE CPU MEM PROVIDED AGE spark-operator ds-p73j6mkosvc4xeb3gr7x4xol2bfcw5evqimzqojrlysvj3giozuq-vpa Off 580026651 True 15m

出力が類似していない場合やエラーコードが含まれている場合は、「Amazon EMR on EKS 垂直自動スケーリングのトラブルシューティング」を参照して、問題の解決に役立つ手順をご覧ください。

ポッドとアプリケーションを削除するには、次のコマンドを実行します。

kubectl delete sparkapplication spark-pi