0

我正在使用 apache 提供的基准文件 TestDFSIO 测试我的 hadoop 配置。我正在根据本教程(资源 1)运行它:

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]

我对一些标志有点困惑,具体来说,缓冲区大小标志的用途是什么?此外,在作业成功完成时导航 hdfs(我首先执行了写入 TestDFSIO),我找不到我应该通过选择 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 的块大小。我尝试在 bufferSize 标志之后放置“64MB”(转换为字节),但这导致工作失败,这让我相信我不明白 buffersize 标志的用途,以及如何使用不同的块大小进行测试。您如何更改测试的块大小(根据资源 2)?

4

3 回答 3

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)?

块大小可以作为参数作为通用选项传递。尝试类似:

hadoop jar $HADOOP_HOME/hadoop-*test*.jar TestDFSIO -D dfs.block.size=134217728 -write
于 2012-09-10T21:10:47.707 回答
1

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

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

在处理 TestDFSIO 时,它通常意味着使用 lzo 或其他压缩(因此文件名附加了额外的内容)。

所以不想找

/benchmarking/TestDFSIO/io_write/part-00000

试试这个(见最后的 * 通配符):

hadoop fs -ls /benchmarking/TestDFSIO/io_write/part-00000* 
于 2013-02-01T16:42:48.777 回答
-1

试试这个问题(如何更改测试的块大小(根据资源 2)?

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

于 2016-10-19T17:03:44.520 回答