1醉锄、HBase是什么
Hbase是Hadoop Database的簡(jiǎn)稱,是一個(gè)面向列式存儲(chǔ)的分布式數(shù)據(jù)庫湿颅,其設(shè)計(jì)思想來源于 Google 的 BigTable 論文帮碰。
HDFS為Hbase提供可靠的底層數(shù)據(jù)存儲(chǔ)服務(wù)辆沦,MapReduce為Hbase提供高性能的計(jì)算能力,Zookeeper為Hbase提供穩(wěn)定服務(wù)和Failover機(jī)制帕棉。HBase 良好的分布式架構(gòu)設(shè)計(jì)為海量數(shù)據(jù)的快速存儲(chǔ)空盼、隨機(jī)訪問提供了可能,基于數(shù)據(jù)副本機(jī)制和分區(qū)機(jī)制可以輕松實(shí)現(xiàn)在線擴(kuò)容姿搜、縮容和數(shù)據(jù)容災(zāi)寡润,是大數(shù)據(jù)領(lǐng)域中 Key-Value 數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)最常用的數(shù)據(jù)庫方案。
HBASE具有以下特點(diǎn):
易擴(kuò)展:Hbase 的擴(kuò)展性主要體現(xiàn)在兩個(gè)方面舅柜,一個(gè)是基于運(yùn)算能力(RegionServer) 的擴(kuò)展梭纹,通過增加 RegionSever 節(jié)點(diǎn)的數(shù)量,提升 Hbase 上層的處理能力致份;另一個(gè)是基于存儲(chǔ)能力的擴(kuò)展(HDFS)变抽,通過增加 DataNode 節(jié)點(diǎn)數(shù)量對(duì)存儲(chǔ)層的進(jìn)行擴(kuò)容,提升 HBase 的數(shù)據(jù)存儲(chǔ)能力氮块。
海量存儲(chǔ):Hbase適合存儲(chǔ)PB級(jí)別的海量數(shù)據(jù)绍载,在PB級(jí)別的數(shù)據(jù)以及采用廉價(jià)PC存儲(chǔ)的情況下,能在幾十到百毫秒內(nèi)返回?cái)?shù)據(jù)滔蝉。這與Hbase的極易擴(kuò)展性息息相關(guān)击儡。正式因?yàn)镠base良好的擴(kuò)展性,才為海量數(shù)據(jù)的存儲(chǔ)提供了便利蝠引。
列式存儲(chǔ):Hbase 是根據(jù)列族來存儲(chǔ)數(shù)據(jù)的阳谍。列族下面可以有非常多的列。列式存儲(chǔ)的最大好處就是螃概,其數(shù)據(jù)在表中是按照某列存儲(chǔ)的矫夯,這樣在查詢只需要少數(shù)幾個(gè)字段時(shí),能大大減少讀取的數(shù)據(jù)量吊洼。
高可靠性:WAL 機(jī)制保證了數(shù)據(jù)寫入時(shí)不會(huì)因集群異常而導(dǎo)致寫入數(shù)據(jù)丟失训貌,Replication 機(jī)制保證了在集群出現(xiàn)嚴(yán)重的問題時(shí),數(shù)據(jù)不會(huì)發(fā)生丟失或損壞冒窍。而且 Hbase 底層使用 HDFS递沪,HDFS 本身也有備份豺鼻。
稀疏性:在 HBase 的列族中,可以指定任意多的列区拳,為空的列不占用存儲(chǔ)空間拘领,表可以設(shè)計(jì)得非常稀疏。
2樱调、數(shù)據(jù)模型
邏輯上约素,HBase 的數(shù)據(jù)模型同關(guān)系型數(shù)據(jù)庫很類似,數(shù)據(jù)存儲(chǔ)在一張表中笆凌,有行有列圣猎。
在 HBase 表中,一條數(shù)據(jù)擁有一個(gè)全局唯一的鍵(RowKey)和任意數(shù)量的列(Column)乞而,一列或多列組成一個(gè)列族(Column Family)送悔,同一個(gè)列族中列的數(shù)據(jù)在物理上都存儲(chǔ)在同一個(gè) HFile 中,這樣基于列存儲(chǔ)的數(shù)據(jù)結(jié)構(gòu)有利于數(shù)據(jù)緩存和查詢爪模。 HBase 中的表是疏松地存儲(chǔ)的欠啤,因此用戶可以動(dòng)態(tài)地為數(shù)據(jù)定義各種不同的列。HBase中的數(shù)據(jù)按主鍵排序屋灌,同時(shí)洁段,HBase 會(huì)將表按主鍵劃分為多個(gè) Region 存儲(chǔ)在不同 Region Server 上,以完成數(shù)據(jù)的分布式存儲(chǔ)和讀取共郭。
但從底層物理存儲(chǔ)結(jié)構(gòu)(K-V)來看祠丝,HBase 更像是一個(gè)多維 map。
2.1 Name Space
命名空間除嘹,類似于關(guān)系型數(shù)據(jù)庫的 DatabBase 概念写半,每個(gè)命名空間下有多個(gè)表。HBase有兩個(gè)自帶的命名空間尉咕,分別是“hbase” 和 “default”叠蝇,“hbase” 中存放的是 HBase 內(nèi)置的表,“default”表是用戶默認(rèn)使用的命名空間年缎。
2.2 Region
HBase 將表中的數(shù)據(jù)基于 RowKey 的不同范圍劃分到不同 Region 上悔捶,每個(gè)Region都負(fù)責(zé)一定范圍的數(shù)據(jù)存儲(chǔ)和訪問。
每個(gè)表一開始只有一個(gè) Region晦款,隨著數(shù)據(jù)不斷插入表炎功,Region 不斷增大枚冗,當(dāng)增大到一個(gè)閥值的時(shí)候缓溅,Region 就會(huì)等分成兩個(gè)新的 Region。當(dāng)table中的行不斷增多赁温,就會(huì)有越來越多的 Region坛怪。
另外淤齐,Region 是 Hbase 中分布式存儲(chǔ)和負(fù)載均衡的最小單元,不同的 Region 可以分布在不同的 HRegion Server上袜匿。但一個(gè)Hregion是不會(huì)拆分到多個(gè)server上的更啄。
2.3 Row
HBase 表中的每行數(shù)據(jù)都由一個(gè) RowKey 和多個(gè) Column(列)組成,數(shù)據(jù)是按照 RowKey的字典順序存儲(chǔ)的居灯,并且查詢數(shù)據(jù)時(shí)只能根據(jù) RowKey 進(jìn)行檢索祭务,所以 RowKey 的設(shè)計(jì)十分重要。
2.4 Column
HBase 中的每個(gè)列都是由Column Family(列簇)和 Column Qualifier(列限定符)運(yùn)行限定怪嫌,例如:info: name
义锥,info: age
。建表時(shí)岩灭,只需聲明列簇拌倍,而列限定符無需預(yù)先定義。
2.5 Cell
由{RowKey, Column Family:Column Qualifier, Time Stamp}
唯一確定的單元噪径。cell 中的數(shù)據(jù)是沒有類型的柱恤,全部是字節(jié)碼形式存儲(chǔ)梗顺。
2.6 TimeStamp
TimeStamp 是實(shí)現(xiàn) HBase 多版本的關(guān)鍵荚守。在HBase 中矗漾,使用不同 TimeStamp 來標(biāo)識(shí)相同RowKey對(duì)應(yīng)的不同版本的數(shù)據(jù)敞贡。相同 RowKey的數(shù)據(jù)按照 TimeStamp 倒序排列誊役。默認(rèn)查詢的是最新的版本,當(dāng)然用戶也可以指定 TimeStamp 的值來讀取指定版本的數(shù)據(jù)鹏漆。
3艺玲、列式存儲(chǔ)與行式存儲(chǔ)
列式存儲(chǔ)并不是一項(xiàng)新技術(shù),最早可以追溯到 1983 年的論文 Cantor忌警。然而法绵,受限于早期的硬件條件和應(yīng)用場(chǎng)景礼烈,傳統(tǒng)的事務(wù)型數(shù)據(jù)庫(OLTP)如 Oracle婆跑、MySQL 等關(guān)系型數(shù)據(jù)庫都是以行的方式來存儲(chǔ)數(shù)據(jù)的犀忱。
直到近幾年分析型數(shù)據(jù)庫(OLAP)的興起阴汇,列式存儲(chǔ)這一概念又變得流行,如 HBase哥倔、Cassandra 等大數(shù)據(jù)相關(guān)的數(shù)據(jù)庫都是以列的方式來存儲(chǔ)數(shù)據(jù)的咆蒿。為什么列式存儲(chǔ)會(huì)廣泛地應(yīng)用在 OLAP 領(lǐng)域食茎,和行式存儲(chǔ)相比附迷,它的優(yōu)勢(shì)在哪里呢?
3.1 行式存儲(chǔ)的原理與特點(diǎn)
對(duì)于 OLAP 場(chǎng)景抄伍,大多都是對(duì)一整行記錄進(jìn)行增刪改查操作的,那么行式存儲(chǔ)采用以行的行式在磁盤上存儲(chǔ)數(shù)據(jù)就是一個(gè)不錯(cuò)的選擇。
當(dāng)查詢基于需求字段查詢和返回結(jié)果時(shí),由于這些字段都埋藏在各行數(shù)據(jù)中事期,就必須讀取每一條完整的行記錄唠倦,大量磁盤轉(zhuǎn)動(dòng)尋址的操作使得讀取效率大大降低狂票。
舉個(gè)例子,下圖為員工信息emp表。
數(shù)據(jù)在磁盤上是以行的形式存儲(chǔ)在磁盤上,同一行的數(shù)據(jù)緊挨著存放在一起璃饱。
對(duì)于 emp 表廓潜,要查詢部門 dept 為 A 的所有員工的名字叨叙。
select name from emp where dept = A
由于 dept 的值是離散地存儲(chǔ)在磁盤中昨凡,在查詢過程中蚂四,需要磁盤轉(zhuǎn)動(dòng)多次晌杰,才能完成數(shù)據(jù)的定位和返回結(jié)果烂琴。
3.1 列式存儲(chǔ)的原理與特點(diǎn)
對(duì)于 OLAP 場(chǎng)景,一個(gè)典型的查詢需要遍歷整個(gè)表惰帽,進(jìn)行分組授药、排序悔叽、聚合等操作,這樣一來行式存儲(chǔ)中把一整行記錄存放在一起的優(yōu)勢(shì)就不復(fù)存在了爵嗅。而且睹晒,分析型 SQL 常常不會(huì)用到所有的列,而僅僅對(duì)其中某些需要的的列做運(yùn)算呆盖,那一行中無關(guān)的列也不得不參與掃描邑贴。
然而在列式存儲(chǔ)中,由于同一列的數(shù)據(jù)被緊挨著存放在了一起叔磷,如下圖所示繁疤。
那么基于需求字段查詢和返回結(jié)果時(shí),就不許對(duì)每一行數(shù)據(jù)進(jìn)行掃描秕狰,按照列找到需要的數(shù)據(jù)稠腊,磁盤的轉(zhuǎn)動(dòng)次數(shù)少,性能也會(huì)提高鸣哀。
還是上面例子中的查詢架忌,由于在列式存儲(chǔ)中 dept 的值是按照順序存儲(chǔ)在磁盤上的,因此磁盤只需要順序查詢和返回結(jié)果即可我衬。
列式存儲(chǔ)不僅具有按需查詢來提高效率的優(yōu)勢(shì)叹放,由于同一列的數(shù)據(jù)屬于同一種類型挠羔,如數(shù)值類型井仰,字符串類型等,相似度很高破加,還可以選擇使用合適的編碼壓縮可減少數(shù)據(jù)的存儲(chǔ)空間俱恶,進(jìn)而減少IO提高讀取性能。
總的來說范舀,行式存儲(chǔ)和列式存儲(chǔ)沒有說誰比誰更優(yōu)越速那,只能說誰更適合哪種應(yīng)用場(chǎng)景。
3尿背、架構(gòu)
HBase 的核心架構(gòu)由五部分組成端仰,分別是 HBase Client、HMaster田藐、Region Server荔烧、ZooKeeper 以及 HDFS。它的架構(gòu)組成如下圖所示汽久。
3.1 HBase Client
HBase Client 為用戶提供了訪問 HBase 的接口鹤竭,可以通過元數(shù)據(jù)表來定位到目標(biāo)數(shù)據(jù)的RegionServer,另外 HBase Client 還維護(hù)了對(duì)應(yīng)的 cache 來加速 Hbase 的訪問景醇,比如緩存元數(shù)據(jù)的信息臀稚。
3.2 HMaster
HMaster 是 HBase 集群的主節(jié)點(diǎn),負(fù)責(zé)整個(gè)集群的管理工作三痰,主要工作職責(zé)如下:
- 分配Region:負(fù)責(zé)啟動(dòng)的時(shí)候分配Region到具體的 RegionServer吧寺;
- 負(fù)載均衡:一方面負(fù)責(zé)將用戶的數(shù)據(jù)均衡地分布在各個(gè) Region Server 上窜管,防止Region Server數(shù)據(jù)傾斜過載。另一方面負(fù)責(zé)將用戶的請(qǐng)求均衡地分布在各個(gè) Region Server 上稚机,防止Region Server 請(qǐng)求過熱幕帆;
- 維護(hù)數(shù)據(jù):發(fā)現(xiàn)失效的 Region,并將失效的 Region 分配到正常的 RegionServer 上赖条,并且在Region Sever 失效的時(shí)候失乾,協(xié)調(diào)對(duì)應(yīng)的HLog進(jìn)行任務(wù)的拆分。
3.3 Region Server
Region Server 直接對(duì)接用戶的讀寫請(qǐng)求纬乍,是真正的干活的節(jié)點(diǎn)碱茁,主要工作職責(zé)如下。
- 管理 HMaster 為其分配的 Region仿贬;
- 負(fù)責(zé)與底層的 HDFS 交互纽竣,存儲(chǔ)數(shù)據(jù)到 HDFS;
- 負(fù)責(zé) Region 變大以后的拆分以及 StoreFile 的合并工作诅蝶。
當(dāng)某個(gè) RegionServer 宕機(jī)之后退个,ZK 會(huì)通知 Master 進(jìn)行失效備援募壕。下線的 RegionServer 所負(fù)責(zé)的 Region 暫時(shí)停止對(duì)外提供服務(wù)调炬,Master 會(huì)將該 RegionServer 所負(fù)責(zé)的 Region 轉(zhuǎn)移到其他 RegionServer 上,并且會(huì)對(duì)所下線的 RegionServer 上存在 MemStore 中還未持久化到磁盤中的數(shù)據(jù)由 WAL 重播進(jìn)行恢復(fù)舱馅。
一個(gè) Region Server 可以包含多個(gè) Region 缰泡,基本結(jié)構(gòu)如下:
- Region:每一個(gè) Region 都有起始 RowKey 和結(jié)束 RowKey,代表了存儲(chǔ)的Row的范圍代嗤,保存著表中某段連續(xù)的數(shù)據(jù)棘钞。一開始每個(gè)表都只有一個(gè) Region,隨著數(shù)據(jù)量不斷增加干毅,當(dāng) Region 大小達(dá)到一個(gè)閥值時(shí)宜猜,Region 就會(huì)被 Regio Server 水平切分成兩個(gè)新的 Region。當(dāng) Region 很多時(shí)硝逢,HMaster 會(huì)將 Region 保存到其他 Region Server 上姨拥。
-
Store:一個(gè) Region 由多個(gè) Store 組成,每個(gè) Store 都對(duì)應(yīng)一個(gè) Column Family, Store 包含 MemStore 和 StoreFile渠鸽。
- MemStore:作為HBase的內(nèi)存數(shù)據(jù)存儲(chǔ)叫乌,數(shù)據(jù)的寫操作會(huì)先寫到 MemStore 中,當(dāng)MemStore 中的數(shù)據(jù)增長(zhǎng)到一個(gè)閾值(默認(rèn)64M)后徽缚,Region Server 會(huì)啟動(dòng) flasheatch 進(jìn)程將 MemStore 中的數(shù)據(jù)寫人 StoreFile 持久化存儲(chǔ)憨奸,每次寫入后都形成一個(gè)單獨(dú)的 StoreFile。當(dāng)客戶端檢索數(shù)據(jù)時(shí)凿试,先在 MemStore中查找排宰,如果MemStore 中不存在似芝,則會(huì)在 StoreFile 中繼續(xù)查找。
- StoreFile:MemStore 內(nèi)存中的數(shù)據(jù)寫到文件后就是StoreFile额各,StoreFile底層是以 HFile 的格式保存国觉。HBase以Store的大小來判斷是否需要切分Region。
當(dāng)一個(gè)Region 中所有 StoreFile 的大小和數(shù)量都增長(zhǎng)到超過一個(gè)閾值時(shí)虾啦,HMaster 會(huì)把當(dāng)前Region分割為兩個(gè)麻诀,并分配到其他 Region Server 上,實(shí)現(xiàn)負(fù)載均衡傲醉。
- HFile:HFile:和 StoreFile 是同一個(gè)文件蝇闭,只不過站在 HDFS 的角度稱這個(gè)文件為HFile,站在HBase的角度就稱這個(gè)文件為StoreFile硬毕。
- HLog:負(fù)責(zé)記錄著數(shù)據(jù)的操作日志人乓,當(dāng)HBase出現(xiàn)故障時(shí)可以進(jìn)行日志重放、故障恢復(fù)仆葡。例如肖卧,磁盤掉電導(dǎo)致 MemStore中的數(shù)據(jù)沒有持久化存儲(chǔ)到 StoreFile,這時(shí)就可以通過HLog日志重放來恢復(fù)數(shù)據(jù)韭脊。
3.4 ZooKeeper
HBase 通過 ZooKeeper 來完成選舉 HMaster童谒、監(jiān)控 Region Server、維護(hù)元數(shù)據(jù)集群配置等工作沪羔,主要工作職責(zé)如下:
- 選舉HMaster:通ooKeeper來保證集中有1HMaster在運(yùn)行饥伊,如果 HMaster 異常,則會(huì)通過選舉機(jī)制產(chǎn)生新的 HMaster 來提供服務(wù)蔫饰;
- 監(jiān)控Region Server: 通過 ZooKeeper 來監(jiān)控 Region Server 的狀態(tài)琅豆,當(dāng)Region Server 有異常的時(shí)候,通過回調(diào)的形式通知 HMaster 有關(guān)Region Server 上下線的信息篓吁;
- 維護(hù)元數(shù)據(jù)和集群配置:通過ZooKeeper存儲(chǔ)信息并對(duì)外提供訪問接口茫因。
3.5 HDFS
HDFS 為 HBase 提供底層數(shù)據(jù)存儲(chǔ)服務(wù),同時(shí)為 HBase提供高可用的支持杖剪, HBase 將 HLog 存儲(chǔ)在 HDFS 上冻押,當(dāng)服務(wù)器發(fā)生異常宕機(jī)時(shí),可以重放 HLog 來恢復(fù)數(shù)據(jù)摘盆。
4翼雀、工作流程
4.1 寫流程
- Client 先訪問 zookeeper,獲取 hbase:meta 表位于哪個(gè) Region Server
- 訪問對(duì)應(yīng)的 Region Server孩擂,獲取 hbase:meta 表狼渊,根據(jù)讀請(qǐng)求的 namespace:table/rowkey, 查詢出目標(biāo)數(shù)據(jù)位于哪個(gè) Region Server 中的哪個(gè) Region 中。并將該 table 的 region 信息以及 meta 表的位置信息緩存在客戶端的 meta cache狈邑,方便下次訪問
- 與目標(biāo) Region Server 進(jìn)行通訊
- 將數(shù)據(jù)順序?qū)懭?追加)到 WAL城须,即Hlog
- 將數(shù)據(jù)寫入對(duì)應(yīng)的 MemStore,數(shù)據(jù)會(huì)在 MemStore 進(jìn)行排序
- 向客戶端發(fā)送 ack
- 等達(dá)到 MemStore 的刷寫時(shí)機(jī)后米苹,將數(shù)據(jù)刷寫到 HFile
WAL (Write-Ahead-Log) 預(yù)寫日志是 HBase 的 RegionServer 在處理數(shù)據(jù)插入和刪除過程中用來記錄操作內(nèi)容的一種日志糕伐。每次Put、Delete等一條記錄時(shí)蘸嘶,首先將其數(shù)據(jù)寫入到 RegionServer 對(duì)應(yīng)的 HLog 文件中去良瞧。
而WAL是保存在HDFS上的持久化文件,數(shù)據(jù)到達(dá) Region 時(shí)先寫入 WAL训唱,然后被加載到 MemStore 中褥蚯。這樣就算Region宕機(jī)了,操作沒來得及執(zhí)行持久化况增,也可以再重啟的時(shí)候從 WAL 加載操作并執(zhí)行赞庶。
那么,我們從寫入流程中可以看出澳骤,數(shù)據(jù)進(jìn)入 HFile 之前就已經(jīng)被持久化到 WAL了歧强,而 WAL 就是在 HDFS 上的,MemStore 是在內(nèi)存中的为肮,增加 MemStore 并不能提高寫入性能摊册,為什么還要從 WAL 加載到 MemStore中,再刷寫成 HFile 呢弥锄?
原因在于:
- 數(shù)據(jù)需要順序?qū)懭肷ッ遥?HDFS 是不支持對(duì)數(shù)據(jù)進(jìn)行修改的蟆沫;
- WAL 的持久化為了保證數(shù)據(jù)的安全性籽暇,是無序的;
- Memstore在內(nèi)存中維持?jǐn)?shù)據(jù)按照row key順序排列饭庞,從而順序?qū)懭氪疟P戒悠;
所以 MemStore 的意義在于維持?jǐn)?shù)據(jù)按照RowKey的字典序排列,而不是做一個(gè)緩存提高寫入效率舟山。
4.2 讀流程
- Client 先訪問 zookeeper绸狐,獲取 hbase:meta 表位于哪個(gè) Region Server
- 訪問對(duì)應(yīng)的 Region Server,獲取 hbase:meta 表累盗,根據(jù)讀請(qǐng)求的 namespace:table/rowkey寒矿, 查詢出目標(biāo)數(shù)據(jù)位于哪個(gè) Region Server 中的哪個(gè) Region 中。并將該 table 的 region 信息以 及 meta 表的位置信息緩存在客戶端的 meta cache若债,方便下次訪問
- 與目標(biāo) Region Server 進(jìn)行通訊
- 分別在 Block Cache(讀緩存)符相,MemStore 和 Store File(HFile)中查詢目標(biāo)數(shù)據(jù),并將 查到的所有數(shù)據(jù)進(jìn)行合并。此處所有數(shù)據(jù)是指同一條數(shù)據(jù)的不同版本(time stamp)或者不 同的類型(Put/Delete)
- 將從文件中查詢到的數(shù)據(jù)塊(Block啊终,HFile 數(shù)據(jù)存儲(chǔ)單元镜豹,默認(rèn)大小為 64KB)緩存到 Block Cache
- 將合并后的最終結(jié)果返回給客戶端
4.3 刪除流程
HBase 的數(shù)據(jù)刪除操作并不會(huì)立即將數(shù)據(jù)從磁盤上刪除,因?yàn)?HBase 的數(shù)據(jù)通常被保存在 HDFS 中蓝牲,而 HDFS 只允許新增或者追加數(shù)據(jù)文件趟脂,所以刪除操作主要對(duì)要被刪除的數(shù)據(jù)進(jìn)行標(biāo)記。
當(dāng)執(zhí)行刪除操作時(shí)例衍,HBase 新插入一條相同的 Key-Value 數(shù)據(jù)昔期,但是 keyType=Delete,這便意味著數(shù)據(jù)被刪除了佛玄,直到發(fā)生 Major_compaction 操作镇眷,數(shù)據(jù)才會(huì)真正地被從磁盤上刪除。
HBase這種基于標(biāo)記刪除的方式是按順序?qū)懘疟P的的翎嫡,因此很容易實(shí)現(xiàn)海量數(shù)據(jù)的快速刪除欠动,有效避免了在海量數(shù)據(jù)中查找數(shù)據(jù)、執(zhí)行刪除及重建索引等復(fù)雜的流程惑申。
4.4 StoreFile Compaction
由于 memstore 每次刷寫都會(huì)生成一個(gè)新的 HFile具伍,且同一個(gè)字段的不同版本(timestamp) 和不同類型(Put/Delete)有可能會(huì)分布在不同的 HFile 中,因此查詢時(shí)需要遍歷所有的 HFile為了減少 HFill的個(gè)數(shù)圈驼,以及清理掉過期和刪除的數(shù)據(jù)人芽,會(huì)進(jìn)行 StoreFile Compaction
Compaction 分為兩種,分別是 Minor Compaction 和 Major Compaction绩脆。Minor Compaction會(huì)將臨近的若干個(gè)較小的HFile 合并成一個(gè)較大的 HFile萤厅,但不會(huì)清理過期和刪除的數(shù)據(jù)。 Major Compaction 會(huì)將一個(gè) Store 下的所有的 HFile 合并成一個(gè)大 HFile靴迫,并且會(huì)清理掉過期和刪除的數(shù)據(jù)