LoginSignup
0
0

More than 3 years have passed since last update.

自分用メモ AWS概要

Last updated at Posted at 2020-12-22

流行りのAWSに関わる事になるとは・・・。
まず概念理解が難しい。

相変わらず自分用メモ

■概要について

[小ネタ] Athena のテーブル, データカタログなどの概念がわからなかったのでまとめた
https://dev.classmethod.jp/articles/athena-table-datacatalog-etc-summary/

AWS Glueの概要を図と用語で整理する
https://qiita.com/sot528/items/1c56bb95ac3060772634

■パフォーマンチューニング

公式によるヒント 10項目
https://aws.amazon.com/jp/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/

1.データをバケット化
 →S3の機能の1つ。
    格納先そのものをオブジェクトとして認識できる。

2.データを分割(Hiveでのパーティショニング)
   パーティション作成の際、(Key=Value)を設定し、 Where句で利用することにより、
   限定したデータ走査が可能となる。
   逆をいえばパーティションとして指定したカラムをWhere句で利用しない場合、
   パーティションを切ってようが、テーブルとして読み込む際に全ファイルを走査となる。

   →バケットの特性を生かし、正規表現マッチングによる
    カラムの指定とrow_nuber関数使いましょうというお話。

3.圧縮を使用する

データを圧縮するとクエリを大幅に高速化できる。
データサイズが小さいほど、S3からAthenaへのトラフィックが減少。

| アルゴリズム  | 分割可能 | 圧縮比  | 圧縮+解凍速度
+-------------------+-----------+-----------+--------------
| Gzip(DEFLATE)| 番号   | 高い    |  中
| bzip2     | 可能   | とても高い | スロー
| LZO      | 番号   | 低    | 速い
|スナッピー   | 番号   | 低     | とても早い

4.ファイルサイズの最適化

 データの読み取りを並列化できる場合、クエリはより効率的に実行される。
 ただし、実行エンジンの起動(準備)時間が長い為、ファイルが小さすぎる場合(通常、128 MB未満)効率が落ちる。
 
 ex.)テキスト形式で保存された7GBのデータを1つのファイルで格納した場合、5000個のファイルで格納した場合の比較データ
 
 | クエリ       |ファイル数     | 実行時間
+--------------------------+-------------------+------------
 | SELECT count()~ | 5000ファイル | 8.4秒
 | SELECT count(
)~  | 1ファイル   | 2.31秒

5.列指向データストアの生成を最適化する

Parquet=列指向データストア。ブロックサイズ=最大行数で分割可能。

列データとして見ると、はデータ型が異なっている事が多い為、列ごとの圧縮、エンコーディングが異なる。
しかし、列での分割により圧縮、エンコーディングの処理速度を上げることが可能。

※検証記事によると、実際にはCSVファイルの方が早いケースが多いという結果
(データ数75004739レコード)

Amazon Athena: カラムナフォーマット『Parquet』でクエリを試してみた 
https://dev.classmethod.jp/articles/amazon-athena-using-parquet/

  Parquet の利点:データスキャンの大幅削減
          データ転送量の抑制
          コスト削減

■Glue ブックマーク機能について

読込み完了しているデータは処理スキップし、追加データのみ処理実施する機能

便利そうに見えてその実結構処理時間を取られることが判明。

■仕様

パーティションの作成タイムスタンプ>JOB最終実行時間の場合既存データの取り込み取込み処理をスキップする。

具体的には、パーティション毎にフィルター処理を実行しており、
1prefixの処理時間は100msと短時間だが、すべてのprefixに対してフィルター処理を行う。
【フィルター】
After initial job bookmarks filter:前回読み込んだパーティションに追加/変更となったファイルを特定する。
After final job bookmarks filter:対象のファイルを処理する

その為、InputDataにパーティション設定がないほうがブックマーク機能の処理が短くなる。

この辺を考慮した設計が必要となりそう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0