Hadoop用リアルタイムクエリエンジン Impalaのポテンシャルをレビューした:Databaseテクノロジレポート(3/4 ページ)
2012年10月24日に発表されたばかりのHadoop用リアルタイムクエリエンジンをいち早くレビュー。次期CDHに組み込まれる予定の新機能をどう使いこなす?
ImpalaとHiveの性能によるベンチマーク
ベンチマークシステムの構成
今回の検証では、Clouderaが提供しているCloudera Managerのフリー版を利用してベンチマーク用のクラスタを新規に構築し、CDH4.1とimpala 0.2を利用しました。
Cloudera Managerが動作する管理サーバ1台、マスター1台およびスレーブ13台の計15台の構成でベンチマークを実施しました。
全てのノードは、同一ラック内に配置され、L2スイッチを介して1GbpsのEthernetで接続されています。各ノードのスペックは表1の通りです。
CPU | Intel Core 2 Duo 2.13 GHz(Hyper Threadingあり) |
---|---|
メモリ | 4GB |
ディスク | 7,200 rpm SATAディスク |
OS | CentOS 6.2 |
表1 各サーバ、ノードのスペック |
検証環境を構築する際、注意点が1つあります。impaladは、HDFSに直接アクセスするため、impaladのプロセスオーナーがHDFSへのアクセス許可されている必要があります。
具体的には、HDFS側の設定で、impaladのプロセスオーナー(デフォルトでは「impala」)を、dfs.block.local-path-access.userパラメータに設定する必要があります。
設定はhdfs-site.xmlファイルに記述してもよいですが、今回はCloudera Managerの管理画面から「hdfsサービス」→「設定」画面で下図のように設定しています。
ベンチマーク方法
今回の評価では、オープンソースとして公開されているHiBenchというベンチマークソフトウェアのうち、Hiveのベンチマーク用のHiveBenchを使用しました*6。
ただし、HiveBenchには読み出し処理だけでなくテーブル作成処理や書き込み処理も含まれており、現状ImpalaはDDL(Data Definition Language)や「INSERT INTO TABLE〜SELECT〜」というクエリはサポートされていないため、今回はSELECTによる読み出しのみの処理時間でベンチマークしました。
*6 ベンチマークツールHiBench。利用方法やチュートリアルはリンク先の内容を基にしています。
さらに、HiBenchのWebサイトに記載されている手順でベンチマーク用のデータを生成した場合、ranking1というテーブルと、uservisits1というテーブルが生成されますが、後者のテーブルには10億レコードのデータが格納されます。
このまま使用しても問題ないのですが、処理時間があまりに長くなるため、今回は1/10にスケールダウンしてベンチマークを実施しました。
具体的には、HiBench/hivebench/conf/configure.shの35行目と36行目にあるパラメータを下記に示す通りに変更しています。
(変更前) 35:USERVISITS=1000000000 36:PAGES=120000000 (変更後) 35:USERVISITS=100000000 36:PAGES=12000000
生成されたテーブルはそれぞれ下記のスキーマになっています。
hive> describe rankings1; pageurl string pagerank int avgduration int hive> describe uservisits1; sourceip string desturl string visitdate string adrevenue double useragent string countrycode string languagecode string searchword string duration int
次に、ベンチマーク用のクエリとしては、sumやavgといった集計関数、サブクエリ、JOIN句、OrderBy句、GroupBy句が含まれているクエリを利用しました。具体的には、HiBench/hivebench/hive-benchmark/rankings_ uservisits_join.templateに記載のクエリをベースに、Impalaではdatediff関数が利用できないため、下記のクエリに修正して利用しました。
SELECT sourceIP, sum(adRevenue) as totalRevenue, avg(pageRank) FROM rankings R JOIN ( SELECT sourceIP, destURL, adRevenue FROM uservisits UV WHERE UV.visitDate >= '1999-01-01' AND UV.visitDate <= '2000-01-01' ) NUV ON (R.pageURL = NUV.destURL) group by sourceIP order by totalRevenue DESC limit 1;
また、HiveストレージフォーマットとしてはTextFile、SequenceFile、およびRCFileの3種類について、ファイル圧縮方式としては無圧縮、Gzip、およびSnappyの3種類について、それぞれ計5回計測したクエリの平均処理時間で比較を行いました。ただし、ImpalaはRCFileおよび圧縮されたTextFileをサポートしていないため、今回のベンチマークでは除外しています。
Copyright © ITmedia, Inc. All Rights Reserved.