如何计算hadoop集群上TestDFSIO基准测试的吞吐量

时间:2016-08-30 09:11:53

标签: hadoop benchmarking hadoop2

我有一个包含11个节点的集群,9个是奴隶,2个是主,与my previous question中的相同。我正在该集群上执行TestDFSIO基准测试,该集群使用CDH 5.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

1 个答案:

答案 0 :(得分:8)

简而言之(粗略估计):

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

所以〜在你的情况下为2.5GB。

或者,要获得更准确的结果,请找出群集中可用地图位置的数量(来自纱线控制台的 VCores total )并尝试以下方法:

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

但我建议使用稍微不同的设置重复该测试,因为 IO rate std deviation 结果非常高(82.41435666074283)。

您将文件数设置为10k。我假设所描述的集群没有可用的10k映射插槽。现在,因为TestDFSIO每个文件运行一个映射,所以需要多个MapReduce wave才能完成测试。这是不必要的。此外,最后一波通常以比前一波更少的地图运行。同时运行较少的地图将产生更好的个人吞吐量,这将影响准确性。示例: TestDFSIO single task throughput

因此最好将任务数量设置为更低的值。数据节点中的驱动程序总数是一个很好的起点。请看下面的图表:TestDFSIO total throughput

我使用不同的 nrFiles 参数值多次运行TestDFSIO。你可以看到,在越过某一点(在这种情况下驱动器饱和)之后,没有太多事情发生。此群集的总吞吐量已达到2.3GB / s。因此,要回答您的问题,您可以获得群集的总吞吐量:

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

其中:

  • N = 3 / replication_factor * total_datanodes_drives
  • -size应该设置为允许测试运行至少10分钟
  • 的东西

总吞吐量可以使用结果中的值计算,如下所示:

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

值得关注的事项:

  • HDFS可用空间;)测试将生成:replication * size * nrFiles 数据量。不要超过集群容量的60%。
  • nrFiles 应低于可用的地图广告位( nrFiles < = VCores total - 1,on yarn)