我正在使用apache提供的基准文件TestDFSIO测试我的hadoop配置。我正在根据本教程(资源1)运行它:
测试的用法如下:
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页):
作为测试的参数之一,他们使用64MB和128MB的块大小。我尝试在bufferSize标志之后放入'64MB'(转换为字节),但这导致失败的作业,这使我相信我不明白bufferize标志是什么,以及如何使用不同的块大小进行测试。 如何更改测试的块大小(根据资源2)?
答案 0 :(得分: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 :(得分:1)
为什么我不能通过我使用的resultFileName找到该文件? 您应该在作业执行日志的末尾看到这样的一行:
java.io.FileNotFoundException: File does not exist: /benchmarks/TestDFSIO/io_write/part-00000
在处理TestDFSIO时,通常意味着使用lzo或其他压缩(因此文件名附加了额外的东西)。
所以寻找
的instad/benchmarking/TestDFSIO/io_write/part-00000
试试这个(见最后的*通配符):
hadoop fs -ls /benchmarking/TestDFSIO/io_write/part-00000*
答案 2 :(得分:-1)
试试这个问题(如何更改测试的块大小(根据资源2)?
hadoop jar $_HADOOP_HOME/share/hadoop/mapreduce/hadoop-*test*.jar.jar TestDFSIO -write -nrFiles 4 -fileSize 250GB -resFile /tmp/TestDFSIOwrite.txt