S3 Select と Hive を使用してパフォーマンスを向上させる - Amazon EMR

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

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

Amazon EMRリリースバージョン 5.18.0 以降では、Amazon の Hive で S3 Select を使用できますEMR。S3 Select では、アプリケーションはオブジェクトに含まれるデータのサブセットのみを取得できます。Amazon ではEMR、処理のために大規模なデータセットをフィルタリングする計算作業がクラスターから Amazon S3 に「プッシュダウン」されるため、一部のアプリケーションのパフォーマンスが向上し、Amazon EMR と Amazon S3 の間で転送されるデータ量が減ります。

S3 Select は、 CSVおよび JSON ファイルに基づく Hive テーブルでサポートされ、Hive セッションtrue中に s3select.filter 設定変数を に設定することでサポートされます。詳細な説明と例については、「コードで S3 Select を指定する」を参照してください。

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

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

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

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

  • クエリのフィルター述語では、Amazon S3 Select がサポートするデータ型を持つ列が使用される。詳細については、「Amazon Simple Storage Service ユーザーガイド」の「データ型」を参照してください。

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

考慮事項と制約事項

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

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

  • UTF-8 形式の ファイルCSVと JSON ファイルのみがサポートされています。複数行の CSVsおよび JSON はサポートされていません。

  • 圧縮されていないファイルか gzip ファイルまたは bzip2 ファイルのみがサポートされます。

  • 最後の行のコメント文字はサポートされていません。

  • ファイルの末尾にある空の行は処理されません。

  • Hive on Amazon EMRは、S3 Select がサポートするプリミティブデータ型をサポートしています。詳細については、「Amazon Simple Storage Service ユーザーガイド」の「データ型」を参照してください。

コードで S3 Select を指定する

Hive テーブルで S3 Select を使用するには、INPUTFORMAT クラス名として com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat を指定してテーブルを作成し、TBLPROPERTIES 句を使用して s3select.format プロパティの値を指定します。

デフォルトでは、S3 Select はクエリの実行時に無効になっています。次に示すように Hive セッションで s3select.filtertrue に設定して S3 Select を有効にします。以下の例は、基盤となる CSVおよび JSON ファイルからテーブルを作成し、シンプルな select ステートメントを使用してテーブルをクエリするときに S3 Select を指定する方法を示しています。

例 CREATE TABLE CSVベースのテーブルの ステートメント
CREATE TABLE mys3selecttable ( col1 string, col2 int, col3 boolean ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS INPUTFORMAT 'com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://path/to/mycsvfile/' TBLPROPERTIES ( "s3select.format" = "csv", "s3select.headerInfo" = "ignore" );
例 CREATE TABLE JSONベースのテーブルの ステートメント
CREATE TABLE mys3selecttable ( col1 string, col2 int, col3 boolean ) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' STORED AS INPUTFORMAT 'com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://path/to/json/' TBLPROPERTIES ( "s3select.format" = "json" );
例 SELECT TABLE ステートメント
SET s3select.filter=true; SELECT * FROM mys3selecttable WHERE col2 > 10;