大容量データ処理といえば Hadoop!!
と大いに流行っていることもあって、最近は Hadoop でいろいろテストしています。
少し前に複数ディスクを使うとどれだけ HDFS 読込処理パフォーマンスが向上するか測定したので、その結果を簡単にまとめておきます。
(http://shun0102.net/?p=75 これの二番煎じです)
導入マシンのスペック
以下のスペックマシンを3台使ってテスト。マスターノードはこれとは別に用意しています。
- CPU:Xeon X5550 6コア × 2、12コア(HTT OFF)
- HDD:3.5 inch SATA 2 TB HDD × 10 (HDD山盛り)
- Gigabit Eather接続
実行した処理
結果
使用HDD数 | 読込レコード数(使用HDD数1のときを1.00とする) |
---|---|
1 | 1.00 |
5 | 1.78 |
10 | 1.95 |
単純なデータ読込処理なのでHDD数に比例して読込速度が向上してほしいが、全然性能が上がらない。
結果(JVMを使いまわすようにオプション指定)
いろいろ試したところ、JVM を使いまわすようにオプションを指定(mapreduce.job.jvm.numtasks = -1)したところ、全体の読込処理速度は約 3 倍まで向上し、複数ドライブ使用による読込処理向上も大きくなった。
使用HDD数 | 読込レコード数(使用HDD数1のときを1.00とする) |
---|---|
1 | 1.00 |
5 | 4.40 |
10 | 5.82 |
HDD 5 台で読込速度 4.4 倍なので、このくらいの HDD 数ならば良く比例している。
HDD 10 台まで増やしても効率はさほど上がらない。(マザーボード等の I/O 帯域の問題??)
結論
- 5 台程度までであれば HDD 数と読込処理パフォーマンスはかなり良く比例した。
- パフォーマンス最適化のためにはオプション指定が重要。