IT技術互動交(jiao)流平台

三分pk10官网

來源(yuan)︰IT165收集  發布(bu)日期︰2020-02-18 11:53:33

HBase是Apache Hadoop中(zhong)的一個子項目,Hbase依(yi)托(tuo)于Hadoop的HDFS作為(wei)最(zui)基(ji)本(ben)存儲基(ji)礎單元(yuan),通過使(shi)用(yong)hadoop的DFS工具就可以看(kan)到這些這些數(shu)據存儲文(wen)件(jian)夾(jia)的結(jie)構,還可以通過Map/Reduce的框架(算法)對HBase進行操作

一、 hbase架構

1.概述。

HBase是Apache Hadoop的數(shu)據庫,能夠對yuan)笮褪shu)據提供隨機、實時的讀lie)捶fang)問。HBase的目標是存儲並處理大型的數(shu)據。HBase是一個開源(yuan)的mo) 植(zhi)bu)式jiang)模(mo) duo)版(ban)本(ben)的mo) 嫦xiang)列(lie)的存儲模(mo)型。它存儲的是松散型數(shu)據。

上圖是hadoop的生態系(xi)統描(miao)述,hadoop所有應用(yong)都是構建于hdfs(它提供高可靠(kao)的底層存儲支持,幾(ji)乎已經成為(wei)分zhi)bu)式文(wen)件(jian)存儲系(xi)統事實上xi)墓?ye)標準)之上xi)姆植(zhi)bu)式列(lie)存儲系(xi)統,主要用(yong)于海量結(jie)構化數(shu)據存儲。

HBase是一hui)oSQL數(shu)據庫. NoSQL是一個通用(yong)詞(ci)表示數(shu)據庫不是RDBMS ,後者支持 SQL 作為(wei)主要訪(fang)問手(shou)段(duan)。有許多(duo)種 NoSQL 數(shu)據庫: BerkeleyDB 是本(ben)地 NoSQL 數(shu)據庫例(li)子, 而 HBase 是大型分zhi)bu)式數(shu)據庫。 技術上來ci)shuo), HBase 更(geng)像是"數(shu)據存儲(Data Store)" 多(duo)于 "數(shu)據庫(Data Base)"。因為(wei)缺(que)少很多(duo)RDBMS特(te)性, 如(ru)列(lie)類型,第二索(suo)引(yin),觸發器,高級(ji)查詢語言等

然而, HBase 有許多(duo)特(te)征同時支持線性化和模(mo)塊化擴充。 HBase 集群通過增加RegionServers進行擴充。 它可以放(fang)在普(pu)通的服務器中(zhong)。例(li)如(ru),如(ru)果集群從(cong)10個擴充到20個RegionServer,存儲空(kong)間(jian)和處理容量都同時翻倍。 RDBMS 也(ye)能很好(hao)擴充, 但僅對一個點 - 特(te)別是對一個單獨(du)數(shu)據庫服務器的大小 - 同時,為(wei)了更(geng)好(hao)的性能,需要特(te)殊的硬bu)jian)和存儲設備。Hbase特(te)性︰

強(qiang)一hui)灤遠列(lie) HBase 不是 "最(zui)終一hui)灤eventually consistent)" 數(shu)據存儲. 這讓它很適合高速計(ji)數(shu)聚(ju)合類任務。

自(zi)動分片(Automatic sharding):HBase 表通過region分zhi)bu)在集群中(zhong)。數(shu)據增長時,region會自(zi)動分割並重新lu)植(zhi)bu)。

RegionServer 自(zi)動故(gu)障轉移

Hadoop/HDFS 集成: HBase 支持本(ben)機外HDFS 作為(wei)它的分zhi)bu)式文(wen)件(jian)系(xi)統chang)/p>

MapReduce: HBase 通過MapReduce支持大並發處理, HBase 可以同時做源(yuan)和目標.

Java 客(ke)戶(hu)端 API: HBase 支持易于使(shi)用(yong)的 Java API 進行編程訪(fang)問.

Thrift/REST API:HBase 也(ye)支持Thrift和 REST 作為(wei)非(fei)Java 前端.

Block Cache 和 Bloom Filters: 對于大容量查詢優化, HBase支持 Block Cache 和 Bloom Filters。

運維管(guan)理: HBase提供內置網頁用(yong)于運維視角和JMX 度量.

前文(wen)提到Hbase是一個列(lie)式存儲的數(shu)據庫,那(na)麼ci)裁詞(ci)橇lie)式存儲,它與傳(chuan)統的RDBMS采用(yong)的行式存儲又有什麼區別?列(lie)存儲不同于傳(chuan)統的關(guan)系(xi)型數(shu)據庫,其數(shu)據在表中(zhong)是按行存儲的mo) lie)方式所帶來的重要好(hao)處之一就是,由于查詢中(zhong)的選擇規則是通過列(lie)來定義(yi)的mo) 虼ci)整個數(shu)據庫是自(zi)動索(suo)引(yin)化的。按列(lie)存儲每個字段(duan)的數(shu)據聚(ju)集存儲,在查詢只需要少數(shu)幾(ji)個字段(duan)的時候,能大大減少讀取的數(shu)據量,一個字段(duan)的數(shu)據聚(ju)集存儲,那(na)就更(geng)容易為(wei)這種聚(ju)集存儲設計(ji)更(geng)好(hao)的壓縮/解壓算法。這張圖講述了傳(chuan)統的行存儲和列(lie)存儲的na)穡/p>

2.hbase架構

注︰準確(que)的說(shuo)位于上圖下半部分的組建應該(gai)是hdfs而非(fei)hadoop,hbase並不依(yi)賴于hadoop,但是它構建于hdfs之上。

Zookeeper︰
Zookeeper Quorum存儲-ROOT-表地址(zhi)、HMaster地址(zhi)
HRegionServer把自(zi)己(ji)以Ephedral方式注冊(ce)到Zookeeper中(zhong),HMaster隨時感知各個HRegionServer的健(jian)康(kang)狀況
Zookeeper避免(mian)HMaster單點問題
HMaster
HMaster沒有單點問題,HBase中(zhong)可以啟動多(duo)個HMaster,通過Zookeeper的MasterElection機制保證(zheng)總有一個Master在運行
主要負責Table和Region的管(guan)理工作︰
1 管(guan)理用(yong)戶(hu)對表的增刪(shan)改查操作
2 管(guan)理HRegionServer的負載均衡(heng),調整Region分zhi)bu)
3 Region Split後,負責新Region的分zhi)bu)
4 在HRegionServer停機後,負責失(shi)效HRegionServer上Region遷移

HRegionServer︰
HBase中(zhong)最(zui)核(he)心的模(mo)塊,主要負責響應用(yong)戶(hu)I/O請(qing)求,向(xiang)HDFS文(wen)件(jian)系(xi)統中(zhong)讀lie)詞(ci)shu)據

HRegionServer管(guan)理一些列(lie)HRegion對象(xiang);
每個HRegion對應Table中(zhong)一個Region,HRegion由多(duo)個HStore組成;
每個HStore對應Table中(zhong)一個Column Family的存儲;
Column Family就是一個集中(zhong)的存儲單元(yuan),故(gu)將具有相(xiang)同IO特(te)性的Column放(fang)在一個Column Family會更(geng)高效

HStore︰
HBase存儲的核(he)心。由MemStore和StoreFile組成。
MemStore是Sorted Memory Buffer。用(yong)戶(hu)寫入數(shu)據的流程︰

Client寫入 -> 存入MemStore,一hui)鋇emStore滿(man) -> Flush成一個StoreFile,直至增長到一定閾值 -> 出發Compact合並操作 -> 多(duo)個StoreFile合並成一個StoreFile,同時進行版(ban)本(ben)合並和數(shu)據刪(shan)除 -> 當StoreFiles Compact後,逐步形成越來越大的StoreFile ->單個StoreFile大小超過一定閾值後,觸發Split操作,把當前Region Split成2個Region,Region會下線,新Split出的2個孩子Region會被HMaster分配到相(xiang)應的HRegionServer 上,使(shi)得原先1個Region的壓力得以分流到2個Region上
由此(ci)過程可知,HBase只是增加you)shu)據,所有的更(geng)新和刪(shan)除操作,都是在Compact階段(duan)做的mo) 裕 yong)戶(hu)寫操作只需要進入到內存即可立即返回,從(cong)而保證(zheng)I/O高性能。

HLog
引(yin)入HLog原因︰
在分zhi)bu)式系(xi)統環境中(zhong),無法避免(mian)系(xi)統出錯或者宕(dang)機,一旦(dan)HRegionServer意外退出,MemStore中(zhong)的內存數(shu)據就會丟失(shi),引(yin)入HLog就是防止這種情況
工作機制︰
每 個HRegionServer中(zhong)都會有一個HLog對象(xiang),HLog是一個實現(xian)Write Ahead Log的類,每kan)斡yong)戶(hu)操作寫入Memstore的同時,也(ye)會寫一份數(shu)據到HLog文(wen)件(jian),HLog文(wen)件(jian)定期會滾動出新,並刪(shan)除舊的文(wen)件(jian)(已持久(jiu)化到 StoreFile中(zhong)的數(shu)據)。當HRegionServer意外終止後,HMaster會通過Zookeeper感知,HMaster首先處理遺(yi)留的 HLog文(wen)件(jian),將不同region的log數(shu)據拆分,分別放(fang)到相(xiang)應region目錄下,然後再將失(shi)效的region重新lu)峙洌 烊〉秸廡egion的 HRegionServer在Load Region的過程中(zhong),會發現(xian)有歷史HLog需要處理,因此(ci)會Replay HLog中(zhong)的數(shu)據到MemStore中(zhong),然後flush到StoreFiles,完(wan)成數(shu)據恢(hui)復。

HBase存儲格式
HBase中(zhong)的所有數(shu)據文(wen)件(jian)都存儲在Hadoop HDFS文(wen)件(jian)系(xi)統上,格式主要有兩種︰
1 HFile HBase中(zhong)KeyValue數(shu)據的存儲格式,HFile是Hadoop的二進制格式文(wen)件(jian),實dao)噬toreFile就是對HFile做了輕量級(ji)包(bao)裝,即StoreFile底層就是HFile
2 HLog File,HBase中(zhong)WAL(Write Ahead Log) 的存儲格式,物理上是Hadoop的Sequence File

HFile

HFile文(wen)件(jian)不定長,長度固(gu)定的塊只有兩個︰Trailer和FileInfo
Trailer中(zhong)指針指向(xiang)其他數(shu)據塊的起始(shi)點
File Info中(zhong)記錄了文(wen)件(jian)的一些Meta信息,例(li)如(ru)︰AVG_KEY_LEN,AVG_VALUE_LEN, LAST_KEY, COMPARATOR, MAX_SEQ_ID_KEY等
Data Index和Meta Index塊記錄了每個Data塊和Meta塊的起始(shi)點
Data Block是HBase I/O的基(ji)本(ben)單元(yuan),為(wei)了提高效率,HRegionServer中(zhong)有基(ji)于LRU的Block Cache機制
每個Data塊的大小可以在創建一個Table的時候通過參數(shu)指定,大號(hao)的Block有利(li)于順序(xu)Scan,小號(hao)Block利(li)于隨機查詢
每個Data塊除了開頭的Magic以外就是一個個KeyValue對拼接而成, Magic內容就是一些隨機數(shu)字,目kang)氖欠樂故(gu)菟鴰/p>

HFile里面的每個KeyValue對就是一個簡單的byte數(shu)組。這個byte數(shu)組里面包(bao)含了很多(duo)項,並且有固(gu)定的結(jie)構。

KeyLength和ValueLength︰兩個固(gu)定的長度,分別代表Key和Value的長度
Key部分︰Row Length是固(gu)定長度的數(shu)值,表示RowKey的長度,Row 就是RowKey
Column Family Length是固(gu)定長度的數(shu)值,表示Family的長度
接著就是Column Family,再接著是Qualifier,然後是兩個固(gu)定長度的數(shu)值,表示Time Stamp和Key Type(Put/Delete)
Value部分沒有這麼復雜的結(jie)構,就是純kan)獾畝剖shu)據

HLog文(wen)件(jian)就是一個普(pu)通的Hadoop Sequence File,Sequence File 的Key是HLogKey對象(xiang),HLogKey中(zhong)記錄了寫入數(shu)據的歸屬信息,除了table和region名(ming)字外,同時還包(bao)括(kuo) sequence number和timestamp,timestamp是“寫入時間(jian)”,sequence number的起始(shi)值為(wei)0,或者是最(zui)近(jin)一次存入文(wen)件(jian)系(xi)統中(zhong)sequence number。
HLog Sequece File的Value是HBase的KeyValue對象(xiang),即對應HFile中(zhong)的KeyValue

3.什麼ci)焙蠐Ωgai)使(shi)用(yong)hbase

在學習(xi)一門(men)新技術的時候首先需要明白,我們到jiang)子Ωgai)在什麼ci)焙蚴shi)用(yong)它,然後才是怎麼去使(shi)用(yong)它,Hbase並不適合所有問題。

首先,確(que)信有足夠多(duo)數(shu)據,如(ru)果有上億或上千億行數(shu)據,HBase是很好(hao)的備選。如(ru)果只有上千或上xi)僂蛐校 蠐yong)傳(chuan)統的RDBMS可能是更(geng)好(hao)的選擇。因為(wei)所有數(shu)據可以在一兩個節點保存,集群其他節點可能閑置。

其次,確(que)信可以不依(yi)賴所有RDBMS的額外特(te)性 (e.g., 列(lie)數(shu)據類型, 第二索(suo)引(yin),事物,高級(ji)查詢語言等.) 一個建立在RDBMS上應用(yong),如(ru)不能僅通過改變一個JDBC驅動移植(zhi)到HBase。相(xiang)對于移植(zhi), 需考慮從(cong)RDBMS 到 HBase是一次完(wan)全(quan)的重新設計(ji)。

第三, 確(que)信你有足夠硬bu)jian)。甚至 HDFS 在小于5個數(shu)據節點時,干(gan)不好(hao)什麼ci)慮(根據如(ru)HDFS 塊復制具有缺(que)省值 3), 還要加上一個NameNode.

HBase 能在單獨(du)的筆shi)潛ben)上運行良ji)謾5 庥 齙背煽 ?渲謾/p>

4.目錄表(.meta.和-root-)

-ROOT- 保存 .META. 表存在哪里的蹤(zong)跡. -ROOT- 表結(jie)構如(ru)下:

Key:

.META. region key (.META.,,1)

Values:

info:regioninfo (序(xu)列(lie)化.META.的 HRegionInfo 實例(li) )

info:server ( 保存 .META.的RegionServer的server:port)

info:serverstartcode ( 保存 .META.的RegionServer進程的啟動時間(jian))

.META. 保存系(xi)統中(zhong)所有region列(lie)表。 .META.表結(jie)構如(ru)下:

Key:

Region key 格式 ([table],[region start key],[region id])

Values:

info:regioninfo (序(xu)列(lie)化.META.的 HRegionInfo 實例(li) )

info:server ( 保存 .META.的RegionServer的server:port)

info:serverstartcode ( 保存 .META.的RegionServer進程的啟動時間(jian))

以上是官網文(wen)檔(dang)對于.meta.和-root-的描(miao)述,簡而言之,-root-中(zhong)存儲了.meta.的位hui)茫 meta.中(zhong)保存了具體數(shu)據(region)的存儲位hui)謾Hru)圖︰

Zookeeper中(zhong)記錄了-ROOT-表的location
客(ke)戶(hu)端訪(fang)問數(shu)據的流程︰
Client -> Zookeeper -> -ROOT- -> .META.-> 用(yong)戶(hu)數(shu)據表
多(duo)次網絡(luo)操作,不過client端有cache緩存

a. 啟動時序(xu)

1.啟動時主服務器調用(yong)AssignmentManager.

2.AssignmentManager 在META中(zhong)查找已經存在的na)蚍峙洹/p>

3.如(ru)果區域分配還有效(如(ru) RegionServer 還在線),那(na)麼分配繼續保持。

4.如(ru)果區域分配失(shi)效,LoadBalancerFactory 被調用(yong)來分配區域。 DefaultLoadBalancer 將隨機分配區域到RegionServer.

5.META 隨RegionServer 分配更(geng)新(如(ru)果需要) , RegionServer 啟動區域開啟代碼(ma)(RegionServer 啟動時進程)

b.故(gu)障轉移

當regionServer故(gu)障退出時︰

1.區域立即不可獲取,因為(wei)區域服務器退出。

2.主服務器會檢測到區域服務器退出。

3.區域分配會失(shi)效並被hui)匭路(lu)峙洌 ru)同啟動時序(xu)。

5.預寫日志(wal)

每個RegionServer會將更(geng)新(Puts, Deletes)先記錄到預寫日志中(zhong)(WAL),然後將其更(geng)新在Store的MemStore里面。這樣就保證(zheng)了HBase的寫的可靠(kao)性。如(ru)果沒有WAL,當RegionServer宕(dang)掉的時候,MemStore還沒有flush,StoreFile還沒有保存,數(shu)據就會丟失(shi)。HLog 是HBase的一個WAL實現(xian),一個RegionServer有一個HLog實例(li)。

WAL 保存在HDFS 的 /hbase/.logs/ 里面,每個region一個文(wen)件(jian)。

二、 數(shu)據模(mo)型

1.概念視圖

以bigTable論文(wen)中(zhong)的例(li)子來ci)shuo)明,有一個名(ming)為(wei)webtable的表,包(bao)含兩個列(lie)族︰contents和anchor.在這個例(li)子里面,anchor有兩個列(lie) (anchor:cssnsi.com,anchor:my.look.ca),contents僅有一列(lie)(contents:html)

Row Key

Time Stamp

ColumnFamily contents

ColumnFamily anchor

"com.cnn.www"

t9

 

anchor:cnnsi.com = "CNN"

"com.cnn.www"

t8

 

anchor:my.look.ca = "CNN.com"

"com.cnn.www"

t6

contents:html = "<html>..."

 

"com.cnn.www"

t5

contents:html = "<html>..."

 

"com.cnn.www"

t3

contents:html = "<html>..."

 

RowKey︰行鍵,是表中(zhong)每條記錄的“主鍵”,方便快速查找,Rowkey的設計(ji)非(fei)常重要。
Column Family︰列(lie)族,擁有一個名(ming)稱(chen)(string),包(bao)含一個或者多(duo)個相(xiang)關(guan)列(lie)
Column︰屬于某一個columnfamily,每條記錄可動態添加
Version Number︰類型為(wei)Long,默認xian)凳竅xi)統時間(jian)戳,可由用(yong)戶(hu)自(zi)定義(yi)
Value(Cell)︰一個cell由familyName:columnName唯一定義(yi)

2.物理視圖

盡管(guan)在概念視圖里,表可以被看(kan)成是一個稀疏的行的集合。但在物理上,它的是區分列(lie)族 存儲的。新的columns可以不經過聲(sheng)明直接加入一個列(lie)族.

Row Key

Time Stamp

Column Family anchor

"com.cnn.www"

t9

anchor:cnnsi.com = "CNN"

"com.cnn.www"

t8

anchor:my.look.ca = "CNN.com"

 

Row Key

Time Stamp

ColumnFamily "contents:"

"com.cnn.www"

t6

contents:html = "<html>..."

"com.cnn.www"

t5

contents:html = "<html>..."

"com.cnn.www"

t3

contents:html = "<html>..."

值dang)米 獾氖竊諫廈嫻母拍釷油賈zhong)空(kong)白cell在物理上是不存儲的mo) 蛭wei)根本(ben)jiu)揮斜匾 媧 R虼ci)若一個請(qing)求為(wei)要獲取t8時間(jian)的contents:html,他的結(jie)果就是qiang)鍘Oxiang)似的mo) 羥qing)求為(wei)獲取t9時間(jian)的anchor:my.look.ca,結(jie)果也(ye)是qiang)鍘5 牽 ru)果不hui)該(gai)魘奔jian),將會返回最(zui)新時間(jian)的行,每個最(zui)新的都會返回。例(li)如(ru),如(ru)果請(qing)求為(wei)獲取行鍵為(wei)"com.cnn.www",沒有指gai)魘奔jian)戳的話,活動的結(jie)果是t6下的contents:html,t9下的anchor:cnnsi.com和t8下anchor:my.look.ca。

對于hbase我一hui)庇幸桓 晌剩 base提供了修改和刪(shan)除的接口,但是hdfs本(ben)身很難實現(xian)修改和刪(shan)除(可以將文(wen)件(jian)塊從(cong)hdfs中(zhong)下載,進行修改再上傳(chuan)),那(na)麼hbase是如(ru)何實現(xian)快速的刪(shan)除與修改呢?實dao)噬顯Base中(zhong),修改和刪(shan)除數(shu)據都是增加1個新版(ban)本(ben)的數(shu)據(時間(jian)戳為(wei)最(zui)新),舊版(ban)本(ben)的數(shu)據並沒有發生變化,而實dao)噬系(xi)男薷暮蛻shan)除是在Hfile的合並階段(duan)實現(xian)的。

三、 Hbase優化

1. 預先que)智/strong>

默認情況下,在創建 HBase 表的時候會自(zi)動創建一個 Region 分區,當導(dao)入數(shu)據的時候,所有的 HBase 客(ke)戶(hu)端都向(xiang)這一個 Region 寫ci)shu)據,直到這個 Region 足夠大了才進行切分。一hui)摯梢約涌炫啃慈 俁鵲姆椒ㄊ峭 ?卻唇ㄒ恍┘kong)的 Regions,這樣當數(shu)據寫入 HBase 時,會按照 Region 分區情況,在集群內做數(shu)據的負載均衡(heng)。

2. Rowkey優化

HBase 中(zhong) Rowkey 是按照字典序(xu)存儲,因此(ci),設計(ji) Rowkey 時,要充分利(li)用(yong)men)判xu)特(te)點,將經常一起讀取的數(shu)據存儲到一塊,將最(zui)近(jin)可能會被訪(fang)問的數(shu)據放(fang)在一塊。

此(ci)外,Rowkey 若是遞增的生成,建議不要使(shi)用(yong)正序(xu)直接寫入 Rowkey,而是采用(yong) reverse 的方式反轉Rowkey,使(shi)得 Rowkey 大致(zhi)均衡(heng)分zhi)bu),這樣設計(ji)有個好(hao)處是能將 RegionServer 的負載均衡(heng),否則容易產生所有新數(shu)據都在一個 RegionServer 上堆積的現(xian)象(xiang),這一點還可以結(jie)合 table 的預切分一起設計(ji)。

3. 減少列(lie)族數(shu)量

不要在一張表里定義(yi)太多(duo)的 ColumnFamily。目前 Hbase 並不能很好(hao)的處理超過 2~3 個 ColumnFamily 的表。因為(wei)某個 ColumnFamily 在 flush 的時候,它鄰近(jin)的 ColumnFamily 也(ye)會因關(guan)聯效應被觸發 flush,最(zui)終導(dao)致(zhi)系(xi)統產生更(geng)多(duo)的 I/O。

4. 緩存策略

創建表的時候,可以通過 HColumnDescriptor.setInMemory(true) 將表放(fang)到 RegionServer 的緩存中(zhong),保證(zheng)在讀取的時候被 cache 命中(zhong)。

5. 設置存儲生命期

創建表的時候,可以通過 HColumnDescriptor.setTimeToLive(int timeToLive) 設置表中(zhong)數(shu)據的存儲生命期,過期數(shu)據將自(zi)動被刪(shan)除。

6. 硬盤配置

每台 RegionServer 管(guan)理 10~1000 個 Regions,每個 Region 在 1~2G,則每台 Server 最(zui)少要 10G,最(zui)大要1000*2G=2TB,考慮 3 備份,則要 6TB。方案一是用(yong) 3 塊 2TB 硬盤,二是用(yong) 12 塊 500G 硬盤,帶寬(kuan)足夠時,後者能提供更(geng)大的吞吐(tu)率,更(geng)細粒度的冗余備份,更(geng)快速的單盤故(gu)障恢(hui)復。

7. 分配合適的內存給RegionServer服務

在不影響其他服務的na)榭魷攏 醬笤膠hao)。例(li)如(ru)在 HBase 的 conf 目錄下的 hbase-env.sh 的最(zui)後添加 export HBASE_REGIONSERVER_OPTS="-Xmx16000m$HBASE_REGIONSERVER_OPTS”

其中(zhong) 16000m 為(wei)分配給 RegionServer 的內存大小。

8. 寫ci)shu)據的備份數(shu)

備份數(shu)與讀lie)閱?燒bi),與寫性能成反比(bi),且備份數(shu)影響高可用(yong)性。有兩種配置方式,一hui)質牆hdfs-site.xml拷貝(bei)到 hbase 的 conf 目錄下,然後在其中(zhong)添加或修改配置項 dfs.replication 的值為(wei)要設置的備份數(shu),這種zhong)薷畝運械HBase 用(yong)戶(hu)表都生效,另外一hui)址(zhi)絞劍 歉男HBase 代碼(ma),讓 HBase 支持針對列(lie)族設置備份數(shu),在創建表時,設置列(lie)族備份數(shu),默認為(wei) 3,此(ci)種備份數(shu)只對設置的列(lie)族生效。

9. WAL(預寫日志)

可設置開關(guan),表示 HBase 在寫ci)shu)據前用(yong)不用(yong)先寫日志,默認是打開,關(guan)掉會提高性能,但是如(ru)果系(xi)統出現(xian)故(gu)障(負責插入的 RegionServer 掛ye),數(shu)據可能會丟失(shi)。配置 WAL 在調用(yong) JavaAPI 寫入時,設置 Put 實例(li)的WAL,調用(yong) Put.setWriteToWAL(boolean)。

10. 批量寫

HBase 的 Put 支持單條插入,也(ye)支持批量插入,一般(ban)來ci)shuo)批量寫更(geng)快,節省來回的網絡(luo)開銷(xiao)。在客(ke)戶(hu)端shuo)饔yong)JavaAPI 時,先將批量kang)Put 放(fang)入一個 Put 列(lie)表,然後調用(yong) HTable 的 Put(Put 列(lie)表) 函數(shu)來批量寫。

11. 客(ke)戶(hu)端一次從(cong)服務器拉取的數(shu)量

通過配置一次拉去的較大的數(shu)據量kao)梢約跎倏ke)戶(hu)端獲取數(shu)據的時間(jian),但是它會佔用(yong)客(ke)戶(hu)端內存。有三個地方可進行配置︰

1)在 HBase 的 conf 配置文(wen)件(jian)中(zhong)進行配置 hbase.client.scanner.caching;

2)通過調用(yong) HTable.setScannerCaching(intscannerCaching) 進行配置;

3)通過調用(yong) Scan.setCaching(intcaching) 進行配置。三者的優先級(ji)越來越高。

12. RegionServer的na)肭蟠 /O線程數(shu)

較少的 IO 線程適用(yong)于處理單次請(qing)求內存消耗較高的 Big Put 場(chang)景 (大容量kang)?Put 或設置了較大 cache 的Scan,均屬于 Big Put) 或 ReigonServer 的內存比(bi)較緊張的場(chang)景。

較多(duo)的 IO 線程,適用(yong)于單次請(qing)求內存消耗低,TPS 要求 (每秒事務處理量 (TransactionPerSecond)) 非(fei)常高的場(chang)景。設置該(gai)值dang)氖焙潁 約囁嗇詿嫖wei)主要參考。

在 hbase-site.xml 配置文(wen)件(jian)中(zhong)配置項為(wei) hbase.regionserver.handler.count。

13. Region的大小設置

配置項為(wei) hbase.hregion.max.filesize,所屬配置文(wen)件(jian)為(wei) hbase-site.xml.,默認大小 256M。

在當前 ReigonServer 上xi)?Reigon 的最(zui)大存儲空(kong)間(jian),單個 Region 超過該(gai)值時,這個 Region 會被自(zi)動 split成更(geng)小的 Region。小 Region 對 split 和 compaction 友好(hao),因為(wei)拆分 Region 或 compact 小 Region 里的StoreFile 速度很快,內存佔用(yong)低。缺(que)點是 split 和 compaction 會很頻繁,特(te)別是數(shu)量較多(duo)的小 Region 不停地split, compaction,會導(dao)致(zhi)集群響應時間(jian)波(bo)動很大,Region 數(shu)量太多(duo)不僅給管(guan)理上帶來麻煩(fan),甚至會引(yin)發一些Hbase 的 bug。一般(ban) 512M 以下的都算小 Region。大 Region 則不太適合經常 split 和 compaction,因為(wei)做一次 compact 和 split 會產生較長時間(jian)的停頓,對應用(yong)的讀lie)蔥閱?chong)擊非(fei)常大。

此(ci)外,大 Region 意味著較大的 StoreFile,compaction 時對內存也(ye)是一個挑戰(zhan)jian)Hru)果你的應用(yong)場(chang)景中(zhong),某個時間(jian)點的訪(fang)問量較xi)停 na)麼在此(ci)時做 compact 和 split,既能順利(li)完(wan)成 split 和 compaction,又能保證(zheng)絕大多(duo)數(shu)時間(jian)平穩(wen)的讀lie)蔥閱塴ompaction 是無法避免(mian)的mo)plit 可以yuan)幼zi)動調整為(wei)手(shou)動。只要通過將這個參數(shu)值dang)鞔蟺僥掣齪苣汛 降(jiang)鬧擔 bi)如(ru) 100G,就可以間(jian)接禁用(yong)自(zi)動 split(RegionServer 不會對未到達 100G 的 Region 做split)。再配合 RegionSplitter 這個工具,在需要 split 時,手(shou)動 split。手(shou)動 split 在靈活性和穩(wen)定性上比(bi)起自(zi)動split 要高很多(duo),而且管(guan)理成本(ben)增加不多(duo),比(bi)較推薦 online 實時系(xi)統使(shi)用(yong)。內存方面,小 Region 在設置memstore 的大小值上比(bi)較靈活,大 Region 則過大過小都不行,過大會導(dao)致(zhi) flush 時 app 的 IO wait 增高,過小則因 StoreFile 過多(duo)影響讀lie)閱塴/p>

14. 操作系(xi)統參數(shu)

Linux系(xi)統最(zui)大可打開文(wen)件(jian)數(shu)一般(ban)默認xi)牟問shu)值是1024,如(ru)果你不進行修改並發量上來的時候會出現(xian)“Too Many Open Files”的錯誤,導(dao)致(zhi)整個HBase不可運行,你可以用(yong)ulimit -n 命令進行修改mo) 蛘 薷etc/security/limits.conf和/proc/sys/fs/file-max 的參數(shu),具體如(ru)何修改可以去Google 關(guan)鍵字 “linux limits.conf ”

15. Jvm配置

修改 hbase-env.sh 文(wen)件(jian)中(zhong)的配置參數(shu),根據你的機器硬bu)jian)和當前操作系(xi)統的JVM(32/64位)配置適當的參數(shu)

HBASE_HEAPSIZE 4000 HBase使(shi)用(yong)的 JVM 堆的大小

HBASE_OPTS "server XX:+UseConcMarkSweepGC"JVM GC 選項

HBASE_MANAGES_ZKfalse 是否使(shi)用(yong)Zookeeper進行分zhi)bu)式管(guan)理

16. 持久(jiu)化

重啟操作系(xi)統後HBase中(zhong)數(shu)據全(quan)無,你可以不做任何修改的na)榭魷攏 唇ㄒ徽瘧恚 匆惶跏shu)據進行,然後將機器重啟,重啟後你再進入HBase的shell中(zhong)使(shi)用(yong) list 命令查看(kan)當前所存在的表,一個都沒有了。是不是很杯具?沒有關(guan)系(xi)你可以在hbase/conf/hbase-default.xml中(zhong)設置hbase.rootdir的值,來設置文(wen)件(jian)的保存位hui)彌付ㄒ桓鑫wen)件(jian)夾(jia),例(li)如(ru)︰<value>file:///you/hbase-data/path</value>,你建立的HBase中(zhong)的表和數(shu)據就直接寫到了你的磁盤上,同樣你也(ye)可以指定你的分zhi)bu)式文(wen)件(jian)系(xi)統HDFS的路(lu)徑du)li)如(ru):hdfs://NAMENODE_SERVER:PORT/HBASE_ROOTDIR,這樣就tuo)吹攪四愕姆植(zhi)bu)式文(wen)件(jian)系(xi)統上了。

17. 緩沖(chong)區大小

hbase.client.write.buffer

這個參數(shu)可以設置寫入數(shu)據緩沖(chong)區的大小,當客(ke)戶(hu)端和服務器端傳(chuan)輸數(shu)據,服務器為(wei)了提高系(xi)統運行性能開闢一個寫的緩沖(chong)區來處理它,這個參數(shu)設置如(ru)果設置的大了,將會對系(xi)統的內存有一定的要求,直接影響系(xi)統的性能。

18. 掃描(miao)目錄表

hbase.master.meta.thread.rescanfrequency

定義(yi)多(duo)長時間(jian)HMaster對系(xi)統表 root 和 meta 掃描(miao)一次,這個參數(shu)可以設置的長一些,降(jiang)dang)拖xi)統的能耗。

19. split/compaction時間(jian)間(jian)隔

hbase.regionserver.thread.splitcompactcheckfrequency

這個參數(shu)是表示多(duo)久(jiu)去RegionServer服務器運行一次split/compaction的時間(jian)間(jian)隔,當bi)plit之前會先進行一個compact操作.這個compact操作可能是minorcompact也(ye)可能是major compact.compact後,會從(cong)所有的Store下的所有StoreFile文(wen)件(jian)最(zui)大的那(na)個取midkey.這個midkey可能並不處于全(quan)部數(shu)據的mid中(zhong).一個row-key的下面的數(shu)據可能會跨不同的HRegion。

20. 緩存在JVM堆中(zhong)分配的百分比(bi)

hfile.block.cache.size

指定HFile/StoreFile 緩存在JVM堆中(zhong)分配的百分比(bi),默認xian)凳.2,意思就是20%,而如(ru)果你設置成0,就表示對該(gai)選項屏蔽。

21. ZooKeeper客(ke)戶(hu)端同時訪(fang)問的並發連接you)shu)

hbase.zookeeper.property.maxClientCnxns

這項配置的選項就是從(cong)zookeeper中(zhong)來的mo) 硎ooKeeper客(ke)戶(hu)端同時訪(fang)問的並發連接you)shu),ZooKeeper對于HBase來ci)shuo)就是一個入口這個參數(shu)的值可以適當放(fang)大些。

22. memstores佔用(yong)堆的大小參數(shu)配置

hbase.regionserver.global.memstore.upperLimit

在RegionServer中(zhong)所有memstores佔用(yong)堆的大小參數(shu)配置,默認xian)凳.4,表示40%,如(ru)果設置為(wei)0,就是對選項進行屏蔽。

23. Memstore中(zhong)緩存寫入大小

hbase.hregion.memstore.flush.size

Memstore中(zhong)緩存的內容超過配置的範duan)?蠼 嶁吹醬排躺希 li)如(ru)︰刪(shan)除操作是先寫入MemStore里做個標記,指示那(na)個value, column 或 family等下是要刪(shan)除的mo)Base會定期對yuan)媧?wen)件(jian)做一個major compaction,在那(na)時HBase會把MemStore刷入一個新的HFile存儲文(wen)件(jian)中(zhong)。如(ru)果在一定時間(jian)範duan) 諉揮凶ajor compaction,而Memstore中(zhong)超出的範duan)?托(tuo)慈氪排躺狹恕/p>

Tag標簽︰架構  
  • 三分pk10官网

  • Directx11 游戲編程入門(men)教程
  • 專(zhuan)題主要學習(xi)DirectX的初級(ji)編程入門(men)學習(xi),對Directx11的入門(men)及初學者有...... 詳細
About IT165 - 廣告(gao)服務 - 隱私聲(sheng)明 - 版(ban)權申明 - 福建快3官网免(mian)責條款 - 網站地圖 - 網友投稿 - 聯系(xi)方式
本(ben)站內容來自(zi)于互聯網,僅供用(yong)于網絡(luo)技術學習(xi),學習(xi)中(zhong)請(qing)遵循相(xiang)關(guan)法律法規
三分pk10官网 | 下一页