SQL on HadoopだったらDWHでよくね?

ちょっと前からモヤモヤしていたこと――HiveやPrestoのようなSQLHadoop上のデータを集計できるというようなものを使うのだったら、昔からあるデータウェアハウス(DWH)でよくないか?

データを扱うにはSQLが、なんやかんやで向いているということが再確認されている。ビッグデータは大量の非構造データのことだとしばし前はいわれていたが、非構造データなんてゴミデータなわけで意味のあるデータは何かしらの構造がある。データがどういう構造をもっていたら整理しやすいかというのは、長年――人類が文字をもったときから――研究されてきた。その結果人類は関係モデルというものにたどり着いた。他にもKey-ValueだとかXMLだとかデータの持ち方は色々あるけれど、やっぱり関係モデルが未だ最強のデータモデルだと私は思う。慣れている人が多いという点と扱いやすいように整理されているという点で関係モデルに帰着させるのが、最も便利だ。Hadoopで非構造データが分析できるといわれたが、分析をしたいなら整理されていなければ無理で、整理したければ関係モデルに落ち着くのだ。話題先行でアプリがないと言われていたHadoopで、やっとキラーアプリと有力視されたのは結局SQLでクエリがうてるというものだ。山ほど似たようなのが出てきている、e.g.、Cloudera Impala, Apache Drill, Presto, Hive on Tez, Spark QL。

しかし、SQLで分析って前からできた。DWHとか言われる列指向型のDBだ。例えば、TeraData、HP Vertica, IBM Netezzaなど。Hadoopが目指すものがこれらと同じなら、こっちの方がよくないか。最近のHadoopの動向を見ていると、既存のものを再発明しているようにしか見えないように思えてきた。Clouderaは、HDFS以外にKuduっていう列指向DBを作っちゃったりしていることからも、この仮説が正しいような気がする。しかし、既存のものは歴史も長くかつSQLに特化しているわけで、事例も多く使い勝手も良いと思う。Hadoopを使うというのが目的なら別だけれど、意思決定のためにデータを素早く集計したいというであれば、前からあるDWHを導入するのが正しいのではないかと思い始めた。

DWHってビビるほど高いけどね。Hadoopオープンソースだから、一騎当千のエンジニアに給料弾んで自前で構築も運用も何もかもやらせれば、安くなるのかな?OSSは本当に安いのかという語り尽くされた問題で、前記の一騎当千の将がいなくなったら崩壊するリスクはどうするだとか、有償サポートを頼んだら結局金がかかるじゃんとか、運用まで考えるとどっちとも言えなくなってくる。

今の段階であれば、DHWの方を選択するのが、ほとんどの人にとっては正解じゃないかな。

将来的には微妙だ。SQL on Hadoopも道具として完成されてくるでしょう。そのときは、DWHと同じようなものが出来上がると思う。こうなってくると、プロプライエタリソフトウェアとオープンソースソフトウェアの戦いみたいなる。

ソフトウェア産業は標準規格の奪いあいだから、みんながHadoopを使うようになったら、HortonworksやClouderaが勝つ気がする。つまり、BIツールだとかがHadoopとの親和性を高めていって、Hadoopありきの世の中になれば、Hadoopに頼らないものを作っても売れなくなり、ますますHadoopへの依存度が高まるという現象が起きる。量子力学とのアナロジーでボーズアインシュタイン凝縮と呼ばれる現象だ。

しかし、そうなるかというと私はならないと思う。Hadoopが並列処理のOSを目指しているのは想像が付くが、本当のOSほどは依存度が強くない。OSSで成功できたのはRedHatだけで、それはOSというソフトウェアの立ち位置が特殊だったからだ。Hadoop = HDFS or YARNだが、HDFSやYARNがなくてもソフトウェアは動く。Cloudera自身が、HDFS以外のデータ置き場としてKudu出しちゃったりしているし、同じClouderaのImpalaもYARNなしに動かせちゃったりする。技術的には興味深いと思うけれども、規格という点で見ると愚策ではないかなと私は思う。他にも、Kafka、Cassandra、SparkみたいなHadoopの周辺にはあるけれど、Hadoopがなくても動くものは多い。そうなると、SQL on HadoopがDWHを駆逐するのは無理そうだ。ちょっとだけDWHのパイが食われるか、パイ自体が広がるなら互いに分け合うようになるのがいいところな気がする。

なので、SQL on Hadoopを頑張って取り組む意味があんまりないような気がしてきた。