Amazon EMR Serverless でのサーバーレスストレージの使用 - Amazon EMR

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

Amazon EMR Serverless でのサーバーレスストレージの使用

Amazon EMR リリース 7.12 以降では、Apache Spark ジョブを実行するときにサーバーレスストレージを使用して、ローカルディスクのプロビジョニングを排除し、データ処理コストを削減し、ディスク容量の制約によるジョブの失敗を防ぎます。サーバーレスストレージは、容量設定を必要とせずにジョブのシャッフル、ディスクスピル、ディスクキャッシュ操作を自動的に処理し、中間データを無償で保存します。Amazon EMR Serverless は、ワークロードの需要に基づいて自動的にスケールするフルマネージドサーバーレスストレージに中間データを保存し、Spark がアイドル状態のときにすぐにコンピューティングワーカーを解放して、コンピューティングコストを削減できるようにします。

主な利点

EMR Serverless 用のサーバーレスストレージには、次の利点があります。

  • ゼロ設定ストレージ – サーバーレスストレージを使用すると、アプリケーションまたはジョブごとにローカルディスクタイプとサイズを設定する必要がなくなります。EMR Serverless は、キャパシティプランニングなしで中間データオペレーションを自動的に管理します。

  • 自動スケーリングによるジョブ障害の防止 – ストレージ容量はワークロードの需要に基づいて自動的にスケーリングされ、ジョブ障害によるディスク容量不足を防ぎます。

  • データ処理コストの削減 – サーバーレスストレージは、2 つのメカニズムを通じて処理コストを削減します。まず、中間データストレージは無料で提供されます。コンピューティングリソースとメモリリソースに対してのみ料金が発生します。次に、Spark の動的リソース割り当てにより、Spark はワーカーを保持してローカルディスクに中間データを保持するのではなく、アイドル時にワーカーをすぐに解放できます。これにより、Spark ステージあたりのスケールアウトとスケールインが高速化され、後のステージで必要なワーカーが初期ステージよりも少ないジョブのコンピューティングコストを削減できます。

  • ジョブレベルの分離による暗号化ストレージ – すべての中間データは、転送中および保管中に厳密なジョブレベルの分離で暗号化されます。

  • きめ細かなアクセスコントロールのサポート – サーバーレスストレージは、AWS Lake Formation 統合によるきめ細かなアクセスコントロールをサポートします。

開始方法

Spark ワークフローで EMR Serverless のサーバーレスストレージを使用するには、次のステップを参照してください。

  1. EMR Serverless アプリケーションを作成する

    spark-defaults 分類で spark プロパティspark.aws.serverlessStorage.enabledtrue に設定して、サーバーレスストレージを有効にした EMR Serverless リリース 7.12 (またはそれ以降) アプリケーションを作成します。

    aws emr-serverless create-application \ --type "SPARK" \ --name my-application \ --release-label emr-7.12.0 \ --runtime-configuration '[{ "classification": "spark-defaults", "properties": { "spark.aws.serverlessStorage.enabled": "true" } }]' \ --region <AWS_REGION>
  2. Spark ジョブを開始する

    アプリケーションでジョブ実行を開始します。EMR Serverless のサーバーレスストレージは、ジョブのシャッフルなどの中間データオペレーションを自動的に処理します。

    aws emr-serverless start-job-run \ --application-id <application-id> \ --execution-role-arn <job-role-arn> \ --job-driver '{ "sparkSubmit": { "entryPoint": "s3://<bucket>/script.py", "sparkSubmitParameters": "--conf spark.executor.cores=4 --conf spark.executor.memory=20g --conf spark.driver.cores=4 --conf spark.driver.memory=8g --conf spark.executor.instances=10" } }'

    アプリケーションレベルで有効になっていない場合でも、ジョブレベルで EMR Serverless のサーバーレスストレージを有効にすることもできます。これにより、サーバーレスストレージが有効になっているワーカーノードが起動され、ジョブが処理されます。同じ Spark プロパティを spark.aws.serverlessStorage.enabled false に設定することで、特定のジョブのサーバーレスストレージを無効にすることもできます。

    # Turn on serverless storage for EMR serverless for a specific job aws emr-serverless start-job-run \ --application-id <application-id> \ --execution-role-arn <job-role-arn> \ --job-driver '{ "sparkSubmit": { "entryPoint": "/usr/lib/spark/examples/jars/spark-examples.jar", "entryPointArguments": ["1"], "sparkSubmitParameters": "--class org.apache.spark.examples.SparkPi --conf spark.aws.serverlessStorage.enabled": "true" } }'
    注記

    従来のローカルディスクプロビジョニングを引き続き使用するには、spark.aws.serverlessStorage.enabled設定を省略するか、false に設定します。

考慮事項と制限事項

  • リリースバージョン – サーバーレスストレージは Amazon EMR リリース 7.12 以降でサポートされています。

  • データボリュームの制限 – 各ジョブは、ジョブの実行ごとに最大 200 GB の中間データを読み書きできます。この制限を超えるジョブは失敗し、サーバーレスストレージの制限に達したことを示すエラーメッセージが表示されます。

  • ジョブ実行タイムアウト – サーバーレスストレージは、最大 24 時間の実行タイムアウトのジョブをサポートします。実行タイムアウトを長くするように設定されたジョブは失敗し、エラーメッセージが表示されます。

  • 事前初期化されたキャパシティ – 事前初期化されたキャパシティワーカーはサーバーレスストレージをサポートしていません。事前初期化された容量を設定すると、ジョブレベルでサーバーレスストレージを明示的に無効にするジョブでのみ使用されます。サーバーレスストレージが有効になっているジョブは、アプリケーションレベルの設定に関係なく、常に新しいワーカーをオンデマンドでプロビジョニングし、事前に初期化された容量を使用しません。

  • ワークロードタイプ – サーバーレスストレージは、ストリーミングジョブとインタラクティブジョブではサポートされていません。

  • ワーカー設定 – サーバーレスストレージは、1 つまたは 2 つの vCPUsを持つワーカーではサポートされていません。

サポートされている AWS リージョン

EMR Serverless は、以下のリージョンでサーバーレスストレージをサポートしています。

  • 米国東部 (バージニア北部)

  • 米国西部 (オレゴン)

  • 欧州 (アイルランド)