2012年10月24日に発表されたばかりのHadoop用リアルタイムクエリエンジンをいち早くレビュー。次期CDHに組み込まれる予定の新機能をどう使いこなす?
Impalaは、Googleが社内で利用しているDremelとF1にインスパイアされて開発されたオープンソースソフトウェアで、HDFS(Hadoop Distributed File System)あるいはApache HBaseに保存されているデータを対象に、アドホックなクエリを実行するためのツールです。Hadoopのディストリビューションベンダとして有名なClouderaが開発しています*1。
Hadoopファミリのソフトウェアは基本的にJava言語で開発されていますが、Impalaはフロントエンドと呼ばれる部分はJavaで、バックエンドと呼ばれる部分はC++言語で開発されています。
Impalaは、2012年10月24日にオープンソースとして公開されたばかりとあって、2012年11月29日の執筆時点での最新版はβ版で、バージョンは0.2です。そのため、現状では同様の用途で広く利用実績を持つHiveと比較すると、まだまだ機能不足です。
しかし、今後リリース予定のCDH(Cloudera's Distribution including Apache Hadoop)バージョン5に、Impalaの正式版が組み込まれることになっており、今後さまざまな機能が追加される予定です*2。
Impalaのアーキテクチャを図1に示します。
図1に示す黄色のブロックがImpalaの機能に相当し、State Storeがimpala-state-storeというプロセスで、Query Planner、Query Coordinator、Query Exec Engineの3つがimpaladというプロセスで動作します。
impala-state-storeは、主にはimpaladプロセスを管理するためのプロセスで、impaladは命令として受けたクエリを実行するためのプロセスです。
複数のサーバ上で動作するimpaladが協調して分散処理を行います。ODBC経由でクエリを受けたimpaladがQuery PlannerとQuery Coordinatorの機能を提供し、処理対象のデータが保存されているHDFS、あるいはHBaseと同じサーバで動作するimpaladがQuery Exec Engineの機能を提供します。
以下では、現バージョンにおけるImpalaの主な特徴をご紹介します。
ImpalaはMapReduceを利用するのではなく、専用の分散クエリエンジンを使用します。ただし、アーキテクチャ図にも記載している通り、Hiveのmetastoreを共用するため、Impalaの利用にはHiveのインストールおよび設定が必須です。
HiveQLと似たクエリ言語仕様をサポートしていますが、現段階では完全互換ではありません。
HDFSに保存されたデータだけでなく、HBaseに保存されているデータに対してもクエリを実行できます。
Hadoop MapReduceと同様に、ユーザー認証にはKerberosを利用できます。
現在はTextFileとSequenceFileのみが利用可能です。ただし、将来的にはカラム指向のTrevniやRCFileのサポートも予定されています。
SerDe(Serializer-Deserializer)はサポートされていません。
現在はSnappy、Gzip、およびBzip2で圧縮されたSequenceFileのみ利用可能です。ただし、将来的には他のストレージフォーマットの圧縮やLZOによる圧縮のサポートも予定されています。
ユーザー定義関数(UDF:User Defined Function)はサポートされていません。
Copyright © ITmedia, Inc. All Rights Reserved.