此頁面討論使用 Hadoop 提供的工具進行基準測試。
NNThroughputBenchmark,顧名思義,是一個名稱節點吞吐量基準,它在單一節點上對名稱節點執行一系列的用戶端執行緒。如果未設定名稱節點,它將首先在同一個程序中啟動一個名稱節點(獨立模式),在這種情況下,每個用戶端重複執行相同的操作,直接呼叫各自的名稱節點方法。否則,基準將通過用戶端協定 RPC(遠端模式)對遠端名稱節點執行操作。無論哪種方式,所有用戶端都在單一程序中本地執行,而不是遠端跨不同節點執行。原因是避免由 RPC 連線和序列化造成的通訊負擔,從而揭示名稱節點純粹效能的上限。
基準測試首先為每個執行緒產生輸入,以便輸入產生負擔不會影響產生的統計資料。執行緒執行的操作數目實際上是相同的。精確來說,任何兩個執行緒執行的操作數目差異不會超過 1。然後,基準測試使用指定數目的執行緒執行指定數目的操作,並透過測量名稱節點每秒執行的操作數目,輸出產生的統計資料。
一般命令列語法為
hadoop org.apache.hadoop.hdfs.server.namenode.NNThroughputBenchmark [genericOptions] [commandOptions]
此基準測試會採用 Hadoop 命令列一般選項 來變更其行為。此基準測試會像其他工具一樣,仰賴 fs.defaultFS
設定檔,可透過 -fs
命令選項覆寫,以執行獨立模式或遠端模式。如果未指定 fs.defaultFS
架構或為 file
(本機),基準測試會以獨立模式執行。特別是,遠端 NameNode 設定檔 dfs.namenode.fs-limits.min-block-size
應設定為 16,而基準測試會在獨立模式關閉其內部 NameNode 的最小區塊大小驗證。
以下是所有支援的命令選項
COMMAND_OPTION | 說明 |
---|---|
-op |
指定作業。此選項為必填,且應為第一個選項。 |
-logLevel |
指定基準測試執行時的記錄等級。預設記錄等級為 ERROR。 |
-UGCacheRefreshCount |
在執行指定次數的作業後,基準測試會清除 NameNode 的使用者群組快取。預設上從未呼叫更新。 |
-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