此页面讨论使用 Hadoop 提供的工具对 Hadoop 进行基准测试。
顾名思义,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