1.1 歡迎使用 Apache Hbase
1.1.1 什么是 Hbase?
- Apache HBase 是 Hadoop 數(shù)據(jù)庫(kù),一種分布式,可擴(kuò)展的大數(shù)據(jù)存儲(chǔ)。
1.1.2 Hbase的前世今生
- Apache HBase 是一個(gè)開源、分布式、版本化、非關(guān)系數(shù)據(jù)庫(kù), 模仿了 Google 的Bigtable: Chang等人的結(jié)構(gòu)化數(shù)據(jù)分布式存儲(chǔ)系統(tǒng)。
- Apache HBase 在 Hadoop 和 HDFS 之上提供類似 Bigtable 的功能,正如 Bigtable 利用 Google 文件系統(tǒng)提供的分布式數(shù)據(jù)存儲(chǔ)一樣,
Google在當(dāng)年發(fā)布了風(fēng)靡一時(shí)的“三篇論文”——GFS、MapReduce、BigTable。
- 《 GFS: The Google File System 》
- Google在GFS該論文中第一次揭示了如何在大量廉價(jià)機(jī)器基礎(chǔ)上存儲(chǔ)海量數(shù)據(jù)。
- 《 MapReduce: Simplified Data Processing on Large Clusters》
- 論文論述了如何在大量廉價(jià)機(jī)器的基礎(chǔ)上穩(wěn)定地實(shí)現(xiàn)超大規(guī)模的并行數(shù)據(jù)處理。
- 《 BigTable: A Distributed Storage System for Structured Data》
- 用于解決Google內(nèi)部海量結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)以及高效讀寫問題,BigTable屬于分布式數(shù)據(jù)庫(kù)領(lǐng)域。
Google的三篇論文論證了在大量廉價(jià)機(jī)器上存儲(chǔ)、處理海量數(shù)據(jù)(結(jié)構(gòu)化數(shù)據(jù)、非結(jié)構(gòu)化數(shù)據(jù))是可行的,然而并沒有給出開源方案。
2004年,Doug Cutting和Mike Cafarella在為他們的搜索引擎爬蟲(Nutch)實(shí)現(xiàn)分布式架構(gòu)的時(shí)候看到了Google的GFS論文以及MapReduce論文。
他們?cè)谥蟮膸讉€(gè)月里按照論文實(shí)現(xiàn)出一個(gè)簡(jiǎn)易版的HDFS和MapReduce,這也就是Hadoop的最早起源。
最初這個(gè)簡(jiǎn)易系統(tǒng)確實(shí)可以穩(wěn)定地運(yùn)行在幾十臺(tái)機(jī)器上,但是沒有經(jīng)過(guò)大規(guī)模使用的系統(tǒng)談不上完美。
所幸他們收到了Yahoo的橄欖枝。
在Yahoo,Doug領(lǐng)導(dǎo)的團(tuán)隊(duì)不斷地對(duì)系統(tǒng)進(jìn)行改進(jìn),促成了Hadoop從幾十臺(tái)到幾百臺(tái)再到幾千臺(tái)機(jī)器規(guī)模的演變,直到這個(gè)時(shí)候,大數(shù)據(jù)才真正在普通公司實(shí)現(xiàn)落地。
一家叫做Powerset的公司,為了高效處理自然語(yǔ)言搜索產(chǎn)生的海量數(shù)據(jù)實(shí)現(xiàn)了BigTable的開源版本——HBase,并在發(fā)展了2年之后被Apache收錄為頂級(jí)項(xiàng)目,正式入駐Hadoop生態(tài)系統(tǒng)。”
1.1.3 HBase的技術(shù)選型?
那么當(dāng)企業(yè)有什么業(yè)務(wù)場(chǎng)景下的時(shí)候,可以嘗試使用 Apache Hbase呢?
- 當(dāng)我們需要對(duì)大數(shù)據(jù)進(jìn)行隨機(jī),實(shí)時(shí)讀/寫訪問時(shí),可以使用 Apache Hbase.
- 該項(xiàng)目的目標(biāo)是在商用硬件集群之上托管非常大的表(數(shù)十億行 X 數(shù)百萬(wàn)列)。
- Apache HBase 是一個(gè)開源、分布式、版本化、非關(guān)系數(shù)據(jù)庫(kù),模仿了 Google 的Bigtable: Chang 等人的結(jié)構(gòu)化數(shù)據(jù)分布式存儲(chǔ)系統(tǒng)。
- 正如 Bigtable 利用 Google 文件系統(tǒng)提供的分布式數(shù)據(jù)存儲(chǔ)一樣,Apache HBase 在 Hadoop 和 HDFS 之上提供類似 Bigtable 的功能。
1.1.3.1 不適合使用 HBase的場(chǎng)景
當(dāng)你的情況大體上符合以下任意一種的時(shí)候:
- 主要需求是數(shù)據(jù)分析,比如做報(bào)表。
- 單表數(shù)據(jù)量不超過(guò)千萬(wàn)。
請(qǐng)不要使用HBase,使用MySQL或者Oracle之類的產(chǎn)品可以讓你的腦細(xì)胞免受折磨。
1.1.3.2 適合使用 HBase的場(chǎng)景
當(dāng)你的情況是:
- 單表數(shù)據(jù)量超千萬(wàn),而且并發(fā)還挺高。
- 數(shù)據(jù)分析需求較弱,或者不需要那么靈活或者實(shí)時(shí)。請(qǐng)使用HBase,它不會(huì)讓你失望的。
請(qǐng)使用HBase,它不會(huì)讓你失望的。
1.1.4 HBase的特點(diǎn)
- 線性和模塊化的可擴(kuò)展性。
- 讀寫嚴(yán)格一致。
- 自動(dòng)且可配置的表分片
- RegionServer 之間的自動(dòng)故障轉(zhuǎn)移支持。
- 用于使用 Apache HBase 表支持 Hadoop MapReduce 作業(yè)的便捷基類。
- 易于使用 Java API 進(jìn)行客戶端訪問。
- 用于實(shí)時(shí)查詢的塊緩存和布隆過(guò)濾器。
- 通過(guò)服務(wù)器端過(guò)濾器下推查詢謂詞
- Thrift 網(wǎng)關(guān)和支持 XML、Protobuf 和二進(jìn)制數(shù)據(jù)編碼選項(xiàng)的 REST-ful Web 服務(wù)
- 基于 jruby (JIRB) 的可擴(kuò)展 shell
- 支持通過(guò) Hadoop 指標(biāo)子系統(tǒng)將指標(biāo)導(dǎo)出到文件或 Ganglia; 或通過(guò) JMX
1.1.4.1 HBase的優(yōu)點(diǎn)
與其他數(shù)據(jù)庫(kù)相比,HBase在系統(tǒng)設(shè)計(jì)以及實(shí)際實(shí)踐中有很多獨(dú)特的優(yōu)點(diǎn)。
- 容量巨大:HBase的單表可以支持千億行、百萬(wàn)列的數(shù)據(jù)規(guī)模,數(shù)據(jù)容量可以達(dá)到TB甚至PB級(jí)別。傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù),如Oracle和MySQL等,如果單表記錄條數(shù)超過(guò)億行,讀寫性能都會(huì)急劇下降,在HBase中并不會(huì)出現(xiàn)這樣的問題。
- 良好的可擴(kuò)展性:HBase集群可以非常方便地實(shí)現(xiàn)集群容量擴(kuò)展,主要包括數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)擴(kuò)展以及讀寫服務(wù)節(jié)點(diǎn)擴(kuò)展。HBase底層數(shù)據(jù)存儲(chǔ)依賴于HDFS系統(tǒng),HDFS可以通過(guò)簡(jiǎn)單地增加DataNode實(shí)現(xiàn)擴(kuò)展,HBase讀寫服務(wù)節(jié)點(diǎn)也一樣,可以通過(guò)簡(jiǎn)單的增加RegionServer節(jié)點(diǎn)實(shí)現(xiàn)計(jì)算層的擴(kuò)展。
- 稀疏性:HBase支持大量稀疏存儲(chǔ),即允許大量列值為空,并不占用任何存儲(chǔ)空間。這與傳統(tǒng)數(shù)據(jù)庫(kù)不同,傳統(tǒng)數(shù)據(jù)庫(kù)對(duì)于空值的處理要占用一定的存儲(chǔ)空間,這會(huì)造成一定程度的存儲(chǔ)空間浪費(fèi)。因此可以使用HBase存儲(chǔ)多至上百萬(wàn)列的數(shù)據(jù),即使表中存在大量的空值,也不需要任何額外空間。
- 高性能:HBase目前主要擅長(zhǎng)于OLTP場(chǎng)景,數(shù)據(jù)寫操作性能強(qiáng)勁,對(duì)于隨機(jī)單點(diǎn)讀以及小范圍的掃描讀,其性能也能夠得到保證。對(duì)于大范圍的掃描讀可以使用MapReduce提供的API,以便實(shí)現(xiàn)更高效的并行掃描。
- 多版本:HBase支持多版本特性,即一個(gè)KV可以同時(shí)保留多個(gè)版本,用戶可以根據(jù)需要選擇最新版本或者某個(gè)歷史版本。
- 支持過(guò)期:HBase支持TTL過(guò)期特性,用戶只需要設(shè)置過(guò)期時(shí)間,超過(guò)TTL的數(shù)據(jù)就會(huì)被自動(dòng)清理,不需要用戶寫程序手動(dòng)刪除。
- Hadoop原生支持:HBase是Hadoop生態(tài)中的核心成員之一,很多生態(tài)組件都可以與其直接對(duì)接。HBase數(shù)據(jù)存儲(chǔ)依賴于HDFS,這樣的架構(gòu)可以帶來(lái)很多好處,比如用戶可以直接繞過(guò)HBase系統(tǒng)操作HDFS文件,高效地完成數(shù)據(jù)掃描或者數(shù)據(jù)導(dǎo)入工作;再比如可以利用HDFS提供的多級(jí)存儲(chǔ)特性(Archival Storage Feature),根據(jù)業(yè)務(wù)的重要程度將HBase進(jìn)行分級(jí)存儲(chǔ),重要的業(yè)務(wù)放到SSD,不重要的業(yè)務(wù)放到HDD。或者用戶可以設(shè)置歸檔時(shí)間,進(jìn)而將最近的數(shù)據(jù)放在SSD,將歸檔數(shù)據(jù)文件放在HDD。另外,HBase對(duì)MapReduce的支持也已經(jīng)有了很多案例,后續(xù)還會(huì)針對(duì)Spark做更多的工作。
1.1.4.2 HBase的缺點(diǎn)
任何一個(gè)系統(tǒng)都不會(huì)完美,HBase也一樣。HBase不能適用于所有應(yīng)用場(chǎng)景,例如:
- HBase本身不支持很復(fù)雜的聚合運(yùn)算(如Join、GroupBy等)。如果業(yè)務(wù)中需要使用聚合運(yùn)算,可以在HBase之上架設(shè)Phoenix組件或者Spark組件,前者主要應(yīng)用于小規(guī)模聚合的OLTP場(chǎng)景,后者應(yīng)用于大規(guī)模聚合的OLAP場(chǎng)景。
- HBase本身并沒有實(shí)現(xiàn)二級(jí)索引功能,所以不支持二級(jí)索引查找。好在針對(duì)HBase實(shí)現(xiàn)的第三方二級(jí)索引方案非常豐富,比如目前比較普遍的使用Phoenix提供的二級(jí)索引功能。
- HBase原生不支持全局跨行事務(wù),只支持單行事務(wù)模型。同樣,可以使用Phoenix提供的全局事務(wù)模型組件來(lái)彌補(bǔ)HBase的這個(gè)缺陷。
可以看到,HBase系統(tǒng)本身雖然不擅長(zhǎng)某些工作領(lǐng)域,但是借助于Hadoop強(qiáng)大的生態(tài)圈,用戶只需要在其上架設(shè)Phoenix
組件、Spark
組件或者其他第三方組件,就可以有效地協(xié)同工作。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-663475.html
1.1.5 HBase設(shè)計(jì)架構(gòu)
- HBase體系結(jié)構(gòu)借鑒了BigTable論文,是典型的Master-Slave模型。
- 系統(tǒng)中有一個(gè)管理集群的Master節(jié)點(diǎn)以及大量實(shí)際服務(wù)用戶讀寫的RegionServer節(jié)點(diǎn)。
- 除此之外,HBase中所有數(shù)據(jù)最終都存儲(chǔ)在HDFS系統(tǒng)中,這與BigTable實(shí)際數(shù)據(jù)存儲(chǔ)在GFS中相對(duì)應(yīng);系統(tǒng)中還有一個(gè)ZooKeeper節(jié)點(diǎn),協(xié)助Master對(duì)集群進(jìn)行管理。
HBase體系結(jié)構(gòu)如圖1-6所示。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-663475.html
- 從HBase的部署架構(gòu)上來(lái)說(shuō),HBase有兩種服務(wù)器:Master服務(wù)器和RegionServer服務(wù)器。
- 一般一個(gè)HBase集群有一個(gè)Master服務(wù)器和幾個(gè)RegionServer服務(wù)器。
- 每個(gè)模塊的職責(zé)功能:
- Client
- HBase客戶端(Client)提供了Shell命令行接口、原生Java API編程接口、Thrift/REST API編程接口以及MapReduce編程接口。
- HBase客戶端支持所有常見的DML操作以及DDL操作,即數(shù)據(jù)的增刪改查和表的日常維護(hù)等.
- Master
- Master服務(wù)器負(fù)責(zé)維護(hù)表結(jié)構(gòu)信息,實(shí)際的數(shù)據(jù)都存儲(chǔ)在RegionServer服務(wù)器上)
- 客戶端獲取數(shù)據(jù)由客戶端直連RegionServer的,所以你會(huì)發(fā)現(xiàn)Master掛掉之后你依然可以查詢數(shù)據(jù),但就是不能新建表了
- RegionServer
- RegionServer是直接負(fù)責(zé)存儲(chǔ)數(shù)據(jù)的服務(wù)器。
- HDFS
- RegionServer保存的表數(shù)據(jù)直接存儲(chǔ)在Hadoop的HDFS上;
- HBase底層依賴HDFS組件存儲(chǔ)實(shí)際數(shù)據(jù),包括用戶數(shù)據(jù)文件、HLog日志文件等最終都會(huì)寫入HDFS落盤。
- Zookeeper:
- 客戶端每次與HBase連接,其實(shí)都是先與ZooKeeper通信
- ZooKeeper管理了HBase所有RegionServer的信息,包括具體的數(shù)據(jù)段存放在哪個(gè)RegionServer上。
- 查詢出哪個(gè)RegionServer需要連接,然后再連接RegionServer。
- 實(shí)現(xiàn)Master高可用
- 管理系統(tǒng)核心元數(shù)據(jù)
- 參與RegionServer宕機(jī)恢復(fù)
- 實(shí)現(xiàn)分布式表鎖
1.2 附錄
1.2.1功能模塊與職責(zé)詳情
功能模塊 | 功能職責(zé) |
---|---|
Client(HBase客戶端) | HBase客戶端(Client)提供了Shell命令行接口、原生Java API編程接口、Thrift/REST API編程接口以及MapReduce編程接口。HBase客戶端支持所有常見的DML操作以及DDL操作,即數(shù)據(jù)的增刪改查和表的日常維護(hù)等。其中Thrift/REST API主要用于支持非Java的上層業(yè)務(wù)需求,MapReduce接口主要用于批量數(shù)據(jù)導(dǎo)入以及批量數(shù)據(jù)讀取。HBase客戶端訪問數(shù)據(jù)行之前,首先需要通過(guò)元數(shù)據(jù)表定位目標(biāo)數(shù)據(jù)所在RegionServer,之后才會(huì)發(fā)送請(qǐng)求到該RegionServer。同時(shí)這些元數(shù)據(jù)會(huì)被緩存在客戶端本地,以方便之后的請(qǐng)求訪問。如果集群RegionServer發(fā)生宕機(jī)或者執(zhí)行了負(fù)載均衡等,從而導(dǎo)致數(shù)據(jù)分片發(fā)生遷移,客戶端需要重新請(qǐng)求最新的元數(shù)據(jù)并緩存在本地。 |
Zookeeper | ZooKeeper(ZK)也是Apache Hadoop的一個(gè)頂級(jí)項(xiàng)目,基于Google的Chubby開源實(shí)現(xiàn),主要用于協(xié)調(diào)管理分布式應(yīng)用程序。在HBase系統(tǒng)中,ZooKeeper扮演著非常重要的角色。?實(shí)現(xiàn)Master高可用:通常情況下系統(tǒng)中只有一個(gè)Master工作,一旦Active Master由于異常宕機(jī),ZooKeeper會(huì)檢測(cè)到該宕機(jī)事件,并通過(guò)一定機(jī)制選舉出新的Master,保證系統(tǒng)正常運(yùn)轉(zhuǎn)。?管理系統(tǒng)核心元數(shù)據(jù):比如,管理當(dāng)前系統(tǒng)中正常工作的RegionServer集合,保存系統(tǒng)元數(shù)據(jù)表hbase:meta所在的RegionServer地址等。?參與RegionServer宕機(jī)恢復(fù):ZooKeeper通過(guò)心跳可以感知到RegionServer是否宕機(jī),并在宕機(jī)后通知Master進(jìn)行宕機(jī)處理。?實(shí)現(xiàn)分布式表鎖:HBase中對(duì)一張表進(jìn)行各種管理操作(比如alter操作)需要先加表鎖,防止其他用戶對(duì)同一張表進(jìn)行管理操作,造成表狀態(tài)不一致。和其他RDBMS表不同,HBase中的表通常都是分布式存儲(chǔ),ZooKeeper可以通過(guò)特定機(jī)制實(shí)現(xiàn)分布式表鎖 |
Master | ZooKeeper(ZK)也是Apache Hadoop的一個(gè)頂級(jí)項(xiàng)目,基于Google的Chubby開源實(shí)現(xiàn),主要用于協(xié)調(diào)管理分布式應(yīng)用程序。在HBase系統(tǒng)中,ZooKeeper扮演著非常重要的角色。?實(shí)現(xiàn)Master高可用:通常情況下系統(tǒng)中只有一個(gè)Master工作,一旦Active Master由于異常宕機(jī),ZooKeeper會(huì)檢測(cè)到該宕機(jī)事件,并通過(guò)一定機(jī)制選舉出新的Master,保證系統(tǒng)正常運(yùn)轉(zhuǎn)。?管理系統(tǒng)核心元數(shù)據(jù):比如,管理當(dāng)前系統(tǒng)中正常工作的RegionServer集合,保存系統(tǒng)元數(shù)據(jù)表hbase:meta所在的RegionServer地址等。?參與RegionServer宕機(jī)恢復(fù):ZooKeeper通過(guò)心跳可以感知到RegionServer是否宕機(jī),并在宕機(jī)后通知Master進(jìn)行宕機(jī)處理。?實(shí)現(xiàn)分布式表鎖:HBase中對(duì)一張表進(jìn)行各種管理操作(比如alter操作)需要先加表鎖,防止其他用戶對(duì)同一張表進(jìn)行管理操作,造成表狀態(tài)不一致。和其他RDBMS表不同,HBase中的表通常都是分布式存儲(chǔ),ZooKeeper可以通過(guò)特定機(jī)制實(shí)現(xiàn)分布式表鎖 |
RegionServer | RegionServer主要用來(lái)響應(yīng)用戶的IO請(qǐng)求,是HBase中最核心的模塊,由WAL(HLog)、BlockCache以及多個(gè)Region構(gòu)成。? WAL(HLog):HLog在HBase中有兩個(gè)核心作用——其一,用于實(shí)現(xiàn)數(shù)據(jù)的高可靠性,HBase數(shù)據(jù)隨機(jī)寫入時(shí),并非直接寫入HFile數(shù)據(jù)文件,而是先寫入緩存,再異步刷新落盤。為了防止緩存數(shù)據(jù)丟失,數(shù)據(jù)寫入緩存之前需要首先順序?qū)懭際Log,這樣,即使緩存數(shù)據(jù)丟失,仍然可以通過(guò)HLog日志恢復(fù);其二,用于實(shí)現(xiàn)HBase集群間主從復(fù)制,通過(guò)回放主集群推送過(guò)來(lái)的HLog日志實(shí)現(xiàn)主從復(fù)制。? BlockCache:HBase系統(tǒng)中的讀緩存。客戶端從磁盤讀取數(shù)據(jù)之后通常會(huì)將數(shù)據(jù)緩存到系統(tǒng)內(nèi)存中,后續(xù)訪問同一行數(shù)據(jù)可以直接從內(nèi)存中獲取而不需要訪問磁盤。對(duì)于帶有大量熱點(diǎn)讀的業(yè)務(wù)請(qǐng)求來(lái)說(shuō),緩存機(jī)制會(huì)帶來(lái)極大的性能提升。BlockCache緩存對(duì)象是一系列Block塊,一個(gè)Block默認(rèn)為64K,由物理上相鄰的多個(gè)KV數(shù)據(jù)組成。BlockCache同時(shí)利用了空間局部性和時(shí)間局部性原理,前者表示最近將讀取的KV數(shù)據(jù)很可能與當(dāng)前讀取到的KV數(shù)據(jù)在地址上是鄰近的,緩存單位是Block(塊)而不是單個(gè)KV就可以實(shí)現(xiàn)空間局部性;后者表示一個(gè)KV數(shù)據(jù)正在被訪問,那么近期它還可能再次被訪問。當(dāng)前BlockCache主要有兩種實(shí)現(xiàn)——LRUBlockCache和BucketCache,前者實(shí)現(xiàn)相對(duì)簡(jiǎn)單,而后者在GC優(yōu)化方面有明顯的提升。? Region:數(shù)據(jù)表的一個(gè)分片,當(dāng)數(shù)據(jù)表大小超過(guò)一定閾值就會(huì)“水平切分”,分裂為兩個(gè)Region。Region是集群負(fù)載均衡的基本單位。通常一張表的Region會(huì)分布在整個(gè)集群的多臺(tái)RegionServer上,一個(gè)RegionServer上會(huì)管理多個(gè)Region,當(dāng)然,這些Region一般來(lái)自不同的數(shù)據(jù)表。一個(gè)Region由一個(gè)或者多個(gè)Store構(gòu)成,Store的個(gè)數(shù)取決于表中列簇(column family)的個(gè)數(shù),多少個(gè)列簇就有多少個(gè)Store。HBase中,每個(gè)列簇的數(shù)據(jù)都集中存放在一起形成一個(gè)存儲(chǔ)單元Store,因此建議將具有相同IO特性的數(shù)據(jù)設(shè)置在同一個(gè)列簇中。每個(gè)Store由一個(gè)MemStore和一個(gè)或多個(gè)HFile組成。MemStore稱為寫緩存,用戶寫入數(shù)據(jù)時(shí)首先會(huì)寫到MemStore,當(dāng)MemStore寫滿之后(緩存數(shù)據(jù)超過(guò)閾值,默認(rèn)128M)系統(tǒng)會(huì)異步地將數(shù)據(jù)f lush成一個(gè)HFile文件。顯然,隨著數(shù)據(jù)不斷寫入,HFile文件會(huì)越來(lái)越多,當(dāng)HFile文件數(shù)超過(guò)一定閾值之后系統(tǒng)將會(huì)執(zhí)行Compact操作,將這些小文件通過(guò)一定策略合并成一個(gè)或多個(gè)大文件 |
Master | ZooKeeper(ZK)也是Apache Hadoop的一個(gè)頂級(jí)項(xiàng)目,基于Google的Chubby開源實(shí)現(xiàn),主要用于協(xié)調(diào)管理分布式應(yīng)用程序。在HBase系統(tǒng)中,ZooKeeper扮演著非常重要的角色。?實(shí)現(xiàn)Master高可用:通常情況下系統(tǒng)中只有一個(gè)Master工作,一旦Active Master由于異常宕機(jī),ZooKeeper會(huì)檢測(cè)到該宕機(jī)事件,并通過(guò)一定機(jī)制選舉出新的Master,保證系統(tǒng)正常運(yùn)轉(zhuǎn)。?管理系統(tǒng)核心元數(shù)據(jù):比如,管理當(dāng)前系統(tǒng)中正常工作的RegionServer集合,保存系統(tǒng)元數(shù)據(jù)表hbase:meta所在的RegionServer地址等。?參與RegionServer宕機(jī)恢復(fù):ZooKeeper通過(guò)心跳可以感知到RegionServer是否宕機(jī),并在宕機(jī)后通知Master進(jìn)行宕機(jī)處理。?實(shí)現(xiàn)分布式表鎖:HBase中對(duì)一張表進(jìn)行各種管理操作(比如alter操作)需要先加表鎖,防止其他用戶對(duì)同一張表進(jìn)行管理操作,造成表狀態(tài)不一致。和其他RDBMS表不同,HBase中的表通常都是分布式存儲(chǔ),ZooKeeper可以通過(guò)特定機(jī)制實(shí)現(xiàn)分布式表鎖 |
HDFS | HBase底層依賴HDFS組件存儲(chǔ)實(shí)際數(shù)據(jù),包括用戶數(shù)據(jù)文件、HLog日志文件等最終都會(huì)寫入HDFS落盤。HDFS是Hadoop生態(tài)圈內(nèi)最成熟的組件之一,數(shù)據(jù)默認(rèn)三副本存儲(chǔ)策略可以有效保證數(shù)據(jù)的高可靠性。HBase內(nèi)部封裝了一個(gè)名為DFSClient的HDFS客戶端組件,負(fù)責(zé)對(duì)HDFS的實(shí)際數(shù)據(jù)進(jìn)行讀寫訪問。 |
1.2.2 HBase中的基本概念
基本概念 | 解釋 |
---|---|
table | 表,一個(gè)表包含多行數(shù)據(jù)。 |
row | 行,一行數(shù)據(jù)包含一個(gè)唯一標(biāo)識(shí)rowkey、多個(gè)column以及對(duì)應(yīng)的值。在HBase中,一張表中所有row都按照rowkey的字典序由小到大排序 |
column | 列,與關(guān)系型數(shù)據(jù)庫(kù)中的列不同,HBase中的column由column family(列簇)以及qualif ier(列名)兩部分組成,兩者中間使用":"相連。比如contents:html,其中contents為列簇,html為列簇下具體的一列。column family在表創(chuàng)建的時(shí)候需要指定,用戶不能隨意增減。一個(gè)column family下可以設(shè)置任意多個(gè)qualif ier,因此可以理解為HBase中的列可以動(dòng)態(tài)增加,理論上甚至可以擴(kuò)展到上百萬(wàn)列。 |
timestamp | 時(shí)間戳,每個(gè)cell在寫入HBase的時(shí)候都會(huì)默認(rèn)分配一個(gè)時(shí)間戳作為該cell的版本,當(dāng)然,用戶也可以在寫入的時(shí)候自帶時(shí)間戳。HBase支持多版本特性,即同一rowkey、column下可以有多個(gè)value存在,這些value使用timestamp作為版本號(hào),版本越大,表示數(shù)據(jù)越新。 |
1.2.3 本文中涉及的思維導(dǎo)圖原件下載
- 點(diǎn)擊下載 揭開HBase的神秘面紗思維導(dǎo)圖原件
到了這里,關(guān)于1. HBase中文學(xué)習(xí)手冊(cè)之揭開Hbase的神秘面紗的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!