
最近「クラウド」という言葉でよく取り上げられるクラウドコンピューティング。この技術で特に注目されているのは仮想化と大規模分散処理の二つです。データ容量がどんどん増加していく現在にあって、実装が難しい大規模分散処理が「クラウド」で特に重要な分野であることは間違いありません。この大規模分散処理で最も有名なオープンソースの一つがHadoopです。HadoopはGoogleの発表したGFS(Google File System)やMapReduceのオープンソースクローンで、Apacheのトップレベルプロジェクトになっています。
GFSに相当するものとしてHadoopにはHDFS(Hadoop Distributed File System)があります。複数のサーバー群を一つのファイルシステムとして扱うことができ、システム停止をすることなく、サーバーの追加だけで簡単に容量を増やすことが出来ます。また容量だけでなく、データの複製をサーバー同士で持ち合って保存する仕組みを持つため、冗長性にも優れています(図1)。
MapReduceはこのHDFSの仕組みを利用して、大規模データの集計処理を複数のサーバー群に分散して並列処理を行わせます。集計するデータとそのためのサーバーが大規模であればあるほど、高いパフォーマンスを得ることができます(図2)。
ただ、MapReduceは集計するにもデータをKey/Valueに「分解」しないといけませんし、少し異なった集計をたくさん行うときでも、都度MapReduceのプログラムを書かなければなりません。これがHadoopの取っ付き難い点になっています。
図3は都道府県ごとに件数をカウントする集計の例です。Keyに都道府県、Valueに1という風にデータを「分解」して、Keyの都道府県ごとに1を数えていくのがMapReduceにおける基本的なカウントの方法です(図3)。
RDBで使われるSQLであれば、データ構造を決めてしまえば(テーブル定義)、カラム毎のカウントやサムなど様々な集計をSelect文(Group By句)ですぐに行うことができます。この広く普及したSQLをHadoopのMapReduceで使えるようにしたのが、Hiveです。
Hiveは元々Facebookで開発され、Apacheプロジェクトに寄贈されました。SQLによく似たHiveQLを使ってHadoop上で集計することができます。一言で言うと、HiveはHadoopのSQLラッパーのようなものです。HiveQLの基本的な構文は、Create table文、Load文、Insert文、そしてSelect文の4つです。Create Table文はテーブル定義、Load文はデータ入力、Insert文はデータ出力、Select文はデータ集計の役割を主に果たします。
Hiveの便利な点は、既にHadoop(HDFS)上にファイルがあればそのままテーブルとして扱える点です。MySQLなどのRDBでは、テーブルを先に作り、テーブル定義に沿った構造のデータを後から格納するやり方しかありません。これに対しHiveは、先にテーブルを作るやり方だけでなく、既存のCSVファイルなどのデータに合わせて後からテーブルを作ることもできます。
つまり、既存データを後からテーブルとして扱うことができます。Hiveが優れているのは、後からテーブルを作った場合、実体となるデータファイルをHiveと関係なく自由に置き換えることが可能な点です。例えば、後からテーブルを作ったときは別のバッチ処理で実体となるデータファイルを日々置き換えることが可能です。Hadoop(HDFS)上に実体となるデータファイルを作るまでの処理と、Hiveで集計する処理を完全に切り分けられるので、Hadoop上の集計を行う開発がしやすいというメリットがあります。
Hiveのインストールの大前提として、Hadoop環境が既に構築されていなければなりません。Hiveのインストール先は、Hadoopがインストール済みでHadoop環境に接続する一通りの設定がなされたサーバーである必要があります。また、現時点でHiveのインストールはインターネット上のSubversionレポジトリからソースをコピーしてビルドします。ビルドにはAntを使いますので、Hiveのインストール先にはAntのインストールも必要です。
Hiveのインストール自体はWikiドキュメント(*1)にある通り、さほど難しくありません。必要に応じてHADOOP_HOME、HIVE_HOMEやPATHなどの環境変数を設定します。HiveをインストールしたサーバーからHiveクライアントを使う時には、Hadoop環境ができていればそれを利用するだけですので、Hadoop環境に繋ぐための複雑な設定は要りません。すぐにHiveクライアントを使うことができます。HADOOOP_HOME、HIVE_HOMEなど必要な環境変数を設定したユーザーで、$HIVE_HOME/bin/hive と打てば繋がります。
HiveはRDBのようなDBユーザーの作成や、テーブルを格納するデータベースを作成する必要はありません。その代わり、デフォルトの状態ではHiveクライアントで作業したローカルディレクトリにしかテーブルの基本情報を残さないようになっています。違う場所で作業しても前に作ったテーブルを見ることができません。Hiveのユニークな特徴です。
*1:HiveインストールのWikiドキュメント
http://wiki.apache.org/hadoop/Hive/AdminManual/Installation
後編では、GMOとくとくショップで実際に使っているHiveQLについて説明します。
- 【第2回】「GMOとくとくショップ」オープンにあたって - GMOとくとくショップと最新テクノロジー -
- 【第7回】「GMOとくとくショップ」に組み込まれたテクノロジー(前編)- Hadoopをどのように利用しているか? -
- 【第7回】「GMOとくとくショップ」に組み込まれたテクノロジー(後編)- Hadoopを使った構築方法やチューニングポイント、運用管理 -
- 【第10回】「GMOとくとくショップ」ではどのようにMySQLクラスターを利用しているか?(前編)- MySQLクラスターの仕組みについて -
- 【第10回】「GMOとくとくショップ」ではどのようにMySQLクラスターを利用しているか?(後編)- MySQLクラスター構築方法と運用管理 -
- 【第13回】「GMOとくとくショップ」で利用しているEucalyptusとは?(前編)- Eucalyptusの仕組みについて -
- 【第13回】「GMOとくとくショップ」で利用しているEucalyptusとは?(後編)- Eucalyptusの構築や運用管理について -
- 【第16回】「GMOとくとくショップ」のHadoop集計-Hiveの利用方法-(後編)- 実際に使用しているHiveQLについて -
- 【第19回】「GMOとくとくショップ」で利用しているアプリケーションフレームワークについて- Webアプリケーションフレームワークとは? -
*本文中に記載されている会社名および商品名・サービス名は、各社の商標 または登録商標です。




























