- Authors
- Name
Background
HBaseでFull Scanを行う場合と、MapReduceでテーブル全体のrowを巡回する場合、どれくらいの時間差が生じるか比較してみる。
HBase Full Scan vs MapReduce
Full Scan
HBaseに基本的に内蔵されているScanという演算に何の制約条件も付けずに使用すると、テーブルの全rowを巡回できる。HBase shellにはcountというオペレーションがあり、これを利用して約500万件のrowを巡回したところ、約235秒、約4分かかった。
hbase:002:0> count 'usertable'
5119700 row(s)
Took 235.7437 seconds
=> 5119700
MapReduce Row Count
HBase Row Count MapReduce開発方法を参考にRow Countアプリケーションを作成し、実行したところ約104秒、2分もかからなかった。
root@latte01:~# hadoop jar hbase-mapreduce-test.jar RowCounterJob
23/06/11 00:02:36 INFO mapreduce.Job: Job job_1686391929383_0004 running in uber mode : false
23/06/11 00:02:36 INFO mapreduce.Job: map 0% reduce 0%
...
23/06/11 00:04:17 INFO mapreduce.Job: map 94% reduce 0%
23/06/11 00:04:19 INFO mapreduce.Job: map 100% reduce 0%
23/06/11 00:04:20 INFO mapreduce.Job: Job job_1686391929383_0004 completed successfully
23/06/11 00:04:20 INFO mapreduce.Job: Counters: 44
RowCounterMapper$Counters
ROWS=5119700
File Input Format Counters
Bytes Read=0
File Output Format Counters
Bytes Written=0
理論的には3台のNode Managerが作業を並列処理するため、約3倍速くなるはずだが、タスクを分割し統合する過程で生じるオーバーヘッドがあるため、約2.25倍程度速いことが確認できた。並列処理を行えるWorker Nodeが増えるほど演算速度はさらに速くなり、Full Scan時にMapReduceを活用すれば、シングルスレッドでScanするのとは比較にならないほど高速に処理できるだろう。したがって、HBaseで何らかのバッチ性ジョブを実行する必要があり、それを短時間で完了させなければならない場合は、MapReduceでの実行を検討する価値がある。