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