Rumen 是一個為 Apache Hadoop 建置的資料萃取和分析工具。Rumen 會探勘 JobHistory 記錄檔以萃取有意義的資料,並將其儲存在易於解析的濃縮格式或 摘要 中。MapReduce 記錄檔中的原始追蹤資料通常不足以進行模擬、仿真的運算,以及基準測試,因為這些工具通常會嘗試測量原始資料中未發生的情況。例如,如果某個工作在原始追蹤資料中是在本機執行,但排程器的模擬選擇在遠端機架上執行該工作,則模擬器需要一個其輸入無法提供的執行時間。為了填補這些空白,Rumen 會對摘要進行統計分析,以估計追蹤資料未提供的變數。Rumen 追蹤會驅動 Gridmix(Hadoop MapReduce 叢集的基準測試)和 SLS(資源管理員排程器的模擬器)。
從 JobHistory 記錄檔中萃取有意義的資料是任何建置於 MapReduce 上的工具的常見工作。撰寫與 MapReduce 架構緊密結合的客製化工具是一件繁瑣的事。因此,需要一個內建工具來執行記錄檔解析和分析的架構層級工作。這樣的工具會保護依賴於工作記錄的外部系統,不受工作記錄格式變更的影響。
執行各種 MapReduce 工作屬性的統計分析,例如工作執行時間、工作失敗等,是基準測試和模擬工具可能需要的另一項常見工作。Rumen 會為 Map/Reduce 工作執行時間產生 累積分配函數 (CDF)。執行時間 CDF 可用於推算不完整、遺失和合成工作的執行時間。類似地,也會為每次嘗試的成功工作總數計算 CDF。
Rumen 包含 2 個元件
追蹤建構器:將工作歷程記錄轉換成易於剖析的格式。目前 TraceBuilder 會以 JSON 格式輸出追蹤。
*資料夾*:縮放輸入追蹤的公用程式。從 TraceBuilder 取得的追蹤僅摘要輸入資料夾和檔案中的工作。特定追蹤中所有工作完成的時間範圍可視為追蹤執行時間。資料夾可縮放追蹤的執行時間。減少追蹤執行時間可能包括從輸入追蹤中刪除一些工作,並縮小剩餘工作的執行時間。增加追蹤執行時間可能包括將一些虛擬工作加入結果追蹤,並放大個別工作的執行時間。
將工作歷程記錄轉換成所需的追蹤工作包括 2 個步驟
將資訊萃取成中間格式
調整從中間追蹤取得的追蹤工作,以具有所需的屬性。
從工作歷程記錄萃取資訊是一次性操作。這個所謂的「黃金追蹤」可重複使用,以產生具有所需屬性值的追蹤,例如輸出期間、集中度等。
Rumen 提供 2 個基本指令
追蹤建構器
資料夾
首先,我們需要產生黃金追蹤。因此,第一步是在工作歷程記錄資料夾上執行 TraceBuilder。TraceBuilder 的輸出是追蹤工作檔案 (和選用的叢集拓撲檔案)。如果我們想要縮放輸出,我們可以使用資料夾公用程式將目前的追蹤折疊成所需的長度。本節的剩餘部分會詳細說明這些公用程式。
hadoop rumentrace [options] <jobtrace-output> <topology-output> <inputs>
此指令呼叫 Rumen 的 TraceBuilder
程式。
TraceBuilder 將 JobHistory 檔案轉換成一系列 JSON 物件,並將它們寫入 <jobtrace-output>
檔案。它也會擷取叢集配置 (拓撲) 並將其寫入 <topology-output>
檔案。<inputs>
代表 JobHistory 檔案和資料夾的空白分隔清單。
1) 預期
TraceBuilder
的輸入和輸出為完全限定的檔案系統路徑。因此,請使用 file:// 指定local
檔案系統上的檔案,並使用 hdfs:// 指定 HDFS 上的檔案。由於輸入檔案或資料夾為檔案系統路徑,這表示它們可以是 globbed。在使用正規表示法指定多個檔案路徑時,這很有用。2) 預設情況下,TraceBuilder 不會遞迴掃描輸入資料夾以尋找工作歷程記錄檔。只有直接放置在輸入資料夾下的檔案才會考慮用於產生追蹤。若要透過遞迴掃描輸入資料夾來新增輸入目錄下的所有檔案,請使用「-recursive」選項。
叢集拓撲的用途如下
重建分割,並確保在實際執行中看到的距離/延遲正確建模。
為缺少分割詳細資料或合成產生的工作推斷分割資訊。
參數 | 說明 | 備註 |
---|---|---|
-demuxer |
用於讀取工作歷程記錄檔。預設為 DefaultInputDemuxer 。 |
Demuxer 決定輸入檔案如何對應到工作歷程記錄檔。工作歷程記錄和工作設定檔通常是小型檔案,當嵌入在某些容器檔案格式(例如 SequenceFile 或 TFile)中時,可以更有效地儲存。為了支援此類使用案例,可以指定自訂的 Demuxer 類別,該類別可以從來源檔案中擷取個別的工作歷程記錄和工作設定檔。 |
-recursive |
遞迴遍歷輸入路徑以尋找工作歷程記錄。 | 此選項應使用於告知 TraceBuilder 遞迴掃描輸入路徑並處理其下的所有檔案。請注意,預設情況下,只有直接位於輸入資料夾下的歷程記錄才會考慮用於產生追蹤。 |
hadoop rumentrace \ file:///tmp/job-trace.json \ file:///tmp/job-topology.json \ hdfs:///tmp/hadoop-yarn/staging/history/done_intermediate/testuser
這會分析儲存在 HDFS
檔案系統上的 /tmp/hadoop-yarn/staging/history/done_intermediate/testuser
中的所有工作,並將工作追蹤輸出到儲存在 local
檔案系統上的 /tmp/job-trace.json
,以及將拓撲資訊輸出到 /tmp/job-topology.json
。
hadoop rumenfolder [options] [input] [output]
此指令呼叫 Rumen 的 Folder
程式。折疊基本上表示結果追蹤的輸出持續時間是固定的,而工作時程會調整以符合最終輸出持續時間。
輸入和輸出到
Folder
預期是完全合格的檔案系統路徑。因此使用file://
指定local
檔案系統上的檔案,並使用hdfs://
指定 HDFS 上的檔案。
參數 | 說明 | 備註 |
---|---|---|
-input-cycle |
定義折疊操作的基本時間單位。input-cycle 沒有預設值。必須提供輸入週期。
|
'-input-cycle 10m ' 表示整個追蹤執行現在將以 10 分鐘間隔切片。基本操作將在 10 分鐘區塊上執行。請注意,*Rumen* 了解各種時間單位,例如 m(分鐘)、h(小時)、d(天) 等。
|
-output-duration |
此參數定義追蹤的最終執行時間。預設值為 1 小時。 | '-output-duration 30m ' 表示結果追蹤的最大執行時間為 30 分鐘。輸入追蹤檔案中的所有工作將折疊並縮放以符合此視窗。
|
-concentration |
設定結果追蹤的濃度。預設值為 1。 | 如果結果追蹤的總執行時間小於輸入追蹤的總執行時間,則結果追蹤將包含比輸入追蹤更少的工作數。這基本上表示輸出被稀釋了。若要增加工作的密度,請將濃度設定為較高的值。 |
-debug |
在偵錯模式下執行資料夾。預設設定為 false。 | 在偵錯模式下,資料夾將列印額外的陳述式以進行偵錯。此外,在暫存目錄中產生的中間檔案不會被清除。 |
-seed |
亂數產生器的初始種子。預設情況下,會使用亂數產生器產生種子,並將種子值回報給使用者以供未來使用。 | 如果傳遞初始種子,則 亂數產生器 將以相同順序產生亂數,亦即如果使用相同的種子,亂數順序將保持相同。資料夾使用亂數產生器來決定是否發出工作。
|
-temp-directory |
資料夾的暫存目錄。預設情況下,輸出資料夾的父目錄用作暫存空間。 | 這是資料夾使用的暫存空間。所有暫存檔案最後都會被清除,除非資料夾是在 debug 模式下執行。 |
-skew-buffer-length |
讓 資料夾 能夠容忍偏斜的工作。預設緩衝區長度為 0。 | 「-skew-buffer-length 100 」表示如果工作在 100 個視窗大小內出現順序錯誤,則資料夾會以順序發出這些工作。如果工作在這個視窗外出現順序錯誤,則資料夾會放棄,前提是未設定「-allow-missorting 」。資料夾會報告輸入追蹤中看到的最大傾斜大小,以供未來使用。
|
-allow-missorting |
啟用資料夾容許順序錯誤的工作。預設不允許排序錯誤。 | 如果允許排序錯誤,則資料夾會忽略無法使用「-skew-buffer-length 」指定的傾斜緩衝區大小來取消傾斜的順序錯誤工作。如果未允許排序錯誤,則如果傾斜緩衝區無法容忍傾斜,資料夾會放棄。
|
hadoop rumenfolder \ -output-duration 1h \ -input-cycle 20m \ file:///tmp/job-trace.json \ file:///tmp/job-trace-1hr.json
如果摺疊的工作順序錯誤,則命令會放棄。
hadoop rumenfolder \ -output-duration 1h \ -input-cycle 20m \ -allow-missorting \ -skew-buffer-length 100 \ file:///tmp/job-trace.json \ file:///tmp/job-trace-1hr.json
如果摺疊的工作順序錯誤,則最多會取消 100 個工作的傾斜。如果第 101 個工作順序錯誤,則命令會放棄。
hadoop rumenfolder \ -output-duration 1h \ -input-cycle 20m \ -debug -temp-directory file:///tmp/debug \ file:///tmp/job-trace.json \ file:///tmp/job-trace-1hr.json
這會將 10 小時的工作追蹤檔案 file:///tmp/job-trace.json
摺疊,在 1 小時內完成,並使用 file:///tmp/debug
作為暫存目錄。暫存目錄中的中間檔案不會清除。
hadoop rumenfolder \ -output-duration 1h \ -input-cycle 20m \ -concentration 2 \ file:///tmp/job-trace.json \ file:///tmp/job-trace-1hr.json
這會將 10 小時的工作追蹤檔案 file:///tmp/job-trace.json
摺疊,在 1 小時內完成,濃度為 2。如果將 10 小時的工作追蹤摺疊至 1 小時,它預設會保留 10% 的工作。如果濃度為 2,則會保留總輸入工作的 20%。
MAPREDUCE-751 是將Rumen 引進MapReduce 的主要 JIRA。查看 MapReduce rumen-component 以取得更多詳細資料。