摘要:回過(guò)頭來(lái)看關(guān)系數(shù)據(jù)庫(kù),雖然每個(gè)表只有兩個(gè)維度,但可以通過(guò)表之間的關(guān)系來(lái)建立高維度屬性來(lái)描述事物。屬性識(shí)別屬性可以唯一的確定一條數(shù)據(jù)在關(guān)系數(shù)據(jù)庫(kù)中作為主鍵,在中作為。
HBase的讀寫(xiě)流程設(shè)計(jì)
寫(xiě)數(shù)據(jù):先預(yù)寫(xiě)日式WAL,和寫(xiě)入內(nèi)容MemStore。WAL用來(lái)在節(jié)點(diǎn)宕機(jī)后恢復(fù)寫(xiě)入的數(shù)據(jù)。在MemStore寫(xiě)滿(mǎn)后會(huì)寫(xiě)入磁盤(pán),生成一個(gè)新的HFile,一旦寫(xiě)入不會(huì)再修改。一個(gè)列族有一個(gè)MemStore,一個(gè)列族有多個(gè)HFile。
讀數(shù)據(jù):每個(gè)列族有自己的BlockCache,用來(lái)在內(nèi)存中緩存從HFile讀入的數(shù)據(jù),采用LRU算法淘汰數(shù)據(jù)。讀數(shù)據(jù)時(shí),先從MemStore中嘗試讀取修改的數(shù)據(jù),然后檢查BlockCache緩存,最后才訪(fǎng)問(wèn)HFile。
刪除數(shù)據(jù):先給數(shù)據(jù)打上刪除標(biāo)記,HFile在大合并中才真正刪除掉這些數(shù)據(jù)。
數(shù)據(jù)坐標(biāo)如何準(zhǔn)確的定位一個(gè)數(shù)據(jù):
rowKey -> column family -> column qualifier -> versin -> value
HBase是一種鍵-值型數(shù)據(jù)庫(kù),key由rowKey -> column family -> column qualifier -> versin這些元素共同組成。
關(guān)系型數(shù)據(jù)庫(kù)每個(gè)表只有兩個(gè)維度,通過(guò)id和屬性名可以得到相應(yīng)的值。
數(shù)據(jù)庫(kù)是用來(lái)存儲(chǔ)事物的載體,關(guān)系數(shù)據(jù)庫(kù)的局限在于從兩個(gè)維度描述事物的屬性,它可以方便的展現(xiàn)事物的一級(jí)屬性,但是想要表現(xiàn)事物的多層級(jí)屬性卻不容易。如一個(gè)對(duì)象:
{ "name":{ "firstName":"Si", "lastName":"Li" }, "age":10 }
在關(guān)系數(shù)據(jù)庫(kù)中存儲(chǔ)這樣一個(gè)對(duì)象,要么將屬性都提升為一級(jí)屬性,要么在name屬性中存儲(chǔ)一個(gè)json數(shù)據(jù),要么另起一個(gè)表,專(zhuān)門(mén)存儲(chǔ)name的數(shù)據(jù),并且通過(guò)name的id來(lái)關(guān)聯(lián)數(shù)據(jù)間的關(guān)系。
而HBase則是一個(gè)四維的表,描述事物的能力更強(qiáng),上述問(wèn)題只要建立一個(gè)name的列族就可以解決。
像這種key-value型數(shù)據(jù)庫(kù),key可以描述無(wú)限維度的屬性層級(jí),可以更方便的描述事物,似乎是將來(lái)數(shù)據(jù)存儲(chǔ)發(fā)展的趨勢(shì)。
回過(guò)頭來(lái)看關(guān)系數(shù)據(jù)庫(kù),雖然每個(gè)表只有兩個(gè)維度,但可以通過(guò)表之間的關(guān)系來(lái)建立高維度屬性來(lái)描述事物。從這個(gè)角度來(lái)看,關(guān)系型數(shù)據(jù)庫(kù)反而道出了事物的本質(zhì)。
面型列編程一般情況下,現(xiàn)有數(shù)據(jù)的邏輯模型,然后物理模型根據(jù)邏輯模型進(jìn)行設(shè)計(jì)和優(yōu)化。而在HBase中,需要逆向思考,由于HBase中數(shù)據(jù)的物理存儲(chǔ)遵循一定的規(guī)則,利用好這些規(guī)則來(lái)設(shè)計(jì)邏輯模型,可以大大的提高使用數(shù)據(jù)的效率。
HBase的各層級(jí)的key都是有序排列的,從row key到qualifier按照字節(jié)遞增排列,而version則按照遞減順序排列。
HBase在一行記錄里,如果某列沒(méi)數(shù)據(jù),則不會(huì)進(jìn)行存儲(chǔ),不會(huì)占用存儲(chǔ)空間,所以說(shuō)是面向列編程。每行數(shù)據(jù)的每個(gè)列族可能會(huì)有多個(gè)HFile,但是一個(gè)列族的數(shù)據(jù)一定要在同一個(gè)物理存儲(chǔ)中。
HBase不滿(mǎn)足ACID對(duì)于每行的操作,是原子的。
對(duì)于多行的操作,不是原子的。
掃描并不是對(duì)某一時(shí)刻的數(shù)據(jù)快照的讀取,如果某行數(shù)據(jù)被掃描到前有變更,則讀取的數(shù)據(jù)是變更后的數(shù)據(jù)。
Hadoop Mapreduce運(yùn)行原理工作過(guò)程:
map: 負(fù)責(zé)轉(zhuǎn)化數(shù)據(jù),將key1、value1輸入轉(zhuǎn)化key2、value2輸出。
shuffle: 數(shù)據(jù)按照key分組、排序等。
reduce: 對(duì)一個(gè)key下的所有值進(jìn)行處理,產(chǎn)生最后結(jié)果。
JobTracker: 負(fù)責(zé)調(diào)度、監(jiān)控mapreduce任務(wù)。
TaskTracker: 負(fù)責(zé)實(shí)際的運(yùn)行map或reduce任務(wù)。
一個(gè)表被分為多個(gè)region。RegionServer運(yùn)行在HDFS系統(tǒng)之上,是HDFS的客戶(hù)端,負(fù)責(zé)管理多個(gè)region。
如何定位region?-ROOT-、.META.是兩個(gè)特殊的表,它們也放在region中。-ROOT-表只在一個(gè)region中,.META.表則可能被分到多個(gè)region中。整個(gè)定位的過(guò)程如一個(gè)3層分布式B+樹(shù):
ZooKeeper管理了表的-ROOT-的信息。
先在-ROOT-中查找,定位擁有該數(shù)據(jù)信息的.META.的region。
從.META.的region中的信息可以定位到數(shù)據(jù)在哪一個(gè)RegionServer里。
Mapreduce與HBaseHBase既可以做Mapreduce的數(shù)據(jù)源,也可以作為數(shù)據(jù)目的地。
如何在Mapreduce中做聯(lián)結(jié)操作對(duì)于不同表中的數(shù)據(jù),通過(guò)rowKey將相關(guān)數(shù)據(jù)聯(lián)結(jié)起來(lái)的操作對(duì)于非關(guān)系型數(shù)據(jù)庫(kù)HBase來(lái)說(shuō)并非易事。
在Mapreduce中可以有以下3種聯(lián)結(jié)的實(shí)現(xiàn)方式:
在reduce側(cè)做聯(lián)結(jié)。將相同rowKey的數(shù)據(jù)在reduce任務(wù)上進(jìn)行聯(lián)結(jié),需要在map和reduce之間做數(shù)據(jù)洗牌和排序,有很大的IO開(kāi)銷(xiāo)。
在map側(cè)聯(lián)結(jié)。將兩個(gè)表中,數(shù)量小的表緩存在map節(jié)點(diǎn)中,map任務(wù)在拿到關(guān)聯(lián)鍵后從緩存中讀取相應(yīng)的值,結(jié)合后進(jìn)行發(fā)射。
在map中讀取HBase。一個(gè)表作為mapreduce的數(shù)據(jù)源,在map任務(wù)中從HBase讀取另一個(gè)表中相關(guān)聯(lián)的數(shù)據(jù)。
HBase的可用性可用性不是一個(gè)二元特性,即不是非此即彼的,而是一種程度上的模糊屬性。HBase是高可用的,在RegionServer發(fā)生故障時(shí),它管理的數(shù)據(jù)會(huì)切換到其它的RegionServer節(jié)點(diǎn)上。
單一命名空間。HBase把數(shù)據(jù)存儲(chǔ)在一個(gè)文件系統(tǒng)上,一個(gè)RegionServer的讀寫(xiě)數(shù)據(jù)可以為其它所有RegionServer讀寫(xiě)。所以當(dāng)一個(gè)RegionServer宕機(jī)時(shí),其它RegionServer可以及時(shí)的接替它的任務(wù)。
HBase進(jìn)階 如何建模來(lái)充分發(fā)揮HBase的能力HBase雖然號(hào)稱(chēng)是無(wú)模式的數(shù)據(jù)庫(kù),但是提前設(shè)計(jì)好數(shù)據(jù)的存儲(chǔ)schema可以更好的發(fā)揮HBase的性能。
列族一般要提前定義好,盡量少的改動(dòng)。而列可以動(dòng)態(tài)的增減,列即數(shù)據(jù)。
HBase沒(méi)有跨行實(shí)務(wù)的概念。
同一列族的數(shù)據(jù)在物理上是放在一起的,在列族中找到某一個(gè)列的大體過(guò)程是一個(gè)二分查找。所以,訪(fǎng)問(wèn)寬行要比窄行開(kāi)銷(xiāo)大。
精細(xì)的描述所需數(shù)據(jù)帶來(lái)的收益行鍵:獲取指定行的數(shù)據(jù),該行下的所有相關(guān)HFile都會(huì)被讀取。
列族:進(jìn)一步縮小讀取HFile范圍,只讀相關(guān)的HFile。
列限定符:不會(huì)進(jìn)一步限定列族的范圍,但會(huì)減少返回?cái)?shù)據(jù)的網(wǎng)絡(luò)占用。
時(shí)間戳:進(jìn)一步減少返回?cái)?shù)據(jù)量。
反規(guī)范化規(guī)范化是關(guān)系型數(shù)據(jù)庫(kù)中的概念,指將每個(gè)表指保存自己關(guān)心的核心數(shù)據(jù),其它的數(shù)據(jù)通過(guò)鍵來(lái)關(guān)聯(lián),通過(guò)join來(lái)查詢(xún)多個(gè)表中的數(shù)據(jù),盡量的避免同一份數(shù)據(jù)出現(xiàn)在兩個(gè)地方,避免數(shù)據(jù)的不一致性。
反規(guī)范化是HBase中的概念,指行中可以冗余部分其它表的數(shù)據(jù),以方便讀取。
規(guī)范化是寫(xiě)優(yōu)化,反規(guī)范化是讀優(yōu)化。
從關(guān)系型數(shù)據(jù)庫(kù)到非關(guān)系型數(shù)據(jù)庫(kù)謹(jǐn)慎的將現(xiàn)有的系統(tǒng)從關(guān)系型數(shù)據(jù)庫(kù)遷移到非關(guān)系型數(shù)據(jù)庫(kù),有時(shí)候付出的代價(jià)遠(yuǎn)比你得到的收益要高。
實(shí)體
關(guān)系型、非關(guān)系型數(shù)據(jù)庫(kù)都通過(guò)表存儲(chǔ)實(shí)體。
屬性
識(shí)別屬性(可以唯一的確定一條數(shù)據(jù))在關(guān)系數(shù)據(jù)庫(kù)中作為主鍵,在HBase中作為rowKey。非識(shí)別屬性在HBase中對(duì)應(yīng)列限定符。
聯(lián)系
關(guān)系型數(shù)據(jù)庫(kù)通過(guò)外鍵,或者關(guān)系表來(lái)刻畫(huà)數(shù)據(jù)之間的關(guān)系。而HBase中沒(méi)有這種限制,只能在應(yīng)用中實(shí)現(xiàn)數(shù)據(jù)關(guān)系的代碼。
參考《HBase實(shí)戰(zhàn)》
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/75336.html
摘要:本文就運(yùn)維的原理基礎(chǔ)開(kāi)始入手,重點(diǎn)講解數(shù)據(jù)完整性,以及元數(shù)據(jù)逆向工程恢復(fù)數(shù)據(jù)完整性的原理方法。小結(jié)本文介紹了運(yùn)維基礎(chǔ)原理中的數(shù)據(jù)完整性以及逆向元數(shù)據(jù)修復(fù)原理,并舉例介紹兩個(gè)逆向修復(fù)元數(shù)據(jù)的工具和實(shí)用執(zhí)行步驟。 背景鑒于上次一篇文章——云HBase小組成功搶救某公司自建HBase集群,挽救30+T數(shù)據(jù)的讀者反饋,對(duì)HBase的逆向工程比較感興趣,并咨詢(xún)?nèi)绾问褂孟鄳?yīng)工具進(jìn)行運(yùn)維等等。總的來(lái)...
摘要:推出云單節(jié)點(diǎn)版本,極低成本,降低使用門(mén)檻阿里云云服務(wù)正式推出單節(jié)點(diǎn)版本,歡迎訪(fǎng)問(wèn)了解更多。最后,通過(guò)釘釘技術(shù)交流群找到阿里云的技術(shù)團(tuán)隊(duì)同學(xué)。阿里云團(tuán)隊(duì)希望通過(guò)這些星星之火,點(diǎn)燃以及整個(gè)技術(shù)生態(tài)的草原。普及,阿里云團(tuán)隊(duì)在行動(dòng)原文鏈接 摘要:?一、HBase的歷史由來(lái) HBase是一個(gè)開(kāi)源的非關(guān)系型分布式數(shù)據(jù)庫(kù)(NoSQL),基于谷歌的BigTable建模,是一個(gè)高可靠性、高性能、高伸縮的...
摘要:方案二和也運(yùn)行在中。新增刪除節(jié)點(diǎn)變更配置均需要手工介入。公司已有的大多都是容器形式部署在各個(gè)服務(wù)器上。目前我們?cè)诿總€(gè)節(jié)點(diǎn)上部署了傳統(tǒng)的。在接下來(lái)的階段團(tuán)隊(duì)也會(huì)對(duì)此做進(jìn)一步的探索。 回想起第一次接觸Mesos, 當(dāng)時(shí)有很多困惑: 這到底是用來(lái)做啥的?跟YARN比有什么優(yōu)勢(shì)?有哪些大公司在使用么?。 然而現(xiàn)在技術(shù)日新月異地發(fā)展, Mesos這個(gè)生態(tài)圈也開(kāi)始被越來(lái)越多的團(tuán)隊(duì)熟悉關(guān)注, 像k8...
閱讀 3903·2021-11-22 09:34
閱讀 1490·2021-11-04 16:10
閱讀 1721·2021-10-11 10:59
閱讀 3270·2019-08-30 15:44
閱讀 2034·2019-08-30 13:17
閱讀 3445·2019-08-30 11:05
閱讀 743·2019-08-29 14:02
閱讀 2617·2019-08-26 13:34