はじめに
Hadoopとは
Aapche Hadoop(以降、Hadoop)とは、多種/大量なデータを蓄積し、高速に分散処理するための基盤となるOSSのミドルウェアです。Hadoopの周辺では、Hadoopをより高度に利用するための関連OSSが登場してきており、これらをうまく組み合わせて活用することでデータの収集から蓄積、分析、結果の可視化までをカバーすることができます。
エコシステム
Hadoopの周辺で関連OSS群が結びつき、補いながら共存している様子はHadoopエコシステムとも呼ばれています。ただ新しいOSSは次々にリリースされることもあり、エコシステムは肥大化しています。経験がまだ高くない人が見ると、いったい何と何を組み合わせればよいのか、エコシステムに含まれるOSSはどのような役割をもっているものなのか分かりにくくなっています。
そこでこの記事では、Hdoopエコシステムが大きくなるまでの、だいたいの成長過程をSQL on Hadoopの視点で順に追ってみます。
Hadoopの歴史
Hadoop登場当初
ストレージサービスとして分散ファイルシステムのHDFS、並列分散処理フレームワークとしてのMapReduceを合わせてHadoopと呼んでいました。このフレームワークを活用して、ユーザ(アプリ開発者)は並列分散アプリケーションを開発します。
ただユーザはMapReduceのAPIを理解し駆使しなければならず、敷居や難易度が高いものでした。
SQLクエリエンジンHive登場
アプリ開発者の多くはSQLを使い慣れていることもあり、データ処理をするのであればSQL(風の言語)を使いたいというニーズが生まれます。そしてHiveが登場します。HiveはHiveQLというSQLベースの言語を提供するので、SQLになれたユーザは処理ロジックの開発に注力できるようになりました。
ここまでで分かる通り、Hadoopはファイルシステム(HDFS)にデータを蓄積して処理するものです。SQL(風の言語)でデータ処理できますが、リレーショナルデータベース(RDB)とは異なり、あくまでファイルシステムを操作している点に注意が必要です。つまりACIDトランザクションはサポートされませんし、テナントに相当する機能もないのでファイルシステムのパーミッションで考えることが原則です。(一部の操作にACIDをサポートしたり、認証サービスを提供するOSSも最近ではリリースされてはいます。)
リソーススケジューラYARNが独立
Hadoopが2系へメジャーアップグレードして大きく変わったことがあります。それはMapReduceからリソーススケジューラ機能がYARNというOSSとして切り出されて独立したことです。YARNが登場したことで、同一クラスタ上で複数のフレームワークを用途によって使い分けるということが可能になりました。
用途の変化とOSSの多様化
Hadoopはサーバやディスクを並列に使うことでスループットを高め、大量データを効率的にバッチ処理することが主でした。これは蓄積したデータの使い道がレポーティングだったためです。それが徐々にデータサイエンティスト等によるインタラクティブな分析にも貯めたデータを使いたいというニーズが生まれ、スループット重視ではなくレイテンシを重視したOSSが必要だということになりました。
そこで低レイテンシなクエリエンジンImpalaや、DAGによる効率的な処理を実現するフレームワークTez、表形式のデータを高頻度で格納・参照することに特化したストレージサービスKuduなどが登場しました。
このようにして、SQLの視点ではありましたが、Hadoopのエコシステムは成長してきました。
おわりに
本記事ではHadoopの歴史をSQLの視点でおおまかに辿ってみました。Hadoopエコシステムの理解促進の一助となれば幸いです。