生物物理計算化学者の雛

主に科学に関する諸々を書き留めています。

複数ディスク使用によるHDFS読込処理パフォーマンス向上

大容量データ処理といえば 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接続

実行した処理

  • 自分で作製した Hadoop SequenceFile 形式データの読込処理。
  • 上記3台のマシンに Hadoop-0.21.0 をインストール。
  • 各マシンの Map スロット数は12(1 スロット/コア)。
  • 3台のマシンの HDFS 利用ディスク数を 1 台, 5 台, 10 台に設定してから HDFS にデータを流し込んでデータ読込 Map 処理を実行。
  • Map 処理数 〜2000 なので読込処理は十分に分散できている。
  • 実行中のネットワーク経由のデータ転送はほぼ0(ほぼ全てローカル HDD からの読込で済んでいる)。

結果

使用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 数と読込処理パフォーマンスはかなり良く比例した。
  • パフォーマンス最適化のためにはオプション指定が重要。