Hadoop 基准 : TestDFSIO

标签 hadoop hdfs

我正在使用 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

作为测试参数之一,他们使用的 block 大小为 64MB 和 128MB。我尝试将“64MB”(转换为字节)放在 bufferSize 标志之后,但这导致作业失败,这让我相信我不了解 buffersize 标志的用途,以及如何使用不同的 block 大小进行测试。 如何更改测试的 block 大小(根据资源 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。

如何更改测试的 block 大小(根据资源 2)?

block 大小可以作为参数作为 generic option 传递.尝试类似的东西:

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

关于Hadoop 基准 : TestDFSIO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11856236/

相关文章:

hadoop - 在Hive/HBase集成中出现MR抓取错误

java - 使用Java API读取HDFS的默认 block 大小

Windows 上的 Hadoop 错误 : java. lang.UnsatisfiedLinkError

hadoop - 要安装和运行什么版本的 hadoop?

python - 在文件夹中使用Python库进行Hive转换

apache-spark - Spark 纱:问的容器太多

hadoop - 如何使用jar文件运行mapreduce示例?

linux - hdfs 无法通过 hduser、hadoop 安装访问

hadoop - Hive 输出大于 dfs block 大小限制

hadoop - 错误:$ hadoop namenode -format