HBase的文件合並(minor/major compact)


Minor Compact
  Minor Compact是指少量HFile文件按照Minor Compact規則進行合並;它的正常流程是這樣的,探測到有新的文件刷進來(比如因為memstore的flush,當然可以直接寫入HFile而跳過memstore,比如Bulk寫入),此時Region Server只要發現同一個列簇有3個及以上的文件,將會掃描文件列表,然后將符合合並規則文件納入到list中,並且list中文件數>1,則將會進行compact;其中規則如下:

  1. 文件大小小於min.size的放入到list中;
  2. 文件大小大於max.size的將一定不會放入到list中;
  3. 如果文件大小排序,該文件大小小於后面10個文件總大小*1.2(說明文件不是足夠),那么就放入到list中;這里10是由hbase.hstore.compaction.max決定,1.2是由hbase.hstore.compaction.ratio決定的。

  所以看到minor的規則稍微有點復雜,原則是減少合並(文件合並要門當戶對),避免形成大文件(達到一定程度之后就不在合並)。
  另外minor compact在合並文件過程中,只是數據進行排序,但是並不會執行物理刪除,比如墓碑文件標記的刪除數據,TTL超期清理數據,以及超出多版本閾值的數據清理。這些工作什么時候去做呢?
Major Compact
  數據清理的工作,都是在Major Compact里面去做,Major操作是無差別的將所有的同一個column family的所有文件進行合並;在合並的過程中將會對數據進行清理,那些需要刪除掉的,過期的數據都會在Major Compact里面去做,當然也包括整合數據排序(HBase的數據排序是字段順序)。所以Major Compact在數據層面做的事情還是挺多的,但是因為他產生的IO消耗同樣非常巨大,所以一般都會禁用自動major compact,而是會手工進行數據合並。

參考:
https://blog.csdn.net/u014297175/article/details/50456147


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM