名前付規則とかさ...
Amazon Elastic MapReduceのベースとなっているHadoopの性能を測定中。Hadoop本(洋書)268ページに記載されているrandomwriterを使っているのだが、ノード数が変わると書き出されるファイル容量も変わってくる。なんでじゃろと調べてみた。
Hadoop WikiのRandomWriterによれば
- test.randomwriter.maps_per_host
- test.randomwrite.bytes_per_map
- test.randomwrite.min_key
- test.randomwrite.max_key
- test.randomwrite.min_value
- test.randomwrite.max_value
という引数を取れる。つまり、ノードを増やした場合にはmaps_per_hostとbytes_per_mapを調整してやらないとベンチマーク指標にはならない。例えばAEMで16ノードを立ち上げた場合、Mapperが走るノードは15となるから、デフォルトでは150のMapperが走る。全部で1GBを出力したいのなら、1073741824/150=7158278をtest.randomwrite.bytes_per_mapで指定してやる必要がある。こんな感じ。
$ hadoop jar hadoop-examples.jar randomwriter -D test.randomwrite.min_key=10 -D test.randomwrite.max_key=10 -D test.randomwrite.min_value=90 -D test.randomwrite.max_value=90 -D test.randomwrite.bytes_per_map=7158278 -D test.randomwriter.maps_per_host=10 random-data
m1.smallだと1分前後で処理は終わる。
どうでも良いこと
maps_per_hostだけtest.randomwriter.maps_per_hostで、あとはtest.randomwrite.*なのはなぜ? これに気づかず、悶々と悩んでしまった。ソースをみても
int numMaps = cluster.getTaskTrackers() * jobConf.getInt("test.randomwriter.maps_per_host", 10);
numBytesToWrite = job.getLong("test.randomwrite.bytes_per_map", 1*1024*1024*1024); minKeySize = job.getInt("test.randomwrite.min_key", 10); keySizeRange = job.getInt("test.randomwrite.max_key", 1000) - minKeySize; minValueSize = job.getInt("test.randomwrite.min_value", 0); valueSizeRange = job.getInt("test.randomwrite.max_value", 20000) - minValueSize;
意図的なのか間違いなのかわからんが、できれば揃えて欲しかった。でも解説書が不揃いのままで公開されちゃってるから、もう手遅れなのねん。
→てかさー、こういう仕掛けなら変数名をクラス属性っぽく決めないでほしかった。
- 作者: Tom White,Doug Cutting
- 出版社/メーカー: Oreilly & Associates Inc
- 発売日: 2009/06/16
- メディア: ペーパーバック
- 購入: 1人 クリック: 61回
- この商品を含むブログ (8件) を見る
- 作者: Tom White,玉川竜司,兼田聖士
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/01/25
- メディア: 大型本
- 購入: 9人 クリック: 449回
- この商品を含むブログ (73件) を見る