一品威客網(wǎng)怎么樣seo免費(fèi)優(yōu)化網(wǎng)站
阿丹:
? ? ? ? 基礎(chǔ)概念了解之后了解目標(biāo)知識(shí)的架構(gòu)體系,就能事半功倍。
架構(gòu)體系
?關(guān)鍵組件介紹:
????????HBase – Hadoop Database,是一個(gè)高可靠性、高性能、面向列、可伸縮的分布式存儲(chǔ)系統(tǒng),利用HBase技術(shù)可在廉價(jià)PC Server上搭建起大規(guī)模結(jié)構(gòu)化存儲(chǔ)集群。
????????與FUJITSU Cliq等商用大數(shù)據(jù)產(chǎn)品不同,HBase是Google Bigtable的開源實(shí)現(xiàn),類似Google Bigtable利用GFS作為其文件存儲(chǔ)系統(tǒng),HBase利用Hadoop HDFS作為其文件存儲(chǔ)系統(tǒng);Google運(yùn)行MapReduce來處理Bigtable中的海量數(shù)據(jù),HBase同樣利用Hadoop MapReduce來處理HBase中的海量數(shù)據(jù);Google Bigtable利用 Chubby作為協(xié)同服務(wù),HBase利用Zookeeper作為對(duì)應(yīng)。
????????描述Hadoop EcoSystem中的各層系統(tǒng)。其中,HBase位于結(jié)構(gòu)化存儲(chǔ)層,Hadoop HDFS為HBase提供了高可靠性的底層存儲(chǔ)支持,Hadoop MapReduce為HBase提供了高性能的計(jì)算能力,Zookeeper為HBase提供了穩(wěn)定服務(wù)和failover機(jī)制。
????????此外,Pig和Hive還為HBase提供了高層語言支持,使得在HBase上進(jìn)行數(shù)據(jù)統(tǒng)計(jì)處理變的非常簡(jiǎn)單。 Sqoop則為HBase提供了方便的RDBMS數(shù)據(jù)導(dǎo)入功能,使得傳統(tǒng)數(shù)據(jù)庫(kù)數(shù)據(jù)向HBase中遷移變的非常方便
HBase是一個(gè)分布式的、面向列的NoSQL數(shù)據(jù)庫(kù),它構(gòu)建在Hadoop之上。HBase的架構(gòu)體系主要包括以下幾個(gè)組件:
-
HMaster: HMaster是HBase集群中的主節(jié)點(diǎn),負(fù)責(zé)管理整個(gè)集群和協(xié)調(diào)各個(gè)RegionServer。它負(fù)責(zé)分配和管理Region(表的分區(qū))以及處理客戶端的請(qǐng)求。
-
RegionServer: RegionServer是HBase的工作節(jié)點(diǎn),它負(fù)責(zé)實(shí)際存儲(chǔ)和處理數(shù)據(jù)。每個(gè)RegionServer負(fù)責(zé)多個(gè)Region的管理和服務(wù),并處理客戶端的讀寫請(qǐng)求。
-
ZooKeeper: ZooKeeper是HBase的協(xié)調(diào)服務(wù),用于管理和協(xié)調(diào)HBase集群中的各個(gè)組件和任務(wù)。它負(fù)責(zé)監(jiān)控節(jié)點(diǎn)的狀態(tài)、維護(hù)集群配置信息和協(xié)調(diào)分布式鎖等。
-
HDFS(Hadoop分布式文件系統(tǒng)): HBase使用HDFS作為其底層存儲(chǔ)文件系統(tǒng),用于持久化數(shù)據(jù)和存儲(chǔ)表的Region。數(shù)據(jù)以塊(Block)的形式分布在HDFS集群中。
-
表和Region: HBase中的數(shù)據(jù)組織在表中,每個(gè)表可以由一個(gè)或多個(gè)Region組成,每個(gè)Region負(fù)責(zé)表中一部分?jǐn)?shù)據(jù)的存儲(chǔ)和處理。Region通過分區(qū)鍵進(jìn)行劃分,不同的行數(shù)據(jù)根據(jù)分區(qū)鍵進(jìn)行垂直分布。
-
客戶端: HBase提供了Java API供客戶端使用,客戶端可以通過API與HBase集群進(jìn)行交互,進(jìn)行數(shù)據(jù)的讀寫操作。
這些組件共同構(gòu)成了HBase的架構(gòu)體系,實(shí)現(xiàn)了可擴(kuò)展的、分布式存儲(chǔ)和處理大規(guī)模數(shù)據(jù)的能力。
圖片中的組件說明:?
reginserver:本地服務(wù)器
hdfs:是hbase:運(yùn)行的底層文件系統(tǒng)。
regionserver:理解為數(shù)據(jù)節(jié)點(diǎn),存儲(chǔ)數(shù)據(jù)
master regionserver要實(shí)時(shí)向master報(bào)告信息。master知道全局的regionserver運(yùn)行情況,可以控制regionserver的故障轉(zhuǎn)移和region的切分。
結(jié)構(gòu)細(xì)化圖:
存儲(chǔ)設(shè)計(jì):
????????
在Hbase中,表被分割成多個(gè)更小的塊然后分散的存儲(chǔ)在不同的服務(wù)器上,這些小塊叫做Regions,存放Regions的地方叫做RegionServer。Master進(jìn)程負(fù)責(zé)處理不同的RegionServer之間的Region的分發(fā)。在Hbase實(shí)現(xiàn)中HRegionServer和HRegion類代表RegionServer和Region。HRegionServer除了包含一些HRegions之外,還處理兩種類型的文件用于數(shù)據(jù)存儲(chǔ)
- HLog, 預(yù)寫日志文件,也叫做WAL(write-ahead log)
- HFile 真實(shí)的數(shù)據(jù)存儲(chǔ)文件
HLog
-
MasterProcWAL:HMaster記錄管理操作,比如解決沖突的服務(wù)器,表創(chuàng)建和其它DDLs等操作到它的WAL文件中,這個(gè)WALs存儲(chǔ)在MasterProcWALs目錄下,它不像RegionServer的WALs,HMaster的WAL也支持彈性操作,就是如果Master服務(wù)器掛了,其它的Master接管的時(shí)候繼續(xù)操作這個(gè)文件。
-
WAL記錄所有的Hbase數(shù)據(jù)改變,如果一個(gè)RegionServer在MemStore進(jìn)行FLush的時(shí)候掛掉了,WAL可以保證數(shù)據(jù)的改變被應(yīng)用到。如果寫WAL失敗了,那么修改數(shù)據(jù)的完整操作就是失敗的。
- 通常情況,每個(gè)RegionServer只有一個(gè)WAL實(shí)例。在2.0之前,WAL的實(shí)現(xiàn)叫做HLog
- WAL位于/hbase/WALs/目錄下
- MultiWAL: 如果每個(gè)RegionServer只有一個(gè)WAL,由于HDFS必須是連續(xù)的,導(dǎo)致必須寫WAL連續(xù)的,然后出現(xiàn)性能問題。MultiWAL可以讓RegionServer同時(shí)寫多個(gè)WAL并行的,通過HDFS底層的多管道,最終提升總的吞吐量,但是不會(huì)提升單個(gè)Region的吞吐量。
HFile
HFile是Hbase在HDFS中存儲(chǔ)數(shù)據(jù)的格式,它包含多層的索引,這樣在Hbase檢索數(shù)據(jù)的時(shí)候就不用完全的加載整個(gè)文件。索引的大小(keys的大小,數(shù)據(jù)量的大小)影響block的大小,在大數(shù)據(jù)集的情況下,block的大小設(shè)置為每個(gè)RegionServer 1GB也是常見的。
探討數(shù)據(jù)庫(kù)的數(shù)據(jù)存儲(chǔ)方式,其實(shí)就是探討數(shù)據(jù)如何在磁盤上進(jìn)行有效的組織。因?yàn)槲覀兺ǔR匀绾胃咝ёx取和消費(fèi)數(shù)據(jù)為目的,而不是數(shù)據(jù)存儲(chǔ)本身。
Hfile生成方式
起初,HFile中并沒有任何Block,數(shù)據(jù)還存在于MemStore中。
Flush發(fā)生時(shí),創(chuàng)建HFile Writer,第一個(gè)空的Data Block出現(xiàn),初始化后的Data Block中為Header部分預(yù)留了空間,Header部分用來存放一個(gè)Data Block的元數(shù)據(jù)信息。
而后,位于MemStore中的KeyValues被一個(gè)個(gè)append到位于內(nèi)存中的第一個(gè)Data Block中:
注:如果配置了Data Block Encoding,則會(huì)在Append KeyValue的時(shí)候進(jìn)行同步編碼,編碼后的數(shù)據(jù)不再是單純的KeyValue模式。Data Block Encoding是HBase為了降低KeyValue結(jié)構(gòu)性膨脹而提供的內(nèi)部編碼機(jī)制。
?讀寫簡(jiǎn)單流程
?