2012-08-08 92 views
0

我正在用Apache提供的基准测试文件TestDFSIO测试我的hadoop配置。我按照这个教程运行它(资源1):Hadoop基准测试:TestDFSIO

http://www.michael-noll.com/blog/2011/04/09/benchmarking-and-stress-testing-an-hadoop-cluster-with-terasort-testdfsio-nnbench-mrbench/#testdfsio

测试的用法如下:

TestDFSIO.0.0.4 
Usage: hadoop jar $HADOOP_HOME/hadoop-*test*.jar TestDFSIO 
      -read | -write | -clean 
      [-nrFiles N] [-fileSize MB] 
      [-resFile resultFileName] [-bufferSize Bytes] 

我有点困惑的一些标志,具体来说,什么是缓冲区大小标志?另外,当成功完成作业(我第一次执行写入TestDFSIO)时导航hdfs,我找不到我通过选择resultFileName创建的文件名。 为什么我找不到使用resultFileName的文件?

我也看了这个页面(资源2)(具体第25页):

http://wr.informatik.uni-hamburg.de/_media/research/labs/2009/2009-12-tien_duc_dinh-evaluierung_von_hadoop-report.pdf

由于其测试的参数之一,他们使用64MB的块大小是和128MB。我试着在缓冲区大小标志之后放入'64MB'(转换为字节),但是这导致失败的作业,这导致我相信我不明白什么是buffersize标志,以及如何使用不同的块大小进行测试。 如何更改测试的块大小(按资源2)?

回答

2

什么是缓冲区大小标志?

缓冲区大小标志以字节为单位描述了写入缓冲区的长度。参见TestDFSIO.java的WriteMapper构造:

public WriteMapper() { 
    for(int i=0; i < bufferSize; i++) 
    buffer[i] = (byte)('0' + i % 50); 
} 

在这里,被产生并写入到磁盘之前写入到存储器中的缓冲区的数据。稍后写入磁盘时,它将全部写入一个步骤,而不是每个字节一个步骤。更少的写入通常意味着更好的性能,所以更大的缓冲区可能会提高性能。

为什么我找不到使用resultFileName的文件?

结果通常会自动写入/ benchmarks/TestDFSIO。如果您没有找到它,请在作业日志中搜索mapred.output.dir。

如何更改测试的块大小(按资源2)?

块大小可作为参数传递为generic option。尝试是这样的:

hadoop jar $HADOOP_HOME/hadoop-*test*.jar TestDFSIO -D dfs.block.size=134217728 -write 
1

为什么我无法找到我使用的resultFileName文件? 你应该有可能看到这样一行在作业执行日志的末尾:

java.io.FileNotFoundException: File does not exist: /benchmarks/TestDFSIO/io_write/part-00000 

在处理TestDFSIO这通常意味着LZO或其他使用压缩(所以有额外的东西附加到文件名) 。

寻找

/benchmarking/TestDFSIO/io_write/part-00000 

试试这个(见*末通配符),因此instad:

hadoop fs -ls /benchmarking/TestDFSIO/io_write/part-00000* 
-1

尝试此这个问题(如何改变的块大小测试(按资源2)?

hadoop jar $_HADOOP_HOME/share/hadoop/mapreduce/hadoop-*test*.jar.jar TestDFSIO -write -nrFiles 4 -fileSize 250GB -resFile /tmp/TestDFSIOwrite.txt