精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

HBase詳細(xì)介紹及原理解析!

數(shù)據(jù)庫(kù) 其他數(shù)據(jù)庫(kù)
Apache HBase 是 Hadoop中一個(gè)支持分布式的、可擴(kuò)展的大數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)庫(kù)。當(dāng)需要對(duì)大數(shù)據(jù)進(jìn)行隨機(jī)、實(shí)時(shí)讀/寫(xiě)訪問(wèn)時(shí),可以用 Apache HBase。

基本介紹

HBase官網(wǎng):https://hbase.apache.org/。

Apache HBase 是 Hadoop中一個(gè)支持分布式的、可擴(kuò)展的大數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)庫(kù)。

當(dāng)需要對(duì)大數(shù)據(jù)進(jìn)行隨機(jī)、實(shí)時(shí)讀/寫(xiě)訪問(wèn)時(shí),可以用 Apache HBase。

HBase特點(diǎn)

列式存儲(chǔ):

HBase是面向列族的非關(guān)系型數(shù)據(jù)庫(kù),每行數(shù)據(jù)列都可以不同,并且列可以按照需求進(jìn)行動(dòng)態(tài)增加。

因此在開(kāi)始創(chuàng)建HBase表時(shí),可以只創(chuàng)建列族,等需要時(shí)再創(chuàng)建相應(yīng)的列。

數(shù)據(jù)壓縮:

列式存儲(chǔ)意味著數(shù)據(jù)往往類型相同,可以采用某種壓縮算法進(jìn)行統(tǒng)一的壓縮存儲(chǔ)。

海量存儲(chǔ):

HDFS支持的海量存儲(chǔ),存儲(chǔ)PB級(jí)數(shù)據(jù)仍能有百毫秒內(nèi)的響應(yīng)速度。

基本操作

Shell操作

進(jìn)入HBase客戶端命令操作界面:

hbase shell

查看幫助命令:

hbase(main):001:0> help

查看當(dāng)前數(shù)據(jù)庫(kù)中有哪些表:

hbase(main):006:0> list

創(chuàng)建一張表:

創(chuàng)建user表, 包含base_info、extra_info兩個(gè)列族。

hbase(main):007:0> create 'user', 'base_info', 'extra_info'
create 'user', {NAME => 'base_info', VERSIONS => '3'},{NAME => 'extra_info'}

添加數(shù)據(jù)操作:

向user表中插入信息,row key為 rk0001,列族base_info中添加name列標(biāo)示符,值為zhangsan。

hbase(main):008:0> put 'user', 'rk0001', 'base_info:name', 'zhangsan'

向user表中插入信息,row key為rk0001,列族base_info中添加age列標(biāo)示符,值為20。

hbase(main):010:0>  put 'user', 'rk0001', 'base_info:age', 20

查詢數(shù)據(jù):

通過(guò)rowkey進(jìn)行查詢:

  • 獲取user表中row key為rk0001的所有信息。
hbase(main):006:0> get 'user', 'rk0001'

查看rowkey下面的某個(gè)列族的信息:

  • 獲取user表中row key為rk0001,base_info列族的所有信息。
hbase(main):007:0> get 'user', 'rk0001', 'base_info'

查看rowkey指定列族指定字段的值:

  • 獲取user表中row key為rk0001,base_info列族的name、age列標(biāo)示符的信息。
hbase(main):008:0> get 'user', 'rk0001', 'base_info:name', 'base_info:age'

查看rowkey指定多個(gè)列族的信息

  • 獲取user表中row key為rk0001,base_info、extra_info列族的信息。
hbase(main):010:0> get 'user', 'rk0001', 'base_info', 'extra_info'
hbase(main):011:0> get 'user', 'rk0001', {COLUMN => ['base_info', 'extra_info']}
hbase(main):012:0> get 'user', 'rk0001', {COLUMN => ['base_info:name', 'extra_info:address']}

指定rowkey與列值查詢:

  • 獲取user表中row key為rk0001,cell的值為zhangsan的信息。
hbase(main):013:0> get 'user', 'rk0001', {FILTER => "ValueFilter(=, 'binary:zhangsan')"}

指定rowkey與列值模糊查詢:

  • 獲取user表中row key為rk0001,列標(biāo)示符中含有a的信息。
hbase(main):015:0> get 'user', 'rk0001', {FILTER => "(QualifierFilter(=,'substring:a'))"}

插入一批數(shù)據(jù):

hbase(main):016:0> put 'user', 'rk0002', 'base_info:name', 'fanbingbing'

hbase(main):017:0> put 'user', 'rk0002', 'base_info:gender', 'female'

hbase(main):018:0> put 'user', 'rk0002', 'base_info:birthday', '2000-06-06'

hbase(main):019:0> put 'user', 'rk0002', 'extra_info:address', 'Shanghai'

查詢所有數(shù)據(jù):

  • 查詢user表中的所有信息。
hbase(main):020:0> scan 'user'

列族查詢:

  • 查詢user表中列族為 base_info 的信息。

Scan:

  • 設(shè)置是否開(kāi)啟Raw模式,開(kāi)啟Raw模式會(huì)返回包括已添加刪除標(biāo)記但是未實(shí)際刪除的數(shù)據(jù)。
  • VERSIONS指定查詢的最大版本數(shù)。
hbase(main):021:0> scan 'user', {COLUMNS => 'base_info'}

hbase(main):022:0> scan 'user', {COLUMNS => 'base_info', RAW => true, VERSIONS => 5}

多列族查詢:

  • 查詢user表中列族為info和data的信息。
hbase(main):023:0> scan 'user', {COLUMNS => ['base_info', 'extra_info']}
hbase(main):024:0> scan 'user', {COLUMNS => ['base_info:name', 'extra_info:address']}

指定列族與某個(gè)列名查詢:

  • 查詢user表中列族為base_info、列標(biāo)示符為name的信息。
hbase(main):025:0> scan 'user', {COLUMNS => 'base_info:name'}

指定列族與列名以及限定版本查詢:

  • 查詢user表中列族為base_info、列標(biāo)示符為name的信息,并且版本最新的5個(gè)。
hbase(main):026:0> scan 'user', {COLUMNS => 'base_info:name', VERSIONS => 5}

指定多個(gè)列族與按照數(shù)據(jù)值模糊查詢:

  • 查詢user表中列族為 base_info 和 extra_info且列標(biāo)示符中含有a字符的信息。
hbase(main):027:0> scan 'user', {COLUMNS => ['base_info', 'extra_info'], FILTER => "(QualifierFilter(=,'substring:a'))"}

rowkey的范圍值查詢:

  • 查詢user表中列族為info,rk范圍是[rk0001, rk0003)的數(shù)據(jù)。
hbase(main):028:0> scan 'user', {COLUMNS => 'base_info', STARTROW => 'rk0001', ENDROW => 'rk0003'}

指定rowkey模糊查詢:

  • 查詢user表中row key以rk字符開(kāi)頭的。
hbase(main):029:0> scan 'user',{FILTER=>"PrefixFilter('rk')"}

更新數(shù)據(jù)值:

  • 把user表中rowkey為rk0001的base_info列族下的列name修改為zhangsansan。
hbase(main):030:0> put 'user', 'rk0001', 'base_info:name', 'zhangsansan'

指定rowkey以及列名進(jìn)行刪除:

  • 刪除user表row key為rk0001,列標(biāo)示符為 base_info:name 的數(shù)據(jù)。
hbase(main):032:0>  delete 'user', 'rk0001', 'base_info:name'

指定rowkey,列名以及字段值進(jìn)行刪除:

  • 刪除user表row key為rk0001,列標(biāo)示符為base_info:name,timestamp為1392383705316的數(shù)據(jù)。
hbase(main):033:0> delete 'user', 'rk0001', 'base_info:age', 1564745324798

刪除 base_info 列族。

hbase(main):034:0> alter 'user', NAME => 'base_info', METHOD => 'delete'
hbase(main):035:0> alter 'user', 'delete' => 'base_info'

刪除user表數(shù)據(jù):

hbase(main):036:0> truncate 'user'

刪除user表:

#先disable  再drop

hbase(main):036:0> disable 'user'
hbase(main):037:0> drop 'user'

#如果不進(jìn)行disable,直接drop會(huì)報(bào)錯(cuò)
ERROR: Table user is enabled. Disable it first.

數(shù)據(jù)模型

邏輯結(jié)構(gòu):

物理架構(gòu):

Rowkey(行鍵):

  • Table 的主鍵,Table 中的記錄按照 Rowkey 的字典序進(jìn)行排序。

Column Family(列族):

  • 表中的每個(gè)列,都?xì)w屬與某個(gè)列族。
  • 列族是表的 Schema 的一部分,必須在使用表之前定義。

Timestamp(時(shí)間戳):

  • 每次數(shù)據(jù)操作對(duì)應(yīng)的時(shí)間戳,可以看作是數(shù)據(jù)的 Version 版本號(hào)。

Column(列):

  • 列族下面的具體列。
  • 屬于某一個(gè) ColumnFamily,類似于 MySQL 當(dāng)中創(chuàng)建的具體的列。

Cell(單元格):

  • 由{rowkey, column, version} 唯一確定的單元。
  • Cell 中的數(shù)據(jù)沒(méi)有類型,全部是以字節(jié)數(shù)組進(jìn)行存儲(chǔ)。

基本原理

如何支持海量數(shù)據(jù)的隨機(jī)存取

利用了HDFS的分布式存儲(chǔ)和Hadoop的分布式計(jì)算能力:

  • 將數(shù)據(jù)存儲(chǔ)在HDFS上,并利用Hadoop的MapReduce框架進(jìn)行分布式計(jì)算,從而實(shí)現(xiàn)了高可擴(kuò)展性和高并發(fā)性。

將數(shù)據(jù)按照行和列族的方式存儲(chǔ)在HDFS上:

  • 這種數(shù)據(jù)存儲(chǔ)方式使得HBase能夠?qū)崿F(xiàn)高速的隨機(jī)讀寫(xiě)功能。

利用了LSM(Log-Structured Merge-Tree)算法:

  • 該算法通過(guò)內(nèi)存和順序?qū)懘疟P(pán)的方式,使得隨機(jī)寫(xiě)入成為可能,同時(shí)還能保證讀取效率。

支持?jǐn)?shù)據(jù)的自動(dòng)分片和負(fù)載均衡:

  • 可以支持PB級(jí)別的數(shù)據(jù)存儲(chǔ)和處理,從而滿足大規(guī)模數(shù)據(jù)的實(shí)時(shí)處理需求。

整體結(jié)構(gòu)

HMaster:

  • HBase集群的主節(jié)點(diǎn),負(fù)責(zé)監(jiān)控RegionServer,處理Region分配和負(fù)載均衡。

HRegionServer:

  • 管理 Region,處理對(duì)所分配Region的IO請(qǐng)求,Region是表的分片,由多個(gè)Store組成。

Zookeeper:

  • 維護(hù)HBase的運(yùn)行狀態(tài)信息,如Region分布信息等。
  • HMaster和RegionServer都依賴Zookeeper。

HRegion:

  • HBase表的分片,由一個(gè)或者多個(gè)Store組成,存儲(chǔ)實(shí)際的表數(shù)據(jù)。

Store:

  • Store以Column Family為單位存儲(chǔ)數(shù)據(jù),主要組成是MemStore和StoreFile(HFile)。
  • 1個(gè)Column Family的數(shù)據(jù)存放在一個(gè)Store中,一個(gè)Region包含多個(gè)Store。

MemStore:

  • 內(nèi)存存儲(chǔ),用于臨時(shí)存放寫(xiě)數(shù)據(jù),達(dá)到閾值后刷入StoreFile。
  • 數(shù)據(jù)會(huì)先寫(xiě)入到 MemStore 進(jìn)行緩沖,然后再把數(shù)據(jù)刷到磁盤(pán)。
  • 通過(guò)內(nèi)存,也加快了讀寫(xiě)速度。

StoreFile(HFile):

  • 磁盤(pán)上面真正存放數(shù)據(jù)的文件。

HDFS:

  • 用來(lái)持久化存儲(chǔ)HFiles。

一個(gè)列族就劃分成一個(gè) Store,如果一個(gè)表中只有 1 個(gè)列族,那么每一個(gè) Region 中只有一個(gè) Store。

一個(gè) Store 里面只有一個(gè) MemStore。

一個(gè) Store 里面有很多個(gè) StoreFile, 最后數(shù)據(jù)是以很多個(gè) HFile 文件保存在 HDFS 上。

  • StoreFile是HFile的抽象對(duì)象。
  • 每次 MemStore 刷寫(xiě)數(shù)據(jù)到磁盤(pán),就生成對(duì)應(yīng)的一個(gè)新的 HFile 文件出來(lái)。

負(fù)載均衡

HBase 官方目前支持兩種負(fù)載均衡策略:

  • SimpleLoadBalancer 策略和 StochasticLoadBalancer 策略。

SimpleLoadBalancer 策略:

這種策略能夠保證每個(gè) RegionServer 的 Region 個(gè)數(shù)基本相等。

假設(shè)集群中一共有 n 個(gè) RegionServer,m 個(gè) Region ,那么集群的平均負(fù)載就是 average = m/n。

  • 這種策略能夠保證所有 RegionServer 上的 Region 個(gè)數(shù)都在 [floor(average),ceil(average)]之間。

因此, SimpleLoadBalancer 策略中負(fù)載就是 Region 個(gè)數(shù),集群負(fù)載遷移計(jì)劃就是 Region 從個(gè)數(shù)較多的 RegionServer 上遷移到個(gè)數(shù)較少的 RegionServer 上。

雖然集群中每個(gè) RegionServer 的 Region 個(gè)數(shù)都基本相同,但如果某臺(tái) RegionServer 上的 Region 全部都是熱點(diǎn)數(shù)據(jù),導(dǎo)致 90 %的讀寫(xiě)請(qǐng)求還是落在了這臺(tái) RegionServer 上,這樣沒(méi)有達(dá)到負(fù)載均衡的目的。

StochasticLoadBalancer 策略:

它對(duì)于負(fù)載的定義不再是 Region 個(gè)數(shù)這么簡(jiǎn)單,而是由多種獨(dú)立負(fù)載加權(quán)計(jì)算的復(fù)合值,這些獨(dú)立負(fù)載包括:

  • Region 個(gè)數(shù),Region 負(fù)載,讀請(qǐng)求數(shù),寫(xiě)請(qǐng)求數(shù),Storefile 大小,MemStore 大小,數(shù)據(jù)本地率,移動(dòng)代價(jià)。

這些獨(dú)立負(fù)載經(jīng)過(guò)加權(quán)計(jì)算會(huì)得到一個(gè)代價(jià)值,系統(tǒng)使用這個(gè)代價(jià)值來(lái)評(píng)估當(dāng)前 Region 分布是否均衡,越均衡代價(jià)值越低。

  • HBase 通過(guò)不斷隨機(jī)挑選迭代來(lái)找到一組 Region 遷移計(jì)劃,使得代價(jià)值最小。

Flush機(jī)制

MemStore的大小超過(guò)某個(gè)值的時(shí)候,會(huì)Flush到磁盤(pán),默認(rèn)為128M。

MemStore中的數(shù)據(jù)時(shí)間超過(guò)1小時(shí),會(huì)Flush到磁盤(pán)。

HRegionServer的全局MemStore的大小超過(guò)某大小會(huì)觸發(fā)Flush到磁盤(pán),默認(rèn)是堆大小的40%。

Compact機(jī)制

HBase需要在必要的時(shí)候?qū)⑿〉腟tore File合并成相對(duì)較大的Store File,這個(gè)過(guò)程為Compaction。

  • 為了防止小文件過(guò)多,以保證查詢效率。

在HBase中主要存在兩種類型的Compaction合并。

Minor Compaction 小合并:

  • 在將Store中多個(gè)HFile合并為一個(gè)HFile。
  • 這個(gè)過(guò)程中,達(dá)到TTL(記錄保留時(shí)間)會(huì)被移除,刪除和更新的數(shù)據(jù)僅僅只是做了標(biāo)記,并沒(méi)有物理移除。
  • 這種合并的觸發(fā)頻率很高。

Major Compaction 大合并:

  • 合并Store中所有的HFile為一個(gè)HFile。
  • 這個(gè)過(guò)程有刪除標(biāo)記的數(shù)據(jù)會(huì)被真正移除,同時(shí)超過(guò)單元格maxVersion的版本記錄也會(huì)被刪除。
  • 合并頻率比較低,默認(rèn)7天執(zhí)行一次,并且性能消耗非常大,建議生產(chǎn)關(guān)閉(設(shè)置為0),在應(yīng)用空閑時(shí)間手動(dòng)觸發(fā)。
  • 一般可以是手動(dòng)控制進(jìn)行合并,防止出現(xiàn)在業(yè)務(wù)高峰期。

Region拆分機(jī)制

Region 中存儲(chǔ)的是大量的 Rowkey 數(shù)據(jù),當(dāng) Region 中的數(shù)據(jù)條數(shù)過(guò)多的時(shí)候,直接影響查詢效率。

  • 當(dāng) Region 過(guò)大的時(shí)候,HBase 會(huì)拆分 Region。

HBase 的 Region Split 策略一共有以下幾種。

ConstantSizeRegionSplitPolicy:

0.94版本前默認(rèn)切分策略。

當(dāng)Region大小大于某個(gè)閾值之后就會(huì)觸發(fā)切分,一個(gè)Region等分為2個(gè)Region。

  • 在生產(chǎn)線上這種切分策略有相當(dāng)大的弊端:切分策略對(duì)于大表和小表沒(méi)有明顯的區(qū)分。

閾值設(shè)置較大對(duì)大表比較友好,但是小表就有可能不會(huì)觸發(fā)分裂,極端情況下可能就1個(gè)。

如果設(shè)置較小則對(duì)小表友好,但一個(gè)大表就會(huì)在整個(gè)集群產(chǎn)生大量的Region,這對(duì)于集群的管理、資源使用、Failover不好。

IncreasingToUpperBoundRegionSplitPolicy:

0.94版本~2.0版本默認(rèn)切分策略。

總體看和ConstantSizeRegionSplitPolicy思路相同,一個(gè)Region大小大于設(shè)置閾值就會(huì)觸發(fā)切分。

  • 但這個(gè)閾值并不是一個(gè)固定的值。
  • 而是會(huì)在一定條件下不斷調(diào)整,調(diào)整規(guī)則和Region所屬表在當(dāng)前RegionServer上的Region個(gè)數(shù)有關(guān)系。

Region Split的計(jì)算公式是:

  • RegionCount^3 * 128M * 2,當(dāng)Region達(dá)到該size的時(shí)候進(jìn)行split。

例如:

  • 第一次split:1^3 * 256 = 256MB
  • 第二次split:2^3 * 256 = 2048MB
  • 第三次split:3^3 * 256 = 6912MB
  • 第四次split:4^3 * 256 = 16384MB > 10GB,取較小的值10GB

后面每次split的size都是10GB了。

SteppingSplitPolicy:

  • 2.0版本默認(rèn)切分策略。
  • 依然和待分裂Region所屬表在當(dāng)前RegionServer上的Region個(gè)數(shù)有關(guān)系。
  • 如果Region個(gè)數(shù)等于1,切分閾值為flush size * 2,否則為MaxRegionFileSize。
  • 這種切分策略對(duì)于大集群中的大表。
  • 小表會(huì)比 IncreasingToUpperBoundRegionSplitPolicy 更加友好,小表不會(huì)再產(chǎn)生大量的小Region,而是適可而止。

KeyPrefixRegionSplitPolicy:

  • 根據(jù)RowKey的前綴對(duì)數(shù)據(jù)進(jìn)行分組,這里是指定RowKey的前多少位作為前綴,比如RowKey都是16位的,指定前5位是前綴。
  • 那么前5位相同的RowKey在進(jìn)行region split的時(shí)候會(huì)分到相同的Region中。

DelimitedKeyPrefixRegionSplitPolicy:

  • 保證相同前綴的數(shù)據(jù)在同一個(gè)Region中,例如RowKey的格式為:userid_eventtype_eventid,指定的delimiter為_(kāi)。
  • 則split的的時(shí)候會(huì)確保userid相同的數(shù)據(jù)在同一個(gè)Region中。

DisabledRegionSplitPolicy:

不啟用自動(dòng)拆分,需要指定手動(dòng)拆分。

預(yù)分區(qū)

當(dāng)一個(gè)table剛被創(chuàng)建的時(shí)候,HBase默認(rèn)的分配一個(gè)Region給table。

  • 這時(shí)所有的讀寫(xiě)請(qǐng)求都會(huì)訪問(wèn)到同一個(gè)RegionServer的同一個(gè)Region中。
  • 這個(gè)時(shí)候就達(dá)不到負(fù)載均衡的效果了,集群中的其他RegionServer就可能會(huì)處于比較空閑的狀態(tài)。

解決辦法:

  • 可以用預(yù)分區(qū)(pre-splitting),在創(chuàng)建table的時(shí)候就配置好,生成多個(gè)Region。

如何預(yù)分區(qū)?

  • 每一個(gè)Region維護(hù)著startRow與endRowKey。
  • 如果加入的數(shù)據(jù)符合某個(gè)Region維護(hù)的RowKey范圍,則該數(shù)據(jù)交給這個(gè)Region維護(hù)。

手動(dòng)指定預(yù)分區(qū):

create 'person','info1','info2',SPLITS => ['1000','2000','3000','4000']

Region定位

HBase 支持 put , get , delete 和 scan 等基礎(chǔ)操作,所有這些操作的基礎(chǔ)是 region 定位。

region 定位基本步驟:

客戶端與 ZooKeeper 交互,查找 hbase:meta 系統(tǒng)表所在的 Regionserver。

hbase:meta 表維護(hù)了每個(gè)用戶表中 rowkey 區(qū)間與 Region 存放位置的映射關(guān)系,具體如下:

  • rowkey : table name,start key,region id。
  • value : RegionServer 對(duì)象(保存了 RegionServer 位置信息等)。

客戶端與 hbase:meta 系統(tǒng)表所在 RegionServer 交互,獲取 rowkey 所在的 RegionServer。

客戶端與 rowkey 所在的 RegionServer 交互,執(zhí)行該 rowkey 相關(guān)操作。

需要注意:

  • 客戶端首次執(zhí)行讀寫(xiě)操作時(shí)才需要定位 hbase:meta 表的位置。
  • 之后會(huì)將其緩存到本地,除非因 region 移動(dòng)導(dǎo)致緩存失效,客戶端才會(huì)重新讀取 hbase:meta 表位置,并更新緩存。

讀寫(xiě)流程

讀操作:

首先從 ZooKeeper 找到 meta 表的 region 位置,然后讀取hbase:meta 表中的數(shù)據(jù),hbase:meta 表中存儲(chǔ)了用戶表的 region 信息。

根據(jù)要查詢的 namespace 、表名和 rowkey 信息,找到寫(xiě)入數(shù)據(jù)對(duì)應(yīng)的 Region 信息。

找到這個(gè) Region 對(duì)應(yīng)的 RegionServer ,然后發(fā)送請(qǐng)求。

查找對(duì)應(yīng)的 Region。

先從 MemStore 查找數(shù)據(jù),如果沒(méi)有,再?gòu)?BlockCache 上讀取。

  • HBase 上 RegionServer 的內(nèi)存分為兩個(gè)部分:
  • 一部分作為 MemStore,主要用來(lái)寫(xiě)。
  • 另外一部分作為 BlockCache,主要用于讀數(shù)據(jù)。

如果 BlockCache 中也沒(méi)有找到,再到 StoreFile(HFile) 上進(jìn)行讀取。

  • 從 StoreFile 中讀取到數(shù)據(jù)之后,不是直接把結(jié)果數(shù)據(jù)返回給客戶端,而是把數(shù)據(jù)先寫(xiě)入到 BlockCache 中,目的是為了加快后續(xù)的查詢,然后在返回結(jié)果給客戶端。

寫(xiě)操作:

首先從 ZooKeeper 找到 hbase:meta 表的 Region 位置,然后讀取 hbase:meta表中的數(shù)據(jù),hbase:meta 表中存儲(chǔ)了用戶表的 Region 信息。

根據(jù) namespace 、表名和 rowkey 信息找到寫(xiě)入數(shù)據(jù)對(duì)應(yīng)的 Region 信息。

找到這個(gè) Region 對(duì)應(yīng)的 RegionServer ,然后發(fā)送請(qǐng)求。

把數(shù)據(jù)分別寫(xiě)到 HLog (WriteAheadLog)和 MemStore 各一份。

MemStore 達(dá)到閾值后把數(shù)據(jù)刷到磁盤(pán),生成 StoreFile 文件。

刪除 HLog 中的歷史數(shù)據(jù)。

BulkLoad機(jī)制

用戶數(shù)據(jù)位于 HDFS 中,業(yè)務(wù)需要定期將這部分海量數(shù)據(jù)導(dǎo)入 HBase 系統(tǒng),以執(zhí)行隨機(jī)查詢更新操作。

這種場(chǎng)景如果調(diào)用寫(xiě)入 API 進(jìn)行處理,極有可能會(huì)給 RegionServer 帶來(lái)較大的寫(xiě)人壓力。

  • 引起 RegionServer 頻繁 flush,進(jìn)而不斷 compact、split,影響集群穩(wěn)定性。
  • 引起 RegionServer 頻繁GC,影響集群穩(wěn)定性。
  • 消耗大量 CPU 資源、帶寬資源、內(nèi)存資源以及 IO 資源,與其他業(yè)務(wù)產(chǎn)生資源競(jìng)爭(zhēng)。
  • 在某些場(chǎng)景下,比如平均 KV 大小比較大的場(chǎng)景,會(huì)耗盡 RegionServer 的處理線程, 導(dǎo)致集群阻塞。

所以HBase提供了另一種將數(shù)據(jù)寫(xiě)入HBase集群的方法:BulkLoad。

BulkLoad 首先使用 MapReduce 將待寫(xiě)入集群數(shù)據(jù)轉(zhuǎn)換為 HFile 文件,再直接將這些 HFile 文件加載到在線集群中。

BulkLoad 沒(méi)有將寫(xiě)請(qǐng)求發(fā)送給 RegionServer 處理,可以有效避免上述一系列問(wèn)題。

常見(jiàn)問(wèn)題

熱點(diǎn)問(wèn)題

什么是熱點(diǎn)?

檢索 HBase 的記錄首先要通過(guò)Row Key來(lái)定位數(shù)據(jù)行。

當(dāng)大量的 Client 訪問(wèn) HBase 集群的一個(gè)或少數(shù)幾個(gè)節(jié)點(diǎn),造成少數(shù) Region Server 的讀/寫(xiě)請(qǐng)求過(guò)多、負(fù)載過(guò)大,而其他Region Server 負(fù)載卻很小,就造成了 熱點(diǎn) 現(xiàn)象。

解決方案:

預(yù)分區(qū):

  • 目的讓表的數(shù)據(jù)可以均衡的分散在集群中,而不是默認(rèn)只有一個(gè)Region分布在集群的一個(gè)節(jié)點(diǎn)上。

加鹽:

  • 在Rowkey的前面增加隨機(jī)數(shù),具體就是給Rowkey分配一個(gè)隨機(jī)前綴以使得它和之前的Rowkey的開(kāi)頭不同。

哈希:

  • 哈希會(huì)使同一行永遠(yuǎn)用一個(gè)前綴加鹽。
  • 也可以使負(fù)載分散到整個(gè)集群,但是讀是可以預(yù)測(cè)的。
  • 使用確定的哈希可以讓客戶端重構(gòu)完整的Rowkey,可以使用get操作準(zhǔn)確獲取某一個(gè)行數(shù)據(jù)。

反轉(zhuǎn):

  • 反轉(zhuǎn)固定長(zhǎng)度或者數(shù)字格式的Rowkey。
  • 這樣可以使得Rowkey中經(jīng)常改變的部分放在前面。
責(zé)任編輯:姜華 來(lái)源: 月伴飛魚(yú)
相關(guān)推薦

2018-07-06 11:18:46

HBaseHFile數(shù)據(jù)庫(kù)

2012-09-21 09:45:59

2009-08-26 14:03:26

C#打印原理

2023-02-28 09:07:18

ChatGPTAI

2019-04-28 11:06:01

Hbase架構(gòu)程序員

2023-01-10 16:30:22

Spring數(shù)據(jù)庫(kù)

2021-07-12 09:45:36

NameServer 核心Conusmer

2021-01-12 14:46:34

Kubernetes開(kāi)發(fā)存儲(chǔ)

2019-12-06 10:59:20

JavaScript運(yùn)行引擎

2021-07-05 07:51:43

JVM底層Python

2011-06-29 15:02:25

Qt 模板庫(kù)

2016-12-27 09:08:34

HBase數(shù)據(jù)流程

2018-08-07 16:17:35

JavaMySQL數(shù)據(jù)庫(kù)

2021-04-13 07:58:36

測(cè)試假設(shè)檢驗(yàn)

2020-05-21 13:25:43

Spring組件架構(gòu)

2023-08-11 07:44:40

TCP滑動(dòng)窗口數(shù)據(jù)

2021-12-01 18:36:35

屬性

2022-12-21 19:04:35

InnoDBMySQL

2010-03-18 18:20:34

Java Socket

2024-06-27 08:26:10

LooperAndroid內(nèi)存
點(diǎn)贊
收藏

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

成人免费看视频| 国产露脸91国语对白| а天堂中文最新一区二区三区| 亚洲国产精品高清| 1卡2卡3卡精品视频| 国产一区二区三区在线视频观看| 国产精品毛片久久久久久久久久99999999 | 欧美综合色免费| 一区高清视频| 亚洲一级片免费看| 9色精品在线| 综合欧美国产视频二区| 日韩av加勒比| 日韩性xxx| 夜夜亚洲天天久久| 婷婷久久青草热一区二区| 成人免费公开视频| 免费久久99精品国产| 久久综合久中文字幕青草| 成人3d动漫一区二区三区| 国产婷婷视频在线| 99久久精品国产精品久久| 国产精品一二三在线| 日韩 欧美 综合| 天天综合一区| 亚洲性猛交xxxxwww| 久久久久久久人妻无码中文字幕爆| 韩国成人二区| 亚洲成人综合视频| 亚洲激情一区二区| 蜜桃视频在线观看网站| 丁香啪啪综合成人亚洲小说| 日韩av理论片| 五月天综合在线| 欧美精品不卡| 久久这里只有精品99| 国产精品无码无卡无需播放器| 亚洲五码在线| 欧美日韩国产精品专区| 国产欧美日韩小视频| av香蕉成人| 国产精品成人免费精品自在线观看 | 国产成人免费高清| 91久久久在线| 国产精品玖玖玖| 久久99久国产精品黄毛片色诱| 国产精品av网站| 极品国产91在线网站| 亚洲在线网站| 2019亚洲男人天堂| 精品91久久久| 97人人精品| 中文字幕精品一区久久久久| 我和岳m愉情xxxⅹ视频| 三级欧美日韩| 精品免费国产一区二区三区四区| 国产在线观看中文字幕| 国产精品麻豆| 欧美一二三区在线观看| 2025中文字幕| 国产伦理久久久久久妇女| 精品剧情在线观看| 99riav国产精品视频| 一区二区三区国产好| 欧美男人的天堂一二区| 在线观看的毛片| 久久91视频| 欧美一区二区三区四区在线观看| 日本美女久久久| 亚洲日本视频在线| 日韩精品视频免费专区在线播放| 色哟哟免费视频| 国产精品视频3p| 亚洲精品一区二区三区影院 | 日韩在线理论| 精品国产一区二区三区久久狼5月 精品国产一区二区三区久久久狼 精品国产一区二区三区久久久 | 久久电影视频| 亚洲欧美怡红院| 国产日韩亚洲欧美在线| 国产在线天堂www网在线观看| 一本大道av一区二区在线播放| 波多野结衣av一区二区全免费观看| 看黄在线观看| 色成年激情久久综合| 情侣黄网站免费看| 99热这里有精品| 日韩精品一区二区三区在线观看 | 香蕉成人伊视频在线观看| 国产1区2区3区中文字幕| 国产美女高潮在线| 欧美亚洲一区二区三区四区| 美女被艹视频网站| 一本久久青青| 在线电影中文日韩| 私库av在线播放| 午夜一区不卡| 3d精品h动漫啪啪一区二区| 四虎精品成人影院观看地址| 中文字幕精品一区| 黄色录像特级片| 欧美成人ⅴideosxxxxx| 日韩一卡二卡三卡国产欧美| 好吊日免费视频| 欧美成人一区二免费视频软件| 久久久视频在线| 少妇无套内谢久久久久| 国产成人亚洲综合a∨婷婷| 欧美日韩免费精品| 在线观看av的网站| 午夜亚洲国产au精品一区二区| 男女啪啪网站视频| 91精品短视频| 亚洲欧洲一区二区三区在线观看| 中日韩一级黄色片| 国产欧美日本| 97碰碰视频| 成人免费在线视频网| 亚洲国产精品天堂| 一女被多男玩喷潮视频| 精品一区二区三区中文字幕在线| 亚洲精品第一国产综合精品| 黑人操日本美女| 久久亚洲色图| 亚洲人123区| 亚洲综合丝袜美腿| 欧美色图色综合| 香蕉成人app| 日韩视频一区在线| 中文字幕av免费观看| 成人免费不卡视频| 97超碰人人爱| 亚洲精品在线影院| 精品国产精品网麻豆系列| 日本在线观看网址| 日韩综合在线视频| 风间由美久久久| 国产精品剧情| 5566中文字幕一区二区电影| 男女男精品视频网站| 日韩精品亚洲专区| 欧洲精品亚洲精品| 欧美一级大片| 亚洲女人被黑人巨大进入| 精品国产免费观看| 26uuu精品一区二区| 久久久999免费视频| 久久草在线视频| 欧美精品国产精品日韩精品| 成人午夜视频一区二区播放| 综合久久综合久久| 伊人成人222| 久久精品免费一区二区三区| 亚洲a成v人在线观看| 成年人网站在线| 欧美一区二区福利视频| 精品爆乳一区二区三区无码av| 国产成人精品亚洲日本在线桃色| 久久国产精品免费观看| 久久中文字幕一区二区| 欧美高清第一页| 天天干视频在线| 色欧美片视频在线观看在线视频| 大又大又粗又硬又爽少妇毛片 | 中文字幕第一页在线播放| 久久女同互慰一区二区三区| 青青视频免费在线| 国产精品视频3p| 欧美在线视频观看| 91成品人影院| 亚洲国产sm捆绑调教视频 | 久久免费视频观看| 国产综合视频在线| 欧美日韩中文字幕日韩欧美| av av在线| 日韩国产在线观看| 亚洲欧美一二三| 精品久久毛片| 欧美激情乱人伦| 欧美扣逼视频| 欧美一区二区三区喷汁尤物| 国产一级片免费观看| 久久综合久久久久88| chinese少妇国语对白| 亚洲最大黄网| 激情视频一区二区| 精品福利在线| 97超碰国产精品女人人人爽| 成人激情电影在线看| 日韩欧美亚洲国产另类| 五月婷婷色丁香| 中文字幕综合网| 中文字幕久久久久久久| 六月天综合网| 亚洲小说欧美另类激情| 私拍精品福利视频在线一区| 热re99久久精品国产66热| 免费黄色在线| 亚洲女人天堂av| 亚洲春色一区二区三区| 都市激情亚洲色图| 337人体粉嫩噜噜噜| 国产·精品毛片| 国产精品视频黄色| 1024精品一区二区三区| 亚洲视频在线观看日本a| 伦理一区二区| 成人免费高清完整版在线观看| 日本在线影院| 久久在线视频在线| 丁香婷婷在线| 日韩激情视频在线播放| 一级黄色大片免费| 欧美性极品少妇精品网站| 久草国产在线视频| 国产精品全国免费观看高清| 中国免费黄色片| 国产综合色产在线精品| 一区二区三区国产免费| 亚洲一区成人| 男人的天堂狠狠干| 99视频精品视频高清免费| 欧美一级二级三级九九九| 老司机精品在线| 91久久精品一区二区别| 午夜欧美激情| 久久久久久久久久久国产| 好吊日视频在线观看| 中文字幕亚洲国产| 高清国产福利在线观看| 亚洲精品中文字幕av| 手机看片国产1024| 精品国精品国产尤物美女| 国产999久久久| 4hu四虎永久在线影院成人| 国产精品成人久久久| 色综合中文综合网| 黄色免费av网站| 欧美日韩在线免费| 日韩免费观看一区二区| 亚洲成a人片综合在线| 久久久久97国产| 一区二区成人在线| 久久国产精品波多野结衣| 亚洲日本电影在线| 免费成人深夜夜行网站| 国产精品理伦片| 在线视频这里只有精品| 国产清纯白嫩初高生在线观看91 | 黄色日韩在线| 一级特黄妇女高潮| 999精品一区| 天堂av一区二区| 99久久99久久精品国产片桃花 | av电影在线观看| 国产亚洲视频在线观看| 毛片网站在线观看| 国产亚洲精品美女久久久| 在线视频二区| 最新国产精品亚洲| 黄网站免费在线播放| 色哟哟网站入口亚洲精品| 色三级在线观看| 久久精品视频在线| 直接在线观看的三级网址| 久久97久久97精品免视看 | 国产精品流白浆视频| 欧美性猛交xxx高清大费中文| 国产剧情日韩欧美| 亚洲爽爆av| 91免费版黄色| 欧美电影在线观看免费| 96sao精品视频在线观看| 深夜福利一区| 久久人人九九| 成人免费在线观看av| 欧美少妇一级片| 国产精品久久观看| 青青青国产在线观看| 亚洲精品欧美| 五月婷婷六月丁香激情| 蜜臀99久久精品久久久久久软件| 久久久久久综合网| 丁香天五香天堂综合| 丰满少妇一区二区三区| 国产精品麻豆99久久久久久| 久久久久久久麻豆| 亚洲不卡一区二区三区| 无码人妻精品一区二区三区蜜桃91 | a看欧美黄色女同性恋| 91免费看国产| 欧美成人基地| 四虎精品欧美一区二区免费| 国产欧美日韩综合一区在线播放| 中文字幕av专区| 国产精品中文字幕欧美| 欧美高清性xxxx| 亚洲欧美一区二区不卡| 中文字幕国产在线观看| 欧美一区二区三区电影| 天堂网在线中文| 日韩中文理论片| 蜜桃av在线| 91av免费看| 精品国产一区二区三区av片| 91黄色在线看| 快she精品国产999| 国产一级二级av| 久久综合久久综合九色| 免费网站观看www在线观| 精品视频在线免费观看| 丰满人妻妇伦又伦精品国产| 色噜噜国产精品视频一区二区| 青青青免费在线视频| 亚洲精品免费网站| 日韩av久操| 国产视频一视频二| 国产黄人亚洲片| 亚洲а∨天堂久久精品2021| 亚洲国产一区二区视频| 中文字幕视频一区二区| 亚洲欧美国产视频| 国产h片在线观看| 91在线色戒在线| 欧美激情电影| 91n.com在线观看| 91丝袜美腿高跟国产极品老师| 国产一级一片免费播放放a| 在线观看视频91| 精品视频一二三| 欧洲成人在线视频| 免费观看成人www动漫视频| 97中文字幕在线| 国产精品 日产精品 欧美精品| 91n在线视频| 制服丝袜亚洲播放| 秋霞影院午夜丰满少妇在线视频| 国产精品久久久久秋霞鲁丝| 精品国产99| 亚洲色图久久久| 久久久99久久| 五月天综合激情| 亚洲日韩欧美视频| xx欧美xxx| 精品亚洲欧美日韩| 在线亚洲成人| 国产精九九网站漫画| 亚洲一区二区三区四区五区黄 | 国产一区二区三区黄网站| 在线观看福利一区| 激情成人午夜视频| 国产18无套直看片| 欧美天堂一区二区三区| 四虎久久免费| 国产日韩精品在线观看| 天天做天天爱天天爽综合网| www.色就是色.com| 亚洲欧美日韩久久| 国产视频一区二区三区四区五区| 欧美精品在线网站| 亚洲精品一区二区三区中文字幕| 成年人网站国产| 国产精品一卡二卡在线观看| 国产一级视频在线观看| 精品国产露脸精彩对白 | 国产日韩欧美一二三区| 欧美电影一区| 久久久久中文字幕亚洲精品| 午夜视频一区在线观看| 四虎影视精品成人| 国产一区二区香蕉| 亚洲网站在线| 极品白嫩丰满美女无套| 欧美专区在线观看一区| 操你啦在线视频| 国产一区二区在线网站| 日韩av中文字幕一区二区三区| 麻豆视频免费在线播放| 欧美区一区二区三区| 超碰中文在线| 国语精品免费视频| 狠狠入ady亚洲精品| 欧美性xxxx图片| 欧美一三区三区四区免费在线看| av日韩中文| 在线观看精品视频| 99re免费视频精品全部| 91丨九色丨丰满| 国外色69视频在线观看| 免费福利视频一区| 五月天av在线播放| 亚洲二区在线观看| 日本福利在线观看| 欧美中文在线视频| 天天久久综合| 91人妻一区二区| 欧美日韩一区二区电影| 黄视频在线免费看| 中文字幕欧美日韩一区二区| 91小视频免费看| 国产精品亚洲欧美在线播放|