2017-12-05 4 views
2

S3にはGZIP CSV形式のファイルがたくさんあります(約20k-30kファイル)。 すべてのファイルに関係する分析(非常に単純)を実行したいと考えています。AWSアテナの問題 - 代替案

それは次のようになります。 S3:

//bucket-name/pt=something/dt=2017-01-01-00-00/1234/5432.csv.gz我々は試してみました:

  1. AWS EMRですが、多くの小さな ファイルがあるため、非常に遅いようです。プロセスの前にs3-dist-cpをマージしようとしましたが、まだ が遅すぎます(ボトルネックはs3-dist-cpです)
  2. しかし、このツールはあたかも パーティションに常に が追加される必要があるため、プログラムでの実行を意図しています。パーティションをptとdt フィールドで定義しました。しかし、わかっている限り、各値は、ALTER TABLE ADD PARTITION ...を使用して を追加する必要があります。スケーラブルではありません。

多くのS3ファイルに対して単純なSQLクエリを実行する最適な方法は何ですか?

ありがとうございました!

+0

https://aws.amazon.com/redshift/spectrum/ – Vorsprung

+0

@Vorsprung - あまりにも多くの$$$と面倒な – Himberjack

+0

私はAmazon Redshiftが非常に使いやすいと思っています。 Redshiftの価格設定や労力の面で懸念事項を共有できますか? –

答えて

1

アテナは、あなたのユースケースのための素晴らしいツールになると私は思います。私たちは、S3に格納されているデータセットに対する多くの種類のクエリにこれを使用します。ほとんどが寄木張りの書式で、一部はTSVです。 GZIPはサポートされているSerDeであることがわかっていますが、Snappyを圧縮に使用しますが、一連の個別の.gzファイルとして読み込むことはできません。私たちの使用では、少なくとも、Hive(と適切な圧縮SerDe)を使用して、HadoopクラスタからS3にファイルを書き込んで直接圧縮しました。

しかし、ファイルをS3にコピーする前にファイルを解凍して(新しい圧縮形式に書き込んだ場合)、これが効果的で、Athenaを使用できるようになりました。 The S3 version of distcpには、オプション--outputCodec=CODECと、1つまたは2つのコマンドでこれを実現できる他の機能があります。

最後に、EMRは同じ問題を扱います.EMRのデフォルトクエリエンジンはPrestoです。これはAthenaが使用するものです。 S3にデータをHadoopで読める形式で取得した場合、いくつかの良いオプションがあります。