Hadoop 基准测试

此页面讨论使用 Hadoop 提供的工具对 Hadoop 进行基准测试。

NNThroughputBenchmark

概述

顾名思义,NNThroughputBenchmark 是一个名称节点吞吐量基准测试,它在单个节点上针对名称节点运行一系列客户端线程。如果未配置名称节点,它将首先在同一进程中启动一个名称节点(独立模式),在这种情况下,每个客户端通过直接调用相应的名称节点方法重复执行相同的操作。否则,基准测试将通过客户端协议 RPC(远程模式)针对远程名称节点执行操作。无论哪种方式,所有客户端都在单个进程中本地运行,而不是跨不同节点远程运行。原因是避免由 RPC 连接和序列化引起的通信开销,从而揭示名称节点纯性能的上限。

该基准测试首先为每个线程生成输入,以便输入生成开销不会影响结果统计信息。线程执行的操作数实际上是相同的。确切地说,任何两个线程执行的操作数之间的差异不超过 1。然后,基准测试使用指定数量的线程执行指定数量的操作,并通过测量每秒名称节点执行的操作数来输出结果统计信息。

命令

通用命令行语法为

hadoop org.apache.hadoop.hdfs.server.namenode.NNThroughputBenchmark [genericOptions] [commandOptions]

通用选项

此基准测试遵循 Hadoop 命令行通用选项 来改变其行为。该基准测试与其他工具一样,将依赖于 fs.defaultFS 配置,该配置可通过 -fs 命令选项覆盖,以运行独立模式或远程模式。如果未指定 fs.defaultFS 架构或为 file(本地),则基准测试将在独立模式下运行。特别是,远程名称节点配置 dfs.namenode.fs-limits.min-block-size 应设置为 16,而在独立模式下,基准测试会关闭其内部名称节点的最小块大小验证。

命令选项

以下为所有受支持的命令选项

COMMAND_OPTION 说明
-op 指定操作。必须提供此选项,并且应为第一个选项。
-logLevel 指定基准测试运行时的日志记录级别。默认日志记录级别为 ERROR。
-UGCacheRefreshCount 在指定数量的操作后,基准测试会清除名称节点的用户组缓存。默认情况下,永远不会调用刷新。
-keepResults 如果指定,则在执行后不清理名称空间。默认情况下,测试后将删除名称空间。
受支持的操作

以下是所有受支持的操作以及它们各自的操作特定参数(全部为可选)和默认值。

OPERATION_OPTION 操作特定参数
all 其他操作的选项
create [-threads 3] [-files 10] [-filesPerDir 4] [-close]
mkdirs [-threads 3] [-dirs 10] [-dirsPerDir 2]
open [-threads 3] [-files 10] [-filesPerDir 4] [-useExisting]
delete [-threads 3] [-files 10] [-filesPerDir 4] [-useExisting]
fileStatus [-threads 3] [-files 10] [-filesPerDir 4] [-useExisting]
rename [-threads 3] [-files 10] [-filesPerDir 4] [-useExisting]
blockReport [-datanodes 10] [-reports 30] [-blocksPerReport 100] [-blocksPerFile 10]
replication [-datanodes 10] [-nodesToDecommission 1] [-nodeReplicationLimit 100] [-totalBlocks 100] [-replication 3]
clean N/A
操作选项

使用上述操作运行基准测试时,请提供如下所示的操作特定参数。

OPERATION_SPECIFIC_OPTION 说明
-threads 运行相应操作的总线程数。
-files 相应操作的总文件数。
-dirs 相应操作的总目录数。
-filesPerDir 每个目录的文件数。
-close 创建后关闭文件。
-dirsPerDir 每个目录的目录数。
-useExisting 如果指定,则不要重新创建名称空间,而是使用现有数据。
-datanodes 模拟数据节点的总数。
-reports 要发送的块报告总数。
-blocksPerReport 每个报告的块数。
-blocksPerFile 每个文件的块数。
-nodesToDecommission 要退役的模拟数据节点总数。
-nodeReplicationLimit 数据节点的最大传出复制流数。
-totalBlocks 要操作的总块数。
-replication 复制因子。如果它大于数据节点的数量,它将调整为数据节点的数量。

报告

基准测量名称节点每秒执行的操作数。具体来说,对于测试的每个操作,它报告总运行时间(以秒为单位)(已用时间)、操作吞吐量(每秒操作数)和操作的平均时间(平均时间)。越高越好。

以下是通过运行以下命令获得的示例报告,该命令使用 1K 线程对远程名称节点打开 100K 个文件。请参阅 HDFS 可扩展性:增长极限 以获取真实基准统计数据。

$ hadoop org.apache.hadoop.hdfs.server.namenode.NNThroughputBenchmark -fs hdfs://nameservice:9000 -op open -threads 1000 -files 100000

--- open inputs ---
nrFiles = 100000
nrThreads = 1000
nrFilesPerDir = 4
--- open stats  ---
# operations: 100000
Elapsed Time: 9510
 Ops per sec: 10515.247108307045
Average Time: 90