Amazon EMR
Amazon EMR リリースガイド

S3 Select Pushdown と Presto を使用してパフォーマンスを向上させる

Amazon EMR リリースバージョン 5.18.0 以降では、Amazon EMR で S3 Select Pushdown と Presto を使用できます。この機能により、Presto から Amazon S3 に (SELECT などの) 射影演算と (WHERE などの) 述語演算の計算処理を「プッシュダウン」できます。これにより、一部のアプリケーションではクエリで Amazon S3 から必要なデータだけを取得してパフォーマンスを向上させ、Amazon EMR と Amazon S3 間で転送されるデータの量を減らすことができます。

S3 Select Pushdown が使用するアプリケーションに適しているかどうかを確認する

S3 Select Pushdown が使用するアプリケーションに適しているかどうかを確認するために、S3 Select Pushdown を使用した場合と使用しない場合のアプリケーションのベンチマークを行うことをお勧めします。

アプリケーションが S3 Select を使用する候補となるかどうかを判断するには、次のガイドラインを使用します。

  • クエリは元のデータセットの半分以上を除外する。

  • クエリのフィルター述語では、Presto と S3 Select がサポートするデータ型を持つ列が使用されます。S3 Select Pushdown では、タイムスタンプデータ型、実データ型、および倍精度浮動小数点データ型はサポートされません。数値データには小数データ型を使用することをお勧めします。S3 Select でサポートされるデータ型の詳細については、Amazon Simple Storage Service 開発者ガイドの「データ型」を参照してください。

  • Amazon S3 と Amazon EMR クラスター間のネットワーク接続の転送速度と利用可能な帯域幅が良好である。Amazon S3 は、HTTP 応答を圧縮しないため、応答サイズは圧縮された入力ファイルのために増加する可能性があります。

考慮事項と制約事項

  • CSV 形式で保存されたオブジェクトのみがサポートされます。オブジェクトは解凍するか、必要に応じて gzip または bzip2 で圧縮できます。

  • AllowQuotedRecordDelimiters プロパティはサポートされていません。このプロパティを指定した場合、クエリは失敗します。

  • お客様が用意した暗号化キーを使用した Amazon S3 サーバー側の暗号化 (SSE-C) とクライアント側の暗号化はサポートされていません。

  • S3 Select Pushdown は、ORC や Parquet などの列または圧縮ファイル形式には適していません。

Presto で S3 Select Pushdown を有効にする

Amazon EMR で Presto の S3 Select Pushdown を有効にするには、以下の例に示すように presto-connector-hive 設定分類を使用して hive.s3select-pushdown.enabledtrue に設定します。詳細については、「アプリケーションの設定」を参照してください。hive.s3select-pushdown.max-connections 値を設定する必要があります。ほとんどのアプリケーションでは、デフォルト設定の 500 で十分です。詳細については、以下の hive.s3select-pushdown.max-connections の理解と調整 を参照してください。

[ { "classification": "presto-connector-hive", "properties": { "hive.s3select-pushdown.enabled": "true", "hive.s3select-pushdown.max-connections": "500" } } ]

hive.s3select-pushdown.max-connections の理解と調整

デフォルトでは、Presto はファイルシステムとして EMRFS を使用します。emrfs-site 設定分類の設定 fs.s3.maxConnections により、Presto の EMRFS を使用した Amazon S3 へのクライアント接続の最大許容数が指定されます。デフォルトでは 500 です。述語演算のために Amazon S3 にアクセスすると、S3 Select Pushdown は EMRFS をバイパスします。この場合、hive.s3select-pushdown.max-connections の値によってワーカーノードからのオペレーションに使用可能なクライアント接続の最大数が決まります。ただし、—(GET オペレーションなどの) プッシュダウンされていない Amazon S3Presto から — へのリクエストは、引き続き fs.s3.maxConnections の値に従います。

アプリケーションでエラー「Timeout waiting for connection from pool」が発生する場合は、hive.s3select-pushdown.max-connectionsfs.s3.maxConnections 両方の値を増やします。