ニュース&ブログ
これだけは知っておくべき!Amazon Redshiftの概要
この記事は最終更新から11年以上経過しています。内容が古くなっている可能性があります。
投稿日:2014/8/21

さて、AWS SummitやJapanツアーなど、ありとあらゆる場所で我々は「AWSとOracleに強い。」っと言い続けております。
実は弊社では、Databaseつながりと言う事で、「PB級のデータウェアハウスをフルマネージドしてくれる」と巷でもっぱらの噂の「Amazon Redshift」にも大変力を入れています。もともと、数百TBクラスのデータウェアハウス(Oracle)のDBA、DBコンサルを何年も経験しているエンジニアも複数名在籍しており、このRedshiftには非常に興味津々と言う事もきっかけの一つでございます。今までは意識的に、Oracle Databaseの内容を多くしてきたのですが、これからはRedshiftについても掲載しようっ!、と言う運びとなりました。
Redshiftってなに?
そもそもRedshiftとはどのようなサービスなのでしょうか?まずはここからご説明しましょう。Amazon Web Serviceは2013年6月に東京リージョンで新しいサービスの運用を開始しました。その一つが「Redshift」です。
Hadoopのような分散アーキテクチャでありながら、RDBとしての特徴をもっており、大規模なデータ分析プラットフォームをオンプレミス環境と比較をして、非常に安価な初期コストで実現してしまうと言う事で注目が集まっています。これまでデータウェアハウスの導入は大量のデータを扱う事から、初期コスト(ストレージ、サーバー、ライセンスなど)が非常に膨大と言われていました。こう言った初期コストの問題を大きく解決可能なRedshiftは「データウェアハウスの価格破壊」とまで言われています。
Redshiftのアーキテクチャで最も重要なポイントは以下の3つです。
①MPP(超並列演算)
CPU、Disk、Network I/Oに至るまで、完全に並列化。
②データの格納
データの格納形式には、列指向(カラムナ)を採用。データウェアハウスではテーブルのカラム数が多いが、実際に集計するカラム数は少ない、と言う事はよくあり、IOを少なくする事が出来る列指向でのデータ格納が有利と言われています。また、データを格納する際も様々な圧縮形式が存在しており、データにあった圧縮形式の選択が可能です。
③データの通信
S3やDynamoDBなどのAWSサービスとデータ連携が可能です。また、AWS Data Pipelineを使用すれば、Redshiftとの間のデータの移動や変換を自動で行う事が出来ます。
これだけは押さえておきたい!Redshiftのアーキテクチャ
ここからは、Redshiftのデータウェアハウスシステムのアーキテクチャの概要を紹介します。Redshiftを検討する方、エンジニアとしてこれからRedshiftを調査、検証しなければいけない方はまずは、とっかかりとしてここを押さえておけば、Redshiftの大まかな流れを理解する事が出来ます。
①クライアントアプリケーションと接続
図1:クライアントアプリケーションと接続
ご存じの方も多いかと思いますが、Redshiftは「PostgreSQL」がベースとなって開発されています。なので、PostgreSQLで動いていたSQLクライアントツールは、環境にもよりますが変更箇所は少なく、動作させる事が可能です。ですが、Redshift SQLとPostgre SQLが全く同じわけではありませんので注意が必要です。また、接続についても、PostgreSQL JDBC および ODBC ドライバを利用して、クライアントアプリケーションと通信させる事が出来ます。
②クラスター
図2:クラスター
Redshiftはクラスターと言う単位で管理されます。クラスターは1つ以上のコンピュートノードが含まれており、コンピュートノードが2つ以上の場合にはリーダーノードがコンピュートノードを調整する役割を担います。ちなみに、リーダーノードは課金の対象外となり、コンピュートノード数とノードタイプのみが課金される仕組みとなります。クライアントはリーダーノードとのみ通信を行うため、直接コンピュートノードへアクセスする事はありません。
③リーダーノード
図3:リーダーノード
先ほど紹介したリーダーノードですが、その役割をもう少し詳しく説明します。リーダーノードはコンピュートノードとクライアントアプリケーションの間に位置し、双方からの通信を管理します。
クライアントアプリケーションからSQLを実行されるとき、以下の流れでSQLは実行されます。
1.実行されたSQLに基づき、実行計画をリーダーノードで作成する。
2.リーダーノードで作成された実行計画に基づき、C++のコードを生成、コンパイルする。
3.コンパイル済みのコードをコンピュートノードへ配布し、コンピュートノードが実行する。
4.実行結果を結果セットとしてリーダーノードで保持しクライアントアプリケーションに返す。
上記でもわかるように、クライアントアプリケーションはリーダーノードに向かってSQLを実行します。
リーダーノードはSQLを元に実行計画を作成、この実行計画を元にC++のコードを生成し、コンピュートノードに配布し、実行させ、結果をコンピュートノードから受け取り、それをクライアントアプリケーションに返すと言う働きをしています。なので、リーダーノードには基本的にデータは存在しません。(一部管理用のデータは保存しています。)
※ちなみにリーダーノードは従量課金の対象ではありません。
④コンピュートノード
図4:コンピュートノード
③リーダーノードでも紹介しましたが、コンピュートノードはリーダーノードの下位に位置し、リーダーノードから受け取ったコンパイル済みのC++のコードを実行します。各コンピュートノードは専用のメモリ、CPU、ストレージを持っており、コンピュートノードの台数やスペックによって、クラスターのスペックが決まります。たとえば、dw1.8xlargeのコンピュートノードを2台でクラスターを構成した場合、dw1.8xlargeのスペックが、16vCPU、16TBのストレージとなる為、クラスターのスペックは、32TBまで実行容量を搭載したクラスターとなります。
⑤ノードスライス
図5:ノードスライス
コンピュートノードで管理しているストレージはスライスで分割されています。これがノードスライスです。ノードスライスは1vCPUにつき、1つ割り当てられています。実際のデータはこのノードスライスに分散して格納され、ノードスライス間でのデータの共有は行えません。ですので、ノードスライスは自分専用のCPU、メモリ領域、ストレージ領域を持ち、それぞれ独立して動作するようなイメージです。なので、Redshiftの分散処理の単位はこのノードスライスの単位で処理実行されると言う事になります。
RedshiftではじめるDWHシステム
いかがでしたか?Redshiftをご存じなかった人も、何となく知っている人も、まずは上記のアーキテクチャを頭に入れておけば、今後必ず役に立ってくると思います。
Redshiftは大量のデータを高速に処理できる一方で、能力を最大限引き出す為には、少しばかり工夫が必要なRDBでもあります。(と私は考えています。)
今後、少しずつRedshiftのポイントを紹介していきたいと思います。
それではまた!!

