合成負載產生器 (SLG) 是用於在不同用戶負載下測試 NameNode 行為的工具。用戶可以透過指定讀取和寫入的機率,產生不同的讀取、寫入和列出要求組合。用戶可以透過調整工作執行緒數量和作業之間的延遲參數,來控制負載的強度。在負載產生器執行期間,用戶可以分析和監控 NameNode 的執行狀況。當負載產生器結束時,它會列印一些 NameNode 統計資料,例如每種作業的平均執行時間和 NameNode 處理量。
命令的概要如下
yarn jar <HADOOP_HOME>/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-<hadoop-version>.jar NNloadGenerator [options]
選項包括
-readProbability
讀取機率
讀取作業的機率;預設值為 0.3333。
-writeProbability
寫入機率
寫入作業的機率;預設值為 0.3333。
-root
測試空間根目錄
測試空間的根目錄;預設值為 /testLoadSpace。
-maxDelayBetweenOps
maxDelayBetweenOpsInMillis
兩個連續執行緒之間的最大延遲時間;預設為 0,表示沒有延遲。
-numOfThreads
numOfThreads
要產生的執行緒數量;預設為 200。
-elapsedTime
elapsedTimeInSecs
程式執行秒數;值為零表示程式永遠執行。預設值為 0。
-startTime
startTimeInMillis
所有工作執行緒開始執行的時間。預設為主程式開始執行後 10 秒。如果執行多個負載產生器,這會建立一個障礙。
-seed
seed
使用單一執行緒執行時,重複向 NameNode 提出要求的亂數產生器種子;預設為目前時間。
在命令列引數剖析後,負載產生器會遍歷測試空間並建立所有目錄的表格和測試空間中所有檔案的另一個表格。接著,它會等到開始時間,產生使用者指定的數量的工作執行緒。每個執行緒都會傳送請求串流至 NameNode。在每次反覆運算時,它會先決定是否要根據使用者指定的讀取和寫入機率讀取檔案、建立檔案或列出目錄。列出機率等於 1 減去讀取機率減去寫入機率。讀取時,它會在測試空間中隨機選擇一個檔案並讀取整個檔案。寫入時,它會在測試空間中隨機選擇一個目錄並在那裡建立一個檔案。
為了避免兩個執行緒擁有相同的負載產生器或來自兩個不同負載產生器的執行緒建立相同的檔案,檔案名稱包含目前電腦的主機名稱和執行緒 ID。檔案長度遵循平均大小為 2 個區塊、標準差為 1 的高斯分布。新檔案會填入位元組「a」。為了避免測試空間無限擴充,檔案會在建立完成後立即刪除。列出時,它會在測試空間中隨機選擇一個目錄並列出其內容。
在執行緒完成執行後,如果指定的延遲時間不為零,執行緒會暫停 [0, maxDelayBetweenOps] 範圍內的隨機時間。在指定的經過時間過後,所有執行緒都會停止。在結束之前,程式會印出每種類型 NameNode 執行的平均執行時間,以及 NameNode 每秒處理的請求數量。
使用者需要在執行負載產生器之前設定測試空間。結構產生器會產生隨機測試空間結構,資料產生器會在 Hadoop 分散式檔案系統中建立測試空間的檔案和目錄。
此工具會產生一個隨機的命名空間結構,並具有下列限制條件
一個目錄可以擁有的子目錄數量是 [minWidth, maxWidth] 中的隨機數字。
每個子目錄的最大深度是 [2*maxDepth/3, maxDepth] 中的隨機數字。
檔案會隨機放置在葉子目錄中。每個檔案的大小會遵循平均大小為 1 個區塊且標準差為 1 的高斯分佈。
產生的命名空間結構會由輸出目錄中的兩個檔案描述。第一個檔案的每一行都包含一個葉子目錄的全名。第二個檔案的每一行都包含一個檔案的全名及其大小,並以空白分隔。
命令的概要如下
yarn jar <HADOOP_HOME>/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-<hadoop-version>.jar NNstructureGenerator [options]
選項包括
-maxDepth
maxDepth
目錄樹的最大深度;預設為 5。
-minWidth
minWidth
每個目錄的子目錄最小數量;預設為 1。
-maxWidth
maxWidth
每個目錄的子目錄最大數量;預設為 5。
-numOfFiles
#OfFiles
測試空間中的檔案總數;預設為 10。
-avgFileSize
avgFileSizeInBlocks
區塊的平均大小;預設為 1。
-outDir
outDir
輸出目錄;預設為目前目錄。
-seed
seed
亂數產生器的種子;預設為目前時間。
此工具會從輸入目錄讀取目錄結構和檔案結構,並在 Hadoop 分散式檔案系統中建立命名空間。所有檔案都會填入位元組「a」。
命令的概要如下
yarn jar <HADOOP_HOME>/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-<hadoop-version>.jar NNdataGenerator [options]
選項包括
-inDir
inDir
儲存目錄/檔案結構的輸入目錄名稱;預設為目前目錄。
-root
測試空間根目錄
新命名空間將放置在其下的根目錄名稱;預設為「/testLoadSpace」。