archive 可以用來解決 hadoop 中的小檔案問題,當存在大量小檔案時,會產生如下影響:
hdfs 中,小檔案過多會占用大量記憶體,namenode 記憶體容量最終會成為限制集群擴充套件的瓶頸。
hdfs 讀寫小檔案更加耗時,因為每次都需要從 namenode 獲取元資訊,並與對應的 datanode 建立連線。
小檔案過多會開很多 map,乙個 map 啟動乙個 jvm 去執行,所以這些任務的初始化,啟動,執行會浪費大量的資源,嚴重影響效能。
其實已經用法已經很明白了,name指定名字,將路徑上的內容建立到 archive 檔案中。
首先我們建立乙個小檔案 text.txt ,上傳四份到 hdfs 上
用官方自帶的 wordcount 跑一下:
很明顯,4個輸入,接下來執行歸檔命令,將 small 路徑下的所有檔案歸檔到 archiveresult 中,可以看到 archive 啟動了乙個 mapreduce:
得到:但是進去之後會發現裡面並不是我們之前的幾個 text.txt 檔案:
使用帶 har 的命令即可解決:
使用歸檔之後的檔案進行 wordcount:
最後仍然可以得到正確的結果,但是需要注意的是:
使用 archive 歸檔後,減輕的是 hdfs 的壓力,對於 mapreduce 來說,輸入還是四個檔案。
如果想要控制 map 數,hive 可以通過幾個引數來實現:
set mapred.max.split.size = **;(決定每個map處理的最大的檔案大小)
set mapred.min.split.size.per.node = **;(乙個節點上 split 的至少的大小,這個值決定了多個datanode 上的檔案是否需要合併)
set mapred.min.split.size.per.rack = **;(乙個交換機下 split 的至少的大小,這個值決定了多個交換機上的檔案是否需要合併)
歸檔以及反歸檔
歸檔和反歸檔 複雜的物件我們並不能通過writetofile型別的方法寫入到檔案中。這裡的複雜物件指的是在foundation框架內部存在的資料類,這個負載物件至少包含有乙個例項物件 如果想要進行歸檔和反歸檔操作,則必須遵守 協議 我們在歸檔和解檔操作時,每乙個需要乙個鍵.並且歸檔時是什麼鍵,那麼解...
Swift 歸檔解歸檔
swift中物件進行歸檔寫入檔案時需要對物件屬性進行歸檔操和解歸檔操作 物件方法中需重寫以下兩個方法 從nsobject解析回來 init coder adecoder nscoder 編碼成object func encodewithcoder acoder nscoder 歸檔,解歸檔需要使用到...
歸檔與反歸檔
建立一對.h m檔案nsobject h中遵守nscoding協議 定義屬性 在.m檔案中 反序列比 id initwithcoder nscoder adecoder return self 序列比 void encoderwithcoder nscoder acoder 在需要使用的地方 m 使...