Hive(YARN)/Impala/SPARKを行数カウントで比較してみる

Hive(YARN)とImpalaとSPARKを行数カウントで比較してみました。
それぞれ特性があるので比較するのはどうかと思うのですが、今回は目安として測定してみました。

環境

マスター1台、スレーブ2台の3台構成です。
今回もCloudera Managerでさくっと構築しました。便利です。

テストデータ

25GBのデータを用意しました。
HueのHiveメタデータストアでテーブル定義してHDFSへ格納。
HDFSのパスはこちらになります。
"/user/hive/warehouse/sudachi"

Hive(YARN)

クエリ

select count(*) from sudachi;

結果

MapReduce Total cumulative CPU time: 6 minutes 20 seconds 260 msec
Ended Job = job_1409890526154_0003
MapReduce Jobs Launched:
Job 0: Map: 97  Reduce: 1   Cumulative CPU: 380.26 sec   HDFS Read: 25707380802 HDFS Write: 9 SUCCESS
Total MapReduce CPU Time Spent: 6 minutes 20 seconds 260 msec
OK
29632350
Time taken: 606.387 seconds
試行回数 結果(秒)
1回目 606.387
2回目 598.691
3回目 596.449
4回目 598.018
5回目 596.066

Impala

クエリ

select count(*) from sudachi;

結果

+----------+
| count(*) |
+----------+
| 29632350 |
+----------+
Returned 1 row(s) in 135.88s
試行回数 結果(秒)
1回目 135.88
2回目 136.16
3回目 132.69
4回目 135.76
5回目 131.59

SPARK(Scala

クエリ

scala> val data = sc.textFile("/user/hive/warehouse/sudachi")
scala> data.count()

結果

14/09/26 21:20:35 INFO DAGScheduler: Stage 0 (count at :15) finished in 101.279 s
14/09/26 21:20:35 INFO SparkContext: Job finished: count at :15, took 101.454151833 s
res0: Long = 29632350
試行回数 結果(秒)
1回目 101.454151833
2回目 94.387601515
3回目 89.3584740776
4回目 96.786570886
5回目 88.747143305

SPARK(Python

クエリ

>>> data = sc.textFile("/user/hive/warehouse/sudachi")
>>> data.count()

結果

14/09/26 22:37:41 INFO DAGScheduler: Stage 0 (count at :1) finished in 322.851 s
14/09/26 22:37:41 INFO SparkContext: Job finished: count at :1, took 323.125389314 s
29632350
試行回数 結果(秒)
1回目 323.125389314
2回目 301.634321131
3回目 300.859390362
4回目 300.699601767
5回目 301.914918898

まとめ

SPARK(Scala)が今回一番速く処理が完了しました。一番遅かったHive(YARN)の約1/6です。
SPARKでもScalaPythonで実行速度に差が出るんだなと。
Impalaは実行速度も速いし、なんといっても複雑なクエリを簡単に書けるという利点があります。
やっぱりそれぞれ特性によって使い分けていくべきですね。
(ノ´▽`)ノ{+++THANK YOU+++}ヽ(´▽`ヽ)

Hadoopオペレーション ―システム運用管理ガイド

Hadoopオペレーション ―システム運用管理ガイド