技術者ブログ
クラウド型WAF「Scutum(スキュータム)」の開発者/エンジニアによるブログです。
金床“Kanatoko”をはじめとする株式会社ビットフォレストの技術チームが、“WAFを支える技術”をテーマに幅広く、不定期に更新中!
HadoopはRDBMSをスケールアウト可能にする
はじめに
Hadoopでデータを解析する場合、SQL-likeなインターフェースを持つHiveやPigがよく使われます。しかし、どうしても速度を追求したい場合や処理の性質にSQLが合わない場合などには、最も低レベルな処理となるMap/Reduceのコードを直接Javaで書くことになります。
今回は、Javaの組み込み型RDBMSであるH2を例に、JavaでMap/Reduceレイヤーの処理を直接書きながら、同時に集約処理についてはSQLを使うというテクニックを紹介します。このテクニックを用いることで、Hadoop上できれいにRDBMSの性能をスケールアウトさせることが可能となり、アプリケーションの開発効率、性能ともに大幅に上昇させることが可能となります。
スライドはppt形式でこちらからダウンロード可能です。
Hadoop一般論
Hadoopのメリットと、SQL-Likeなインターフェース、Hive/Pigを紹介しています。
Javaプログラマから見たHadoop
Hadoopは大きなデータをバッチで処理するもの、というイメージが強いですが、同時に最も普及しているJava分散実行環境であると考えることができます。
Hadoop vs RDBMS ??
HadoopとRDBMSを比較しています。特に集約処理を行う場合には、Hadoop/RDBMSのどちらでも処理することができる可能性があり、その場合どちらがより適切か比較検討する価値があります。
RDBMSとスケールアウトの関係
RDBMSはACIDを保ったままスケールアウトさせることは実質無理だと考えられていますが、RDBMSの魅力はACIDだけではありません。
関数型プログラミング言語の流行に合わせて先進的なプログラマの間ではSQLの良さが再発見されています。PrologやSQLのような宣言型のプログラミング言語(Declarative Language)は、コンピュータに対して「何をやりたいか」を伝えるだけで処理がおこなわれるという非常に便利なもので、現時点でもっとも普及している宣言型プログラミング言語であるSQLはHadoop上のHive/Pigを見るまでもなく、生産性を追求するための大きなキーとして開発コミュニティの間で捉えられています(NoSQLには続きがあり、それは「No SQL No Life」つまり「SQLがなくちゃやっていけない!」であるという説も?)。
MapReduceとPartitioning/Sharding
RDBMSのスケールアウトに使われるPartitioning/Shardingというテクニックは、実はMapReduceと非常に相性がよく、キーによるデータの分割はHadoopに任せることができます。
HadoopでRDBMS(H2)をスケールアウトさせる
Hadoopによって自動的にキーごとに分割されたデータは、それぞれのノード上のH2に格納することで、SQLによる処理が可能となります。各ノード上のH2は独立して動作することから、CPUおよびI/O負荷はきれいにスケールアウトします。
HadoopでRDBMS(H2)をスケールアウトさせる(実例1)
H2 on Hadoop(H2oH)の実例を紹介しています。セカンダリソートと呼ばれるテクニックはバッドノウハウ的な側面があります。かわりにH2oHを用いることで、開発効率も性能もアップさせることに成功しています。
HadoopでRDBMS(H2)をスケールアウトさせる(実例2)
集約処理をJavaのコードで書かずに済むことから、コードの量は減り、質は上がり、変更にも強くなります。
H2 on Hadoopの実例 Dunkhead
Scutum技術チームで開発したDunkheadでは、まさにこのテクニックを使っており、ここまでのスライドで紹介したH2oHのメリットを享受しています。Dunkheadはタイムスタンプ付きのデータなら何でも手軽に可視化できるHadoopアプリケーションです。近日中にオープンソースソフトウェアとしてリリースする予定です。
H2 on HadoopとHive/Pigの比較
HadoopでSQLといったらHiveとPigです。ここではH2oHとHive/Pigの違いについて紹介しています。
H2 on Hadoopと通常のRDBMSとの比較
PostgreSQLやMySQLなどでも似たようなスケールアウトが可能かもしれませんが、手軽さ、管理コスト等でH2が勝つのではないかと思います。
その他、H2 on Hadoopが使えそうな場面
H2がHadoop上で活躍しそうなケースについて2点ほど紹介しています。きっと他にもあると思います。
まとめ
HadoopとH2の相性は抜群です。
今回はJava組み込み型のRDBMSをHadoopの分散環境でうまくスケールアウトさせることによって、開発効率や実行効率を上げるテクニックを紹介しました。フィードバックはお気軽に@kinyukaまで。