Hbase運(yùn)維手冊(cè).doc_第1頁
Hbase運(yùn)維手冊(cè).doc_第2頁
Hbase運(yùn)維手冊(cè).doc_第3頁
Hbase運(yùn)維手冊(cè).doc_第4頁
Hbase運(yùn)維手冊(cè).doc_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Hbase運(yùn)維手冊(cè)1.region情況需要檢查1. region的數(shù)量(總數(shù)和每臺(tái)regionserver上的region數(shù))2. region的大小如果發(fā)現(xiàn)異??梢酝ㄟ^手動(dòng)merge region和手動(dòng)分配region來調(diào)整從CDH前臺(tái)和master前臺(tái)以及regionServer的前臺(tái)都可以看到region數(shù)量,如master前臺(tái): 在region server前臺(tái)可以看到storeFile大?。?.緩存命中率緩存命中率對(duì)hbase的讀有很大的影響,可以觀察這個(gè)指標(biāo)來調(diào)整blockcache的大小。從regionserver web頁面可以看到block cache的情況: 注意:HBase上Regionserver的內(nèi)存分為兩個(gè)部分,一部分作為Memstore,主要用來寫;另外一部分作為BlockCache,主要用于讀。 寫請(qǐng)求會(huì)先寫入Memstore,Regionserver會(huì)給每個(gè)region提供列族數(shù)提供一定數(shù)量的Memstore,當(dāng)Memstore滿64MB以后,會(huì)啟動(dòng) flush刷新到磁盤。當(dāng)Memstore的總大小超過限制時(shí)(heapsize * hbase.regionserver.global.memstore.upperLimit * 0.9),會(huì)強(qiáng)行啟動(dòng)flush進(jìn)程,從最大的Memstore開始flush直到低于限制。 讀請(qǐng)求先到Memstore中查數(shù)據(jù),查不到就到BlockCache中查,再查不到就會(huì)到磁盤上讀,并把讀的結(jié)果放入BlockCache。由于BlockCache采用的是LRU策略,因此BlockCache達(dá)到上限(heapsize * hfile.block.cache.size * 0.85)后,會(huì)啟動(dòng)淘汰機(jī)制,淘汰掉最老的一批數(shù)據(jù)。一個(gè)Regionserver上有一個(gè)BlockCache和N個(gè)Memstore,它們的大小之和不能大于等于heapsize * 0.8,否則HBase不能正常啟動(dòng)。默認(rèn)配置下,BlockCache為0.2,而Memstore為0.4。在注重讀響應(yīng)時(shí)間的應(yīng)用場(chǎng)景下,可以將 BlockCache設(shè)置大些,Memstore設(shè)置小些,以加大緩存的命中率。HBase RegionServer包含三個(gè)級(jí)別的Block優(yōu)先級(jí)隊(duì)列: Single:如果一個(gè)Block第一次被訪問,則放在這一優(yōu)先級(jí)隊(duì)列中; Multi:如果一個(gè)Block被多次訪問,則從Single隊(duì)列移到Multi隊(duì)列中; InMemory:如果一個(gè)Block是inMemory的,則放到這個(gè)隊(duì)列中。以上將Cache分級(jí)思想的好處在于: 首先,通過inMemory類型Cache,可以有選擇地將in-memory的column families放到RegionServer內(nèi)存中,例如Meta元數(shù)據(jù)信息; 通過區(qū)分Single和Multi類型Cache,可以防止由于Scan操作帶來的Cache頻繁顛簸,將最少使用的Block加入到淘汰算法中。默認(rèn)配置下,對(duì)于整個(gè)BlockCache的內(nèi)存,又按照以下百分比分配給Single、Multi、InMemory使用:0.25、0.50和0.25。注意,其中InMemory隊(duì)列用于保存HBase Meta表元數(shù)據(jù)信息,因此如果將數(shù)據(jù)量很大的用戶表設(shè)置為InMemory的話,可能會(huì)導(dǎo)致Meta表緩存失效,進(jìn)而對(duì)整個(gè)集群的性能產(chǎn)生影響。3.讀寫請(qǐng)求數(shù)通過讀寫請(qǐng)求數(shù)可以大概看出每臺(tái)regionServer的壓力,如果壓力分布不均勻,應(yīng)該檢查regionServer上的region以及其它指標(biāo) 4.壓縮隊(duì)列壓縮隊(duì)列存放的是正在壓縮的storefile,compact操作對(duì)hbase的讀寫影響較大通過cdh的hbase圖表庫可以看到集群總的壓縮隊(duì)列大?。嚎梢酝ㄟ^CDH的hbase主頁查詢compact日志:點(diǎn)擊“壓縮”進(jìn)入:5.刷新隊(duì)列單個(gè)region的memstore寫滿(128M)或regionServer上所有region的memstore大小總合達(dá)到門限時(shí)會(huì)進(jìn)行flush操作,flush操作會(huì)產(chǎn)生新的storeFile同樣可以通過CDH的hbase前臺(tái)查看flush日志:6.rpc調(diào)用隊(duì)列沒有及時(shí)處理的rpc操作會(huì)放入rpc操作隊(duì)列,從rpc隊(duì)列可以看出服務(wù)器處理請(qǐng)求的情況 7.文件塊保存在本地的百分比datanode和regionserver一般都部署在同一臺(tái)機(jī)器上,所以region server管理的region會(huì)優(yōu)先存儲(chǔ)在本地,以節(jié)省網(wǎng)絡(luò)開銷。如果block locality較低有可能是剛做過balance或剛重啟,經(jīng)過compact之后region的數(shù)據(jù)都會(huì)寫到當(dāng)前機(jī)器的datanode,block locality也會(huì)慢慢達(dá)到接近100:8.內(nèi)存使用情況內(nèi)存使用情況,主要可以看used Heap和memstore的大小,如果usedHeadp一直超過80-85%以上是比較危險(xiǎn)的memstore很小或很大也不正常從region Server的前臺(tái)可以看到: 9.檢查數(shù)據(jù)一致性以及修復(fù)方法數(shù)據(jù)一致性是指:1. 每個(gè)region都被正確的分配到一臺(tái)regionserver上,并且region的位置信息及狀態(tài)都是正確的。2. 每個(gè)table都是完整的,每一個(gè)可能的rowkey都可以對(duì)應(yīng)到唯一的一個(gè)regionhbase hbck注:有時(shí)集群正在啟動(dòng)或region正在做split操作,會(huì)造成數(shù)據(jù)不一致hbase hbck -details加上details會(huì)列出更詳細(xì)的檢查信息,包括所以正在進(jìn)行的split任務(wù)hbase hbck Table1 Table2如果只想檢查指定的表,可以在命令后面加上表名,這樣可以節(jié)省操作時(shí)間CDH通過CDH提供的檢查報(bào)告也可以看到hbck的結(jié)果,日常只需要看CDH hbck的報(bào)告即可: 選擇“最近的Hbck結(jié)果”: 1)局部的修復(fù)如果出現(xiàn)數(shù)據(jù)不一致,修復(fù)時(shí)要最大限度的降低可能出現(xiàn)的風(fēng)險(xiǎn),使用以下命令對(duì)region進(jìn)行修復(fù)風(fēng)險(xiǎn)較低: hbase hbck -fixAssignments 修復(fù)region沒有分配(unassigned),錯(cuò)誤分配(incorrectly assigned)以及多次分配(multiply assigned)的問題 hbase hbck -fixMeta 刪除META表里有記錄但HDFS里沒有數(shù)據(jù)記錄的region 添加HDFS里有數(shù)據(jù)但是META表里沒有記錄的region到META表 hbase hbck -repairHoles 等價(jià)于:hbase hbck -fixAssignments -fixMeta -fixHdfsHoles -fixHdfsHoles的作用: 如果rowkey出現(xiàn)空洞,即相鄰的兩個(gè)region的rowkey不連續(xù),則使用這個(gè)參數(shù)會(huì)在HDFS里面創(chuàng)建一個(gè)新的region。創(chuàng)建新的region之后要使用-fixMeta和-fixAssignments參數(shù)來使用掛載這個(gè)region,所以一般和前兩個(gè)參數(shù)一起使用 2)Region重疊修復(fù) 進(jìn)行以下操作非常危險(xiǎn),因?yàn)檫@些操作會(huì)修改文件系統(tǒng),需要謹(jǐn)慎操作! 進(jìn)行以下操作前先使用hbck details查看詳細(xì)問題,如果需要進(jìn)行修復(fù)先停掉應(yīng)用,如果執(zhí)行以下命令時(shí)同時(shí)有數(shù)據(jù)操作可能會(huì)造成不可期的異常。 hbase hbck -fixHdfsOrphans 將文件系統(tǒng)中的沒有metadata文件(.regioninfo)的region目錄加入到hbase中,即創(chuàng)建.regioninfo目錄并將region分配到regionser hbase hbck -fixHdfsOverlaps 通過兩種方式可以將rowkey有重疊的region合并: 1. merge:將重疊的region合并成一個(gè)大的region 2. sideline:將region重疊的部分去掉,并將重疊的數(shù)據(jù)先寫入到臨時(shí)文件,然后再導(dǎo)入進(jìn)來。 如果重疊的數(shù)據(jù)很大,直接合并成一個(gè)大的region會(huì)產(chǎn)生大量的split和compact操作,可以通過以下參數(shù)控制region過大: -maxMerge 合并重疊region的最大數(shù)量 -sidelineBigOverlaps 假如有大于maxMerge個(gè)數(shù)的region重疊,則采用sideline方式處理與其它region的重疊. -maxOverlapsToSideline 如果用sideline方式處理重疊region,最多sideline n個(gè)region . hbase hbck -repair 以下命令的縮寫:hba hbase hbck -fixAssignments -fixMeta -fixHdfsHoles -fixHdfsOrphans -fixHdfsOverlaps -fixVersionFile sidelineBigOverlaps 可以指定表名:hba hbase hbck -repair Table1 Table2 hbase hbck -fixMetaOnly fixAssignments 如果只有META表的region不一致,則可以使用這個(gè)命令修復(fù) hbase hbck fixVersionFile Hbase的數(shù)據(jù)文件啟動(dòng)時(shí)需要一個(gè)version file,如果這個(gè)文件丟失,可以用這個(gè)命令來新建一個(gè),但是要保證hbck的版本和Hbase集群的版本是一樣的 hbase org.apache.hadoop.hbase.util.hbck.OfflineMetaRepair 如果ROOT表和META表都出問題了Hbase無法啟動(dòng),可以用這個(gè)命令來創(chuàng)建新的ROOT和META表。 這個(gè)命令的前提是Hbase已經(jīng)關(guān)閉,執(zhí)行時(shí)它會(huì)從hbase的home目錄加載hbase的相關(guān)信息(.regioninfo),如果表的信息是完整的就會(huì)創(chuàng)建新的root和meta目錄及數(shù)據(jù) hbase hbck fixSplitParents 當(dāng)region做split操作的時(shí)候,父region會(huì)被自動(dòng)清除掉。但是有時(shí)候子region在父region被清除之前又做了split。造成有些延遲離線的父region存在于META表和HDFS中,但是沒有部署,HBASE又不能清除他們。這種情況下可以 使用此命令重置這些在META表中的region為在線狀態(tài)并且沒有split。然后就可以使用之前的修復(fù)命令把這個(gè)region修復(fù) 10.手動(dòng)merge region進(jìn)行操作前先將balancer關(guān)閉,操作完成后再打開balancer經(jīng)過一段時(shí)間的運(yùn)行之后有可能會(huì)產(chǎn)生一些很小的region,需要定期檢查這些region并將它們和相鄰的region合并以減少系統(tǒng)的總region數(shù),減少管理開銷 合并方法:1. 找到需要合并的region的encoded name2. 進(jìn)入hbase shell3. 執(zhí)行merge_region region1,region2 手動(dòng)分配region如果發(fā)現(xiàn)臺(tái)regionServer資源占用特別高,可以檢查這臺(tái)regionserver上的region是否存在過多比較大的region,通過hbase shell將部分比較大的region分配給其他不是很忙的regions server:move encodeRegionName, ServerName #encodeRegionName指的regioName后面的編碼,ServerName指的是master-status的Region Servers列表例:move 24d9eef6ba5616b1a60180503e62bae7,DN1,60020,1429840460046手動(dòng)major_compact進(jìn)行操作前先將balancer關(guān)閉,操作完成后再打開balancer選擇一個(gè)系統(tǒng)比較空閑的時(shí)間手工major_compact,如果hbase更新不是太頻繁,可以一個(gè)星期對(duì)所有表做一次 major_compact,這個(gè)可以在做完一次major_compact后,觀看所有的storefile數(shù)量,如果storefile數(shù)量增加到 major_compact后的storefile的近二倍時(shí),可以對(duì)所有表做一次major_compact,時(shí)間比較長,操作盡量避免高鋒期注:fms現(xiàn)在生產(chǎn)上開啟了自動(dòng)major_compact,不需要做手動(dòng)major compactbalance_switchbalance_switch true 打開balancerbalance_switch flase 關(guān)閉balancer配置master是否執(zhí)行平衡各個(gè)regionserver的region數(shù)量,當(dāng)我們需要維護(hù)或者重啟一個(gè)regionserver時(shí),會(huì)關(guān)閉balancer,這樣就使得region在regionserver上的分布不均,這個(gè)時(shí)候需要手工的開啟balance。regionserver重啟 graceful_stop.sh -restart -reload -debugnodename進(jìn)行操作前先將balancer關(guān)閉,操作完成后再打開balancer這個(gè)操作是平滑的重啟regionserver進(jìn)程,對(duì)服務(wù)不會(huì)有影響,他會(huì)先將需要重啟的regionserver上面的所有region遷移到其它的服務(wù)器,然后重啟,最后又會(huì)將之前的region遷移回來,但我們修改一個(gè)配置時(shí),可以用這種方式重啟每一臺(tái)機(jī) 子,對(duì)于hbase regionserver重啟,不要直接kill進(jìn)程,這樣會(huì)造成在zookeeper.session.timeout這個(gè)時(shí)間長的中斷,也不要通過bin/hbase-daemon.sh stop regionserver去重啟,如果運(yùn)氣不太好,-ROOT-或者.META.表在上面的話,所有的 請(qǐng)求會(huì)全部失敗regionserver關(guān)閉下線bin/graceful_stop.sh nodename進(jìn)行操作前先將balancer關(guān)閉,操作完成后再打開balancer和上面一樣,系統(tǒng)會(huì)在關(guān)閉之前遷移所有region,然后stop進(jìn)程。flush表所有memstore刷新到hdfs,通常如果發(fā)現(xiàn)regionserver的內(nèi)存使用過大,造成該機(jī)的 regionserver很多線程block,可以執(zhí)行一下flush操作,這個(gè)操作會(huì)造成hbase的storefile數(shù)量劇增,應(yīng)盡量避免這個(gè)操 作,還有一種情況,在hbase進(jìn)行遷移的時(shí)候,如果選擇拷貝文件方式,可以先停寫入,然后flush所有表,拷貝文件強(qiáng)制splitHbase 允許客戶端強(qiáng)制執(zhí)行split,在hbase shell中執(zhí)行以下命令: split forced_table, b /其中forced_table 為要split的table , b 為split 點(diǎn)region splits執(zhí)行過程:region server處理寫請(qǐng)求的時(shí)候,會(huì)先寫入memstore,當(dāng)memstore 達(dá)到一定大小的時(shí)候,會(huì)寫入磁盤成為一個(gè)store file。這個(gè)過程叫做 memstore flush。當(dāng)store files 堆積到一定大小的時(shí)候,region server 會(huì) 執(zhí)行compact操作,把他們合成一個(gè)大的文件。 當(dāng)每次執(zhí)行完flush 或者compact操作,都會(huì)判斷是否需要split。當(dāng)發(fā)生split的時(shí)候,會(huì)生成兩個(gè)region A 和 region B但是parent region數(shù)據(jù)file并不會(huì)發(fā)生復(fù)制等操作,而是region A 和region B 會(huì)有這些file的引用。這些引用文件會(huì)在下次發(fā)生compact操作的時(shí)候清理掉,并且當(dāng)region中有引用文件的時(shí)候是不會(huì)再進(jìn)行split操作的。這個(gè)地方需要注意一下:(大量的寫入會(huì)刷大量的HFile,一個(gè)region就會(huì)對(duì)這大量的hfile進(jìn)行compact操作。如果這時(shí)候觸發(fā)了split操作,這個(gè)region會(huì)成為父region,而兩個(gè)子region會(huì)保留父region的引用文件。而在這其間,子region會(huì)繼續(xù)寫入數(shù)據(jù)。那么又可能觸發(fā)子region的compact,這里的關(guān)鍵點(diǎn)來了子region如果做compact的文件都是新寫入的文件,而遲遲不去compact父region 引用的文件,會(huì)導(dǎo)致一個(gè)問題就是這個(gè)子region無法被split掉了(因?yàn)楹懈竢egion引用的region是不能被split的)。那么子region越來越大,由于寫入文件數(shù)量急劇增長,父region的ref文件總也得不到機(jī)會(huì)compact,就形成了大region的惡性循環(huán)情況由于region太大,compact無法完成,但是由于compact無法完成導(dǎo)致region無法split,無法分?jǐn)俢ompact的壓力給其他regionserver。)雖然split region操作是region server單獨(dú)確定的,但是split過程必須和很多其他部件合作。region server 在split開始前和結(jié)束前通知master,并且需要更新.META.表,這樣,客戶端就能知道有新的region。在hdfs中重新排列目錄結(jié)構(gòu)和數(shù)據(jù)文件。split是一個(gè)復(fù)雜的操作。在split region的時(shí)候會(huì)記錄當(dāng)前執(zhí)行的狀態(tài),當(dāng)出錯(cuò)的時(shí)候,會(huì)根據(jù)狀態(tài)進(jìn)行回滾。下圖表示split中,執(zhí)行的過程。(紅色線表示region server 或者master的操作,綠色線表示client的操作。)1.region server 決定split region,第一步,region server在zookeeper中創(chuàng)建在/hbase/region-in-transition/region-name 目錄下,創(chuàng)建一個(gè)znode,狀態(tài)為SPLITTING.2.因?yàn)閙aster有對(duì)region-in-transition 的znode做監(jiān)聽,所以,mater的得知parent region需要split3.region server 在hdfs的parent region的目錄下創(chuàng)建一個(gè)名為“.splits”的子目錄4.region server 關(guān)閉parent region。強(qiáng)制flush緩存,并且在本地?cái)?shù)據(jù)結(jié)構(gòu)中標(biāo)記region為下線狀態(tài)。如果這個(gè)時(shí)候客戶端剛好請(qǐng)求到parent region,會(huì)拋出NotServingRegionException。這時(shí)客戶端會(huì)進(jìn)行補(bǔ)償性重試。5.region server在.split 目錄下分別為兩個(gè)daughter region創(chuàng)建目錄和必要的數(shù)據(jù)結(jié)構(gòu)。然后創(chuàng)建兩個(gè)引用文件指向parent regions的文件。6.region server 在HDFS中,創(chuàng)建真正的region目錄,并且把引用文件移到對(duì)應(yīng)的目錄下。7.region server 發(fā)送一個(gè)put的請(qǐng)求到.META.表中,并且在.META.表中設(shè)置parent region為下線狀態(tài),并且在parent region對(duì)應(yīng)的row中兩個(gè)daughter region的信息。但是這個(gè)時(shí)候在.META.表中daughter region 還不是獨(dú)立的row。這個(gè)時(shí)候如果client scan .META.表,會(huì)發(fā)現(xiàn)parent region正在split,但是client還看不到daughter region的信息。當(dāng)這個(gè)put 成功之后,parent region split會(huì)被正在的執(zhí)行。如果在 RPC 成功之前 region server 就失敗了,master和下次打開parent region的region server 會(huì)清除關(guān)于這次split的臟狀態(tài)。但是當(dāng)RPC返回結(jié)果給到parent region ,即.META.成功更新之后,region split的流程還會(huì)繼續(xù)進(jìn)行下去。相當(dāng)于是個(gè)補(bǔ)償機(jī)制,下次在打開這個(gè)parent region的時(shí)候會(huì)進(jìn)行相應(yīng)的清理操作。8.region server 打開兩個(gè)daughter region接受寫操作。9.region server 在.META.表中增加daughters A 和 B region的相關(guān)信息,在這以后,client就能發(fā)現(xiàn)這兩個(gè)新的regions并且能發(fā)送請(qǐng)求到這兩個(gè)新的region了。client本地具體有.META.表的緩存,當(dāng)他們?cè)L問到parent region的時(shí)候,發(fā)現(xiàn)parent region下線了,就會(huì)重新訪問.META.表獲取最新的信息,并且更新本地緩存。10.region server 更新

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論