AWS再入門ブログリレー Amazon Redshift編
当エントリは弊社コンサルティング部による『AWS再入門ブログリレー 2019』の13日目のエントリです。
こんにちは、AWS事業本部のニシヤマです。はいマスキュラー。
昨日はShirotaによる「AWS Batch」でした。
このブログリレーの企画は、普段AWSサービスについて最新のネタ・深い/細かいテーマを主に書き連ねてきたメンバーの手によって、 今一度初心に返って、基本的な部分を見つめ直してみよう、解説してみようというコンセプトが含まれています。
AWSをこれから学ぼう!という方にとっては文字通りの入門記事として、またすでにAWSを活用されている方にとってもAWSサービスの再発見や2019年のサービスアップデートのキャッチアップの場となればと考えておりますので、ぜひ最後までお付合い頂ければ幸いです。
本日13日目のテーマは『Amazon Redshift』です。
目次
Amazon Redshiftとは
完全マネージド型のデータウェアハウスサービスで、数百ギガバイトから始めて1ペタバイト以上まで拡張が可能です。
データウェアハウスとは
データウェアハウスとはよく聞きますがなんなのかとWikipediaで定義を調べてみると
「データウェアハウスは、意志決定(Decision)のため、目的別(Purpose-oriented)に編成され、統合(Integrate)された時系列で、削除(Delete)や更新(Update)しないデータの集合体」
とのことです。
また、データウェアハウスは過去の蓄積されたデータと現在の比較が目的のため、削除や更新はされず時間とともにデータが増加していく物とのことです。
似た言葉に「データマート」がありますが、こちらは「データウェアハウスの中から特定の目的に合わせた部分を取り出したもの」であり特定の部門などで必要な部分のみを抽出したデータの集合のことを言います。
Amazon Redshiftについて
データウェアハウスについてわかったところで、Amazon Redshiftの紹介です。
Amazon Redshiftは、以下スライドにもある通り、AWSサービスのデータストアの中でもSQLを利用した大容量データの集計・分析処理が得意なデータウェアハウス(DWH)ということで、トランザクション処理が得意なRDSや、ElastiCacheやDynamoDBのようなNoSQLとは用途が異なります。
特徴
- 数クリックで起動可能
- 使った分だけ支払い(リザーブドインスタンスもあり)
- PostgreSQL(8.0.2)互換のSQL(ただしサポートされていない機能、データ型、関数あり)
- PostgreSQL JDBC/ODBCドライバを利用したSQLクライアントやBIツールがサポート
料金
料金に関しては以下のようになっています。
高密度コンピューティング(Dense Computeタイプ)
高パフォーマンス向け、SSDベースストレージ
ノードタイプ | vCPU | ECU | メモリ | ストレージ | I/O | 料金 |
---|---|---|---|---|---|---|
dc2.large | 2 | 7 | 15 GiB | 0.16TB SSD | 0.6 GB/秒 | 0.314USD/時間 |
dc2.8xlarge | 32 | 99 | 244 GiB | 2.56TB SSD | 7.5 GB/秒 | 6.095USD/時間 |
高密度ストレージ(Dense Storageタイプ)
大容量データ向け、HDDベースストレージ
ノードタイプ | vCPU | ECU | メモリ | ストレージ | I/O | 料金 |
---|---|---|---|---|---|---|
ds2.xlarge | 4 | 14 | 31 GiB | 2TB HDD | 0.4 GB/秒 | 1.19USD/時間 |
ds2.8xlarge | 36 | 116 | 244 GiB | 16TB HDD | 3.3 GB/秒 | 9.52USD/時間 |
2019/07/08時点の現行世代、東京リージョンの料金になります。最新の料金は、公式サイトをご確認ください。
構成要素
続いてAmazon Redshiftを構成する要素をご紹介します。
リーダーノード
- リーダーノードは課金対象外
- クライアントと直接通信する
- SQLをコンパイルしてコンピューティングノードに配信、実行された結果を集計する
- 一部のSQLに関してはリーダーノードでのみ実行される
コンピューティングノード
- コンパイル済みのコードを実行して、中間結果をリーダーノードに返却する
- クエリを並列して実行する
- コンピューティングノードを追加してスケールアウトする
ノードスライス
- ノード内のメモリ、ディスクを分割した論理的な処理単位
- スライス毎にワークロードの一部分を処理する
- インスタンスタイプにより2または、16のスライスを持つ
ユースケース
Amazon Redshiftのユースケースですが、以下のような処理の場合に向いています。
- 巨大なデータセット
- 複雑だが同時実行数が少ないSQL
- データの更新は一括で実行
具体例:データウェアハウス(DWH)、ユーザが自由にクエリ作成をする場合(BI等)
逆に以下のような処理の場合にはあまり向いていません。
- SQLの並列実行数が多い
- 低レイテンシーが求められる
- ランダム且つパラレルな更新アクセス
- 巨大なデータで集計を行わない
運用
次に実際にAmazon Redshiftを運用する場合のポイントお伝えします。
データの読み込み
Amazon Redshift自体大規模なストレージで大量のデータを持つことが可能ですが、実際の運用ではS3にアップされた大量のデータからCOPYコマンドを使って読み込みを行うことがあります。 S3からAmazon Redshiftにデータを読み込む際にはスライス毎にファイル並列で読み込むため、大きなファイルを分割しスライス毎に分散して読み込むことでスループットが向上します。(クラスターで確保されたスライスの倍数のファイル数が最適)また、S3から読み込む際の文字コードにはUTF-8とUTF-16が選択でき、区切り文字(デリミタ)の指定が可能です。
他にもANALYZEコマンドをこまめに実行して統計情報を作成しておくことや、VACUUMコマンドにより不要になったディスク上の領域を削除することにより最適なパフォーマンスを出ることが可能です。
バックアップ
Amazon Redshiftのバックアップは自動スナップショットと手動スナップショットがあり、テーブル単位のリストアも可能です。 自動スナップショットの場合は、保持期間を指定するだけで約8時間ごと、または1ノードのデータが5GB変更されるどちらか早いタイミングでスナップショットを作成します。 また、先日自動スナップショットの取得タイミングをcronの様に指定可能な機能がリリースされました。
Amazon Redshift cronライクに自動スナップショットを取得できる『スナップショットスケジューラ』がリリースされました
Amazon Redshift Spectrum
他にも以下の様な場合にはS3上のファイルにRedshiftから直接クエリを実行できる「Amazon Redshift Spectrum」を利用することもできます。
- S3に格納されたより大きなデータにクエリを実行したい
- 実行頻度の少ないデータへのクエリ
- 複数のクラスター間でデータを共有したい
参考:【速報】Amazon Redshift:S3のデータを直接検索出来る新機能『Redshift Spectrum』が発表されました! #awssummit
その他
また、ここ最近の新機能としてはAWSマネジメントコンソール上から手軽にSQLクエリを実行することができるクエリエディタ
やクラスターのリサイズ処理で利用できなくなる時間を大幅に短縮し一時的な高負荷処理にも対応可能になったElastic Resize
、
読み取り専用のクエリをスケールアウトしたクラスターで実行し一時的にクエリの同時実行性を向上する同時実行スケーリング(Concurrency Scaling)
なんかもリリースされています。
Amazon Redshift:AWS管理コンソール上で「クエリエディタ」機能が使えるようになりました Amazon Redshift 新機能:『Elastic Resize』で短時間でのノード数変更(リサイズ)が可能になりました Amazon Redshift 高い同時実行性と一貫したパフォーマンスを提供する新機能『Concurrency Scaling』がリリースされました
さいごに
以上、『AWS サービス別 再入門ブログリレー 2019』の13日目のエントリ『Amazon Redshift編』でした。
少し前(かなり前?)データウェアハウスといえば、聞いただけでかなり高価なイメージでしたが、クラウドサービス且つ従量課金で利用することができ大変利用しやすくなったと思います。また、Amazon Redshiftの場合S3と連携することにより実質無制限のストレージを利用したデータ分析が可能となりました。この果てしないデータの海を解析することにより新たなビジネスの道が見つかるかもしれません。
明日、7/19 は坂巻一義の「AWS Glue」編の予定です。お楽しみに!!