EMR Serverless を使用して S3 Express One Zone にデータを取得する - Amazon EMR

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

EMR Serverless を使用して S3 Express One Zone にデータを取得する

Amazon EMR リリース 7.2.0 以降では、Amazon S3 Express One Zone ストレージクラスで EMR Serverless を使用して、ジョブとワークロードを実行する際のパフォーマンスを向上させることができます。S3 Express One Zone は、最もレイテンシーの影響を受けやすいアプリケーションに 1 桁のミリ秒単位で一貫したデータアクセスを提供する、高パフォーマンスの単一ゾーンの Amazon S3 ストレージクラスです。リリース時点で、S3 Express One Zone は、Amazon S3 の中でレイテンシーが最も低く、パフォーマンスの最も高いクラウドオブジェクトストレージを提供しています。

前提条件

  • S3 Express One Zone のアクセス許可 - S3 Express One Zone が S3 オブジェクトに対して GETLISTPUT などのアクションを最初に実行すると、ストレージクラスがユーザーに代わって CreateSession を呼び出します。S3A コネクタが CreateSession API を呼び出せるように、お使いの IAM ポリシーで s3express:CreateSession アクセス許可を付与する必要があります。このアクセス許可ポリシーの例については、「S3 Express One Zone の使用を開始する」を参照してください。

  • S3A コネクタ - S3 Express One Zone ストレージクラスを使用する Amazon S3 バケットのデータにアクセスするように Spark クラスターを設定するには、Apache Hadoop コネクタ S3A を使用する必要があります。コネクタを使用するには、すべての S3 URI が s3a スキームを使用していることを確認してください。使用していない場合は、s3 スキームと s3n スキーム用にファイルシステム実装を変更してください。

s3 スキームを変更するには、以下のクラスター設定を指定します。

[ { "Classification": "core-site", "Properties": { "fs.s3.impl": "org.apache.hadoop.fs.s3a.S3AFileSystem", "fs.AbstractFileSystem.s3.impl": "org.apache.hadoop.fs.s3a.S3A" } } ]

s3n スキームを変更するには、以下のクラスター設定を指定します。

[ { "Classification": "core-site", "Properties": { "fs.s3n.impl": "org.apache.hadoop.fs.s3a.S3AFileSystem", "fs.AbstractFileSystem.s3n.impl": "org.apache.hadoop.fs.s3a.S3A" } } ]

S3 Express One Zone の使用を開始する

S3 Express One Zone の使用を開始するには、次の手順に従います。

  1. VPC エンドポイントを作成します。エンドポイント com.amazonaws.us-west-2.s3express を VPC エンドポイントに追加します。

  2. Amazon EMR Serverless の使用を開始する」に従って、Amazon EMR リリースラベル 7.2.0 以降でアプリケーションを作成します。

  3. 新しく作成された VPC エンドポイント、プライベートサブネットグループ、セキュリティグループを使用するようにアプリケーションを設定します

  4. CreateSession アクセス許可をジョブの実行ロールに追加します。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Resource": "*", "Action": [ "s3express:CreateSession" ] } ] }
  5. ジョブを実行します。S3 Express One Zone バケットにアクセスするには、S3A スキームを使用する必要があります。

    aws emr-serverless start-job-run \ --application-id <application-id> \ --execution-role-arn <job-role-arn> \ --name <job-run-name> \ --job-driver '{ "sparkSubmit": { "entryPoint": "s3a://<DOC-EXAMPLE-BUCKET>/scripts/wordcount.py", "entryPointArguments":["s3a://<DOC-EXAMPLE-BUCKET>/emr-serverless-spark/output"], "sparkSubmitParameters": "--conf spark.executor.cores=4 --conf spark.executor.memory=8g --conf spark.driver.cores=4 --conf spark.driver.memory=8g --conf spark.executor.instances=2 --conf spark.hadoop.fs.s3a.change.detection.mode=none --conf spark.hadoop.fs.s3a.endpoint.region={<AWS_REGION>} --conf spark.hadoop.fs.s3a.select.enabled=false --conf spark.sql.sources.fastS3PartitionDiscovery.enabled=false }'