成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

百萬(wàn)年薪架構(gòu)師圖解HBase深層次的秘密

運(yùn)維 數(shù)據(jù)庫(kù)運(yùn)維
從物理結(jié)構(gòu)上,HBase包含了三種類型的server,zookeeper、HMaster、region server,采用一種主從模式的結(jié)構(gòu)。

 [[319258]]

HBase架構(gòu)組成

從物理結(jié)構(gòu)上,HBase包含了三種類型的server,zookeeper、HMaster、region server,采用一種主從模式的結(jié)構(gòu)。

 

百萬(wàn)年薪架構(gòu)師圖解HBase深層次的秘密

 

  • region server主要用來(lái)服務(wù)讀和寫操作。當(dāng)用戶通過(guò)client訪問(wèn)數(shù)據(jù)時(shí),client會(huì)和HBase RegionServer 進(jìn)行直接通信。
  • HMaster主要進(jìn)行region server的管理、DDL(創(chuàng)建、刪除表)操作等。
  • Zookeeper是HDFS(Hadoop Distributed File System)的一部分,主要用來(lái)維持整個(gè)集群的存活,保障了HA,故障自動(dòng)轉(zhuǎn)移。

而底層的存儲(chǔ),還是依賴于HDFS的。

  • Hadoop的DataNode存儲(chǔ)了Region Server所管理的數(shù)據(jù),所有HBase的數(shù)據(jù)都是存在HDFS中的。
  • Hadoop的NameNode維護(hù)了所有物理數(shù)據(jù)塊的metadata。

1.1 region server

HBase 的tables根據(jù)rowkey的范圍進(jìn)行水平切分,切分后分配到各個(gè)regions。一個(gè)region包含一個(gè)表在start key和end key所有行。region會(huì)被分配到集群中的各個(gè)region server,而用戶都是跟region server進(jìn)行讀寫交互。一個(gè)region一般建議大小在5-10G。

 

百萬(wàn)年薪架構(gòu)師圖解HBase深層次的秘密

 

1.2 HBase HMaster

一般也叫作HMaster,HMaster主要職責(zé)包括兩個(gè)方面:

  • 與region server的交互,對(duì)region server進(jìn)行統(tǒng)一管理:?jiǎn)?dòng)時(shí)region的分配、崩潰后恢復(fù)的region重新分配、負(fù)載均衡的region重新分配
  • Admin相關(guān)功能:創(chuàng)建、刪除、更新表結(jié)構(gòu)等DDL操作

 

百萬(wàn)年薪架構(gòu)師圖解HBase深層次的秘密

 

1.3 Zookeeper

HBase使用Zookeeper作為分布式協(xié)調(diào)服務(wù),來(lái)維護(hù)集群內(nèi)的server狀態(tài)。

Zookeeper通過(guò) heartbeat 維護(hù)了哪些server是存活并可用的,并提供server的故障通知。同時(shí),使用一致性協(xié)議來(lái)保證各個(gè)分布式節(jié)點(diǎn)的一致性。

這里,需要特別關(guān)注,zookeeper負(fù)責(zé)來(lái)HMaster的選舉工作,如果一個(gè)HMater節(jié)點(diǎn)宕機(jī)了,就會(huì)選擇另一個(gè)HMaster節(jié)點(diǎn)進(jìn)入active狀態(tài)。

 

百萬(wàn)年薪架構(gòu)師圖解HBase深層次的秘密

 

1.4 這些組件如何一起協(xié)調(diào)工作

Zookeeper用來(lái)共享分布式系統(tǒng)中成員的狀態(tài),它會(huì)和region server、HMaster(active)保持會(huì)話,通過(guò)heartbeat維持與這些ephemeral node(zk中的臨時(shí)節(jié)點(diǎn)概念)的活躍會(huì)話。

下面,我們可以看到,zk在其中起到了最核心的作用。

 

百萬(wàn)年薪架構(gòu)師圖解HBase深層次的秘密

 

多個(gè)HMaster會(huì)去競(jìng)爭(zhēng)成為zookeeper上的臨時(shí)節(jié)點(diǎn),而zookeeper會(huì)將第一個(gè)創(chuàng)建成功的HMaster作為唯一當(dāng)前active的HMaster,其他HMater進(jìn)入stand by的狀態(tài)。這個(gè)active的HMaster會(huì)不斷發(fā)送heartbeat給zk,其他stand by狀態(tài)的HMaster節(jié)點(diǎn)會(huì)監(jiān)聽(tīng)這個(gè)active HMaster的故障信息。一旦發(fā)現(xiàn)active HMaster宕機(jī)了,就會(huì)重新競(jìng)爭(zhēng)新的active HMaster。這就實(shí)現(xiàn)了HMaster的高可用。

每個(gè)region server會(huì)創(chuàng)建一個(gè)ephemeral node。HMaster會(huì)監(jiān)視這些節(jié)點(diǎn)來(lái)確認(rèn)哪些region server是可用的,哪些節(jié)點(diǎn)發(fā)生了故障宕機(jī)了。

如果一個(gè)region server或者active的HMaster 沒(méi)有發(fā)送heatbeat給zk,那么和zk之間的會(huì)話將會(huì)過(guò)期,并且zk上會(huì)刪掉這個(gè)臨時(shí)節(jié)點(diǎn),認(rèn)為這個(gè)節(jié)點(diǎn)發(fā)生故障需要下線了。

其他監(jiān)聽(tīng)者節(jié)點(diǎn)會(huì)收到這個(gè)故障節(jié)點(diǎn)被刪除的消息。比如actvie的HMaster會(huì)監(jiān)聽(tīng)region server的消息,如果發(fā)現(xiàn)某個(gè)region server下線了,那么就會(huì)重新分配region server來(lái)恢復(fù)相應(yīng)的region數(shù)據(jù)。再比如,stand by的HMaster節(jié)點(diǎn)會(huì)監(jiān)聽(tīng)active 的HMaster節(jié)點(diǎn),一旦收到故障通知,就會(huì)競(jìng)爭(zhēng)上線成為新的active HMaster。

1.5 第一次訪問(wèn)HBase

有一個(gè)特殊的HBase目錄表,叫做META table,保存了集群中各個(gè)region的位置。zookeeper中保存了這個(gè)meta table 的位置信息。

當(dāng)我們第一次訪問(wèn)HBase集群時(shí),會(huì)做以下操作:

1)客戶端從zk中獲取保存meta table的位置信息,知道m(xù)eta table保存在了哪個(gè)region server,并在客戶端緩存這個(gè)位置信息;

2)client會(huì)查詢這個(gè)保存meta table的特定的region server,查詢meta table信息,在table中獲取自己想要訪問(wèn)的row key所在的region在哪個(gè)region server上。

3)客戶端直接訪問(wèn)目標(biāo)region server,獲取對(duì)應(yīng)的row

 

百萬(wàn)年薪架構(gòu)師圖解HBase深層次的秘密

 

進(jìn)一步,我們了解一下meta table的存儲(chǔ)結(jié)構(gòu)。

  • Meta table保存了所有region信息的一張表
  • Meta table存儲(chǔ)的數(shù)據(jù)形式類似一顆b樹
  • 以keyvalue形式保存數(shù)據(jù)
  • Key: region的table name, start key等信息 Values: region server的相關(guān)信息

 

百萬(wàn)年薪架構(gòu)師圖解HBase深層次的秘密

 

深入region server

一個(gè)region server運(yùn)行在一個(gè)HDFS的data node上,并且擁有以下組件:

 

百萬(wàn)年薪架構(gòu)師圖解HBase深層次的秘密

 

  • WAL:全稱Write Ahead Log, 屬于分布式系統(tǒng)上的文件。主要用來(lái)存儲(chǔ)還未被持久化到磁盤的新數(shù)據(jù)。如果新數(shù)據(jù)還未持久化,節(jié)點(diǎn)發(fā)生宕機(jī),那么就可以用WAL來(lái)恢復(fù)這些數(shù)據(jù)。
  • BlockCache:是一個(gè)讀緩存。它存儲(chǔ)了被高頻訪問(wèn)的數(shù)據(jù)。當(dāng)這個(gè)緩存滿了后,會(huì)清除最近最少訪問(wèn)的數(shù)據(jù)。
  • MenStore: 是一個(gè)寫緩存。它存儲(chǔ)了還未被寫入磁盤的數(shù)據(jù)。它會(huì)在寫入磁盤前,對(duì)自身數(shù)據(jù)進(jìn)行排序,從而保證數(shù)據(jù)的順序?qū)懭搿C總€(gè)region的每個(gè)colum family會(huì)有一份對(duì)應(yīng)的memstore。(沒(méi)錯(cuò),如果節(jié)點(diǎn)宕機(jī)了,存在這個(gè)緩存里的數(shù)據(jù)沒(méi)有落盤,可以通過(guò)WAL保證這些數(shù)據(jù)不會(huì)丟失)
  • HFiles:按照字典序存儲(chǔ)各個(gè)row的鍵值。

2.1 HBase寫數(shù)據(jù)與region server的交互

整個(gè)寫的過(guò)程更加復(fù)雜,而與region server的交互式最重要的一部分,這里只介紹跟region server的交互。

主要分為兩個(gè)步驟,寫WAL 和 寫緩存。

“實(shí)際上,這里除了保證數(shù)據(jù)不丟,還跟提高寫入效率有關(guān),具體后續(xù)專門寫一個(gè)相關(guān)文檔進(jìn)行展開說(shuō)明”

1)寫WAL

當(dāng)客戶端提交了一個(gè)put 請(qǐng)求,那么在region server上需要首先寫WAL(write-ahead-log)。

需要注意三點(diǎn):

 

  • Hlog是一個(gè)region server上一個(gè),并不是一個(gè)region一個(gè)
  • 寫入數(shù)據(jù)是添加在log尾部
  • log上的數(shù)據(jù)主要為了保證沒(méi)有落盤的數(shù)據(jù)能在server崩潰后不丟失

 

百萬(wàn)年薪架構(gòu)師圖解HBase深層次的秘密

 

 

 

2)寫緩存

數(shù)據(jù)寫入WAL成功,才會(huì)繼續(xù)寫入MemStore。

然后才會(huì)返回ack給客戶端,表示寫入成功了。

 

百萬(wàn)年薪架構(gòu)師圖解HBase深層次的秘密

 

2.2 HBase MemStroe

MemStore主要保存數(shù)據(jù)更新在內(nèi)存中,以字典序的KeyValue形式,跟HFile里面保存的一樣。

每一個(gè)column family會(huì)有一個(gè)對(duì)應(yīng)的memstore

更新的數(shù)據(jù)會(huì)在memstore中以key-value形式排好序存儲(chǔ),注意看圖,按字典序排,同時(shí)按version的倒序排列。

我們可以看到,key的組成包括rowkey-cf-col-version。

 

百萬(wàn)年薪架構(gòu)師圖解HBase深層次的秘密

 

2.3 HBase region flush

當(dāng)MemStore存儲(chǔ)了足夠多的數(shù)據(jù),整個(gè)有序集會(huì)被寫入一個(gè)新的HFile文件中,保存在HDFS。

HBase中每個(gè)colum family會(huì)有多個(gè)HFile,用來(lái)存儲(chǔ)實(shí)際的keyValue。

注意,這里解釋了為什么HBase中columfaily的數(shù)量是有限制的(具體是多少?)。

每一個(gè)cf有一個(gè)對(duì)應(yīng)的MemStore,當(dāng)一個(gè)MemStore滿了,所屬region的所有memstore都會(huì)被flush到磁盤。所以MemStore的flush的最小單位是一個(gè)region,而不是一個(gè)MemStore。

flush的同時(shí),它還會(huì)存儲(chǔ)一些額外的信息,比如最后一個(gè)寫的序列號(hào),讓系統(tǒng)知道它當(dāng)前持久化到什么位置了。

最大的序列號(hào)作為元數(shù)據(jù),會(huì)被存儲(chǔ)在每個(gè)HFile中,表示持久化到哪個(gè)位置了,下一次持久化應(yīng)該從哪里繼續(xù)。一個(gè)region啟動(dòng)時(shí),會(huì)讀取每個(gè)HFile的序列號(hào),然后最大的序列號(hào)會(huì)被用來(lái)作為新的起始序列號(hào)。

 

百萬(wàn)年薪架構(gòu)師圖解HBase深層次的秘密

 

深入HFile

3.1 HFile的寫入

HBase中,數(shù)據(jù)以有序KV的形式,存儲(chǔ)在HFile中。當(dāng)MemStore存儲(chǔ)了足夠的數(shù)據(jù),全部kv對(duì)被寫入HFile存入HDFS。

這里寫文件的過(guò)程是順序?qū)懀苊饬擞脖P大量移動(dòng)磁頭的過(guò)程,比隨機(jī)寫高效很多。

HFile的邏輯結(jié)構(gòu)如圖:

 

百萬(wàn)年薪架構(gòu)師圖解HBase深層次的秘密

 

主要分為四個(gè)部分:Scanned block section,Non-scanned block section,Opening-time data section和Trailer。

  • Scanned block section:表示掃描HFile時(shí),這部分所有數(shù)據(jù)塊都會(huì)被讀取,包括Leaf Index Block和Bloom Block。
  • Non-scanned block section:表示在掃描HFile時(shí)不會(huì)被讀取,主要包括Meta Block和Intermediate Level Data Index Blocks兩部分。
  • Load-on-open-section:表示在HBase的region server啟動(dòng)時(shí),會(huì)被加載到內(nèi)存中。包括FileInfo、Bloom filter block、data block index和meta block index。
  • Trailer:表示HFile的基本信息、各個(gè)部分的偏移值和尋址信息。

文件中采用類似b+樹都多層索引:

  • Kv對(duì)按遞增順序存儲(chǔ);
  • Root index指向非葉子結(jié)點(diǎn)
  • 每個(gè)數(shù)據(jù)塊的最后一個(gè)key被放入中間索引(b+樹的非葉子結(jié)點(diǎn))
  • 每個(gè)數(shù)據(jù)塊有自己的葉子索引(b+樹的葉子結(jié)點(diǎn))
  • 葉子索引通過(guò)row key指向64kb的kv數(shù)據(jù)塊

 

百萬(wàn)年薪架構(gòu)師圖解HBase深層次的秘密

 

文件的末尾有個(gè)trailer節(jié)點(diǎn),指向了meta block。trailer節(jié)點(diǎn)還擁有其他信息,比如布隆過(guò)濾器和時(shí)間范圍信息。

布隆過(guò)濾器幫助我們過(guò)濾那些不包含在這個(gè)HFilfe中的rowkey。

時(shí)間范圍信息用來(lái)跳過(guò)那些不在這個(gè)HFilie時(shí)間范圍內(nèi)的row。

因此,當(dāng)一個(gè)HFile被讀取后,HFile的索引信息就會(huì)被緩存在BlockCache中,這樣使得查詢只需要一次磁盤查詢操作,后續(xù)查找只需要讀取blockcache內(nèi)的索引信息即可。

 

百萬(wàn)年薪架構(gòu)師圖解HBase深層次的秘密

 

region server上的實(shí)體結(jié)構(gòu)關(guān)系如下:

regionserver : region = 1 : n,每個(gè)region server上有多個(gè)region。

region : store= 1 :n,每個(gè)region里面有多個(gè)store

store : memstore = 1 : 1。

Memstore:Hfile = 1:n。

 

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2020-10-09 07:44:32

百萬(wàn)年薪獎(jiǎng)金

2022-08-17 15:40:27

Chrome瀏覽器

2010-04-23 15:21:50

CTO首席旅游官

2010-03-30 13:26:12

創(chuàng)新解決方案戴爾

2010-03-23 10:08:12

2010-01-04 17:30:06

2016-11-15 13:52:19

2018-06-25 16:18:58

Python人工智能

2010-01-07 16:20:21

千兆以太網(wǎng)交換機(jī)

2015-11-23 14:12:26

用戶來(lái)源Growth Hack

2017-06-26 14:29:23

互聯(lián)網(wǎng)

2021-03-23 09:54:18

區(qū)塊鏈技術(shù)互聯(lián)網(wǎng)

2019-11-07 09:49:38

監(jiān)控優(yōu)化技巧

2018-07-23 12:56:07

微信通信朋友圈

2012-11-19 09:43:19

云計(jì)算架構(gòu)師架構(gòu)師云計(jì)算

2020-11-06 17:07:04

希捷孫丹

2016-09-09 01:00:01

微服務(wù)容器

2019-07-22 10:33:40

程序員Java技術(shù)

2009-02-18 21:24:02

華為工作感悟升職
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 视频第一区 | 美人の美乳で授乳プレイ | 日韩视频在线一区 | 欧美一区二区三区的 | 精品视频一区二区三区 | 三级av免费 | av 一区二区三区 | 日本一区二区三区免费观看 | 免费高清成人 | 麻豆a级片 | 中文字幕 国产精品 | 欧美性一区二区三区 | 亚洲精选一区二区 | 一级片在线免费播放 | 久热精品在线观看视频 | 99久久99热这里只有精品 | 99福利视频导航 | 久久99国产精一区二区三区 | 91中文字幕在线观看 | 亚洲 欧美 另类 综合 偷拍 | 国产精品国产三级国产aⅴ浪潮 | 不卡一二三区 | 国产一区二区高清在线 | 免费在线观看av网站 | 性色的免费视频 | 波多野结衣一区二区三区在线观看 | 久久久不卡网国产精品一区 | 精品国产青草久久久久96 | 羞羞视频在线观免费观看 | 拍真实国产伦偷精品 | 二区亚洲| 亚洲 欧美 日韩 精品 | 黄色三级免费网站 | 久久久久久91 | 欧美日韩三级在线观看 | 福利精品| 亚洲精品欧美 | 国产色99精品9i | 成人精品鲁一区一区二区 | 久久久观看 | 一区二区三区欧美 |