検索
連載

Hadoop用リアルタイムクエリエンジン ImpalaのポテンシャルをレビューしたDatabaseテクノロジレポート(3/4 ページ)

2012年10月24日に発表されたばかりのHadoop用リアルタイムクエリエンジンをいち早くレビュー。次期CDHに組み込まれる予定の新機能をどう使いこなす?

PC用表示 関連情報
Share
Tweet
LINE
Hatena

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.

ページトップに戻る