如何从hadoop集群上的testdfsio基准计算吞吐量

nkkqxpd9  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(597)

我有一个集群,有11个节点,9个是从节点,2个是主节点,和我前面的问题一样。我正在这个集群上执行testdfsio基准测试,它使用cdh5.8.0。
我从testdfsio结果得到以下输出。这是吞吐量吗?或者我需要从中计算吞吐量,比如文件数量乘以testdfsio结果吞吐量或者其他什么?
请告诉我如何获得整个集群的吞吐量。

----- TestDFSIO ----- : write
           Date & time: Mon Aug 29 07:28:01 MDT 2016
       Number of files: 10000
Total MBytes processed: 8000000.0
     Throughput mb/sec: 50.75090177850001
Average IO rate mb/sec: 85.83160400390625
 IO rate std deviation: 82.41435666074283
    Test exec time sec: 3149.755
n53p2ov0

n53p2ov01#

简而言之(粗略估计):

Total throughput [mb/sec] = total MBytes processed / test exec time

所以你的情况是2.5gb。
或者,要获得更准确的结果,请找出集群上可用的Map槽的数量(来自yarn控制台的vcores总数可以做到),然后尝试以下方法:

Total throughput mb/sec = min(nrFiles, VCores total - 1) * Throughput mb/sec

但我建议使用稍微不同的设置重复该测试,因为io率std偏差结果非常高(82.41435666074283)。
您将文件数设置为10k。我假设所描述的集群没有可用的10kMap槽。现在,由于testdfsio在每个文件中运行一个Map,因此需要多个mapreduce wave才能完成测试。这是不必要的。此外,最后一波通常运行的Map比前一波少。同时运行较少的Map将产生更好的单个吞吐量,这将影响准确性。例子:

因此,最好将任务数设置为较低的值。datanodes中的驱动程序总数是一个很好的起点。请看下图:

我用不同的nrfiles参数值运行了几次testdfsio。您可以看到,在经过某个点(在本例中是驱动饱和)之后,并没有发生太多的事情。该集群的总吞吐量已达到2.3gb/s。因此,要回答您的问题,您可以得到集群运行的总吞吐量:

hdfs yarn jar hadoop-mapreduce-client-jobclient.jar TestDFSIO -write -nrFiles N -size 10GB

哪里:
n=3/复制系数*总数据节点\u驱动器
-大小应该设置为允许测试运行至少10分钟的值
总吞吐量可以使用结果中的值来计算,如下所示:

Total throughput [mb/sec] = nrFiles * Throughput mb/sec

注意事项:
hdfs可用空间;)测试将生成:复制大小数据量。不要超过集群容量的60%。
nrfiles应低于可用的Map槽(nrfiles<=vcores total-1,在Yarn上)

相关问题