如何从 hadoop 集群上的 TestDFSIO 基准计算吞吐量
How to Calculate Throughput from TestDFSIO benchmark on hadoop cluster
我有一个包含 11 个节点的集群,其中 9 个是从节点,2 个是主节点,与 my previous question 中的相同。我正在这个使用 CDH 5.8.0 的集群上执行 TestDFSIO 基准测试。
我从 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
简而言之(粗略估计):
Total throughput [mb/sec] = total MBytes processed / test exec time
所以你的情况是~2.5GB。
或者,为了获得更准确的结果,找出集群上可用地图插槽的数量(来自 yarn 控制台的 VCores total 就可以了)并尝试这个:
Total throughput mb/sec = min(nrFiles, VCores total - 1) * Throughput mb/sec
但我建议使用略有不同的设置重复该测试,因为 IO 率标准偏差 结果非常高 (82.41435666074283)。
您将文件数设置为 10k。我假设所描述的集群没有可用的 10k 映射槽。现在,因为 TestDFSIO 运行s 每个文件有一个映射,所以需要不止一个 MapReduce wave 才能完成测试。这是不必要的。此外,最后一波通常 运行 的地图比前几波少。同时 运行ning 较少的地图会产生更好的个体吞吐量,这会影响准确性。例子 :
所以最好把任务数设置得低一些。数据节点中的驱动程序总数是一个很好的起点。请看下图:
我用不同的 nrFiles 参数值多次 运行 TestDFSIO。您可以看到,在超过某个点(在这种情况下驱动饱和)之后,没有太多进展。该集群的总吞吐量已达到 2.3GB/s。所以,要回答你的问题,你可以得到集群的总吞吐量 运行ning :
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 免费 space ;) 测试将生成:复制 * 大小 * nrFiles 数据量。不要超过集群容量的 60%。
- nrFiles 应低于可用的地图插槽(nrFiles <= VCores 总数 - 1,在 Yarn 上)
我有一个包含 11 个节点的集群,其中 9 个是从节点,2 个是主节点,与 my previous question 中的相同。我正在这个使用 CDH 5.8.0 的集群上执行 TestDFSIO 基准测试。
我从 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
简而言之(粗略估计):
Total throughput [mb/sec] = total MBytes processed / test exec time
所以你的情况是~2.5GB。
或者,为了获得更准确的结果,找出集群上可用地图插槽的数量(来自 yarn 控制台的 VCores total 就可以了)并尝试这个:
Total throughput mb/sec = min(nrFiles, VCores total - 1) * Throughput mb/sec
但我建议使用略有不同的设置重复该测试,因为 IO 率标准偏差 结果非常高 (82.41435666074283)。
您将文件数设置为 10k。我假设所描述的集群没有可用的 10k 映射槽。现在,因为 TestDFSIO 运行s 每个文件有一个映射,所以需要不止一个 MapReduce wave 才能完成测试。这是不必要的。此外,最后一波通常 运行 的地图比前几波少。同时 运行ning 较少的地图会产生更好的个体吞吐量,这会影响准确性。例子 :
所以最好把任务数设置得低一些。数据节点中的驱动程序总数是一个很好的起点。请看下图:
我用不同的 nrFiles 参数值多次 运行 TestDFSIO。您可以看到,在超过某个点(在这种情况下驱动饱和)之后,没有太多进展。该集群的总吞吐量已达到 2.3GB/s。所以,要回答你的问题,你可以得到集群的总吞吐量 运行ning :
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 免费 space ;) 测试将生成:复制 * 大小 * nrFiles 数据量。不要超过集群容量的 60%。
- nrFiles 应低于可用的地图插槽(nrFiles <= VCores 总数 - 1,在 Yarn 上)