Amazon Redshift

# Amazon Redshift

https://d1.awsstatic.com/webinars/jp/pdf/services/20200318_AWS_BlackBelt_Redshift.pdf

## 概要

データウェアハウスおよびデータレイク分析マネージドサービス

 

ユースケース(大容量データを高速に集計・分析する必要があるワークロードに活用)

 

利用される場合のアーキテクチャ

AWS DMS or Kinesis Data Firehose -> S3 <-> Redshift -> Amazon QuickSight(可視化)

 

## Amazon Redshift アーキテクチャ

  • リーダーノード
    • クエリのエンドポイント
    • SQL処理コードの生成と展開
  • コンピュートノード
    • ローカルSSDキャッシュ
    • クエリの並列実行
  • マネージドストレージ
    • Redshiftフォーマットファイル
    • Redshift 管理S3バケット
    • データはユーザー管理のS3を経由してロード&アンロード

 

## 特長

  • ハイパフォーマンス
    • 列指向ストレージ
      • 行指向だと分析のため全てのデータにアクセスするために全件走査しないといけない。
      • IOの向上
    • データ圧縮
      • 速度の向上
      • 圧縮のエンコードが複数用意されていて各列で選択可能
      • 各列に最適な圧縮を確認することも可能
      • エンコードタイプの変更も可能
      • 圧縮が未指定の場合、エンコードが自動割り当て
    • ソートキー
      • 大容量データを一括で扱うためにデータ格納ブロックサイズを大きく確保(1MB/block)することにより、ディスクIOを効率化。
      • ゾーンマップ(ブロックフィルタリング)により検索の効率化
        • ブロックに対してid が振られていて、idは範囲で指定されている。検索対象のidが含まれるブロック以外を読み飛ばすことで処理を効率化
        • データをどの列順にソートするのかをテーブルごとにソートキーとして指定できる(id や date など)
    • データ分散
      • 分散形式を指定できる
        • 同じキーを同じスライスへ
        • 全てのデータを全ノードへ
        • ラウンドロビンで均等分散
    • ノードのローカルSSDにキャッシュを保持、クエリ結果を持っている場合はキャッシュから応答する
    • マテリアライズドビューで頻繁に実行するクエリパターンを高速化
      • 結合、フィルタ、集計、射影
  • フルマネージド
    • CLIやコンソールから起動できる
    • 自動バックアップやモニタリング(マルチAZには非対応のため、複数AZに建てたい場合は2つ以上redshift クラスタを用意する必要がある)
    • バッチ適用を自動実行
    • スケジューリング機能(サイズ変更、クラスタの一時停止と再開)
    • 機会学習ベースの自動最適化によるクエリ性能の向上
      • Automatic Analyze
      • Automatic Table Distribution Style
      • Distribution/Sort key advisors
      • Automatic Vacuum Delete
      • Automatic table Sort
    • ワークロード管理(キューとスロット)
      • ワークロードに応じて(short long)キューを複数作成することができる
      • キューにはリソースの割り当てができる
      • スロットはクエリを処理するための使用されるメモリとCPUの単位となり、各キューごとに設定可能
      • スロットを増やすと並列度が上がるが、スロットあたりの割り当てメモリが減る(並列度を自動で任せることもできる)
      • クエリの優先度を設定することができる
      • ショートクエリアクセラレーション(SQA)による高速化
  • 拡張性&柔軟性
    • コンピュートノードの追加で拡張可能
    • Elastic Resize
    • Concurrency Scaling
      • ピーク時にコンピュートを自動拡張する機能
  • データレイク&他AWSサービスとの連携
    • Redshift Spectrum アーキテクチャをデータレイクに拡張
    • Redshift Spectrum S3ファイルへのクエリ実行エンジン
    • Redshift S3それぞれに存在するデータを結合可能
    • Apache Parquet形式でデータをエクスポート
    • 出力したものはオーブンな列指向ファイルフォーマット
    • Amazon Athena, Amazon EMRなどで利用可能
    • フェデレーテッドクエリ(Preview
      • RDS/Aurora PostgreSQL に対して直接クエリ可能
  • コストパフォーマンス
  • セキュリティ&コンプライアンス

 

## RA3Redshift Spectrum の違い

  • RA3
    • Redshift 管理のS3領域を使用
    • Redshift 独自データフォーマット
    • Redshiftのみからデータアクセス
    • DML UPDATEに対応
    • Redshift インスタンス料金+マネージドストレージ料金
  • Redshift Spectrum
    • ユーザ管理のS3領域を使用
    • オープンフォーマット
    • 他のAWSサービスからもアクセス可能
    • DML UPDATEに非対応
    • Redshiftインスタンス料金+ S3ストレージ格納料金+Spectrum スキャン容量料金
    • 全てのデータがデータレイクにありRedshiftだけではなく他のAWSサービスからも同じデータにアクセスする要件がある場合はこちらを選択

 

## その他

  • 複数のワークロードで、頻度は低いが長時間かかるものと、頻度は高いが短時間で終わるデータ処理があるとする。その場合は「ワークロード管理」という機能を利用することで、ユーザーは優先順位を決めることができるようになる。

 

## 雑感

Redshift 単体での利用を行いたい場合にはRA3を選び、他のサービスとの連携をしたいと考えている時にはRedshift Spectrum を利用することになる。

普段はRDBMSといった行指向のストレージを利用することが多いが、大規模なデータを分析したい時には、同じ項目の大量のデータを読み込んで処理を行う。この時に行指向だと全件スキャンしなければならず、データを取り扱いにくい、そこで列指向のストレージが必要となってくる。

利用方法としては主にS3に入れられたデータをRedshift に持ってきて分析を行うといった感じになる。

大規模データを取り扱うのに便利な機能がたくさん実装されている。