聚合多個檔案 YARN聚合檔案格式

2021-10-16 04:22:05 字數 1706 閱讀 6244

【前言】

【tfile&bcfile】

在hdfs中,提供了多種檔案格式,有普通的檔案檔案格式和二進位制格式;用於kv鍵值對儲存的sequencefile,tfile;有用於列式儲存的parquet,rc,orc等格式。

這裡重點要說的是tfile,因為聚合後的日誌檔案就是採用這種格式進行儲存的。

提到tfile,那麼就不得不提起bcfile,因為bcfile是tfile的底層物理儲存層。

bcfile是block compresed file的縮寫,顧名思義,資料的儲存是按照乙個乙個的block進行儲存的,同時這些block是可以進行壓縮儲存的。按照作用這些block可以分為資料塊(datablock)和元資料塊(metablock),資料塊通常就是要寫入的資料內容,而元資料塊可以自定義寫入,bcfile也會將資料塊的索引資訊記錄下來作為元資料塊寫入到檔案中。

bcfile的具體格式如下圖所示:

了解了bcfile後,再來看tfile的格式。tfile本身是一堆kv的容器,key和value均為無型別的位元組資料,其中key的長度限制為64kb,而value的長度則沒有限制。

儘管tfile儲存的是kv鍵值對,但底層採用的是bcfile,所以實際上就是將不同的kv存放在不同的資料塊中(注:乙個kv只會存在於乙個資料塊中,不會出現key存放在乙個block中,value存放到另外乙個block的情況,也不會出現乙個value跨block存放的情況)

另外,tfile還定義了兩個元資料塊,乙個叫tfile.meta,記錄了tfile的版本號資訊、tfile中kv鍵值對的總數、以及用於對key進行排序的排序演算法名;另外乙個元資料塊叫tfile.index,記錄了tfile中第乙個key的長度及名稱,每個資料塊中最後乙個key的名稱、以及每個資料塊中kv鍵值對的個數。

具體格式如下圖所示:

注:kv鍵值對在寫入的時候,有幾個小細節

【日誌聚合的檔案格式】

有了前面的鋪墊,再來看看日誌聚合的檔案是怎麼在tfile中儲存的。

由於tfile本質上是kv鍵值對的容器,因此可以變相理解為日誌聚合後的檔案中包含了哪些kv鍵值對,具體儲存的kv包括:

container的id,value則是這個container的所有日誌資訊,包括每個日誌的檔名、檔案長度、日誌檔案的具體內容。

【實際檔案分析】

下面就以乙個實際的檔案按照上面的說明對照進行分析下。

有幾個需要注意的地方:

【總結】

yarn 日誌聚合功能

在yarn集群上執行作業的時候,日誌聚合是沒有執行的。只有當整個作業完成的時候,才能將各個node上的日誌上傳到hadoop上。而且缺省會刪除本節點的日誌刪除,所以你無法從yarn的web查詢日誌了。start aggerate key yarn.log aggregation enable val...

Spring聚合多個服務的介面資料

有時我們在專案中需要聚合多個介面成乙個介面給前端提供資料.使用並行會提公升效能.在spring 中提供的 async 可以非同步執行.getmachinetodayinfo licenseid gettodaysummarytimeperiod licenseid completablefuture...

組合和聚合中的標頭檔案包含

聚合關係的兩個類不需要標頭檔案包含,而組合關係的兩個類則需要標頭檔案包含。即 以下場合需要包含標頭檔案 1 a與b是組合關係。即b是a的元件類。在程式實現上,b作為a的乙個屬性而存在。示例 如下 pragma once include leg.h class hourse 2 a與b是依賴關係,特指...