Hbase日常运维
1.1 監(jiān)控Hbase運行狀況
1.1.1 操作系統(tǒng)
1.1.1.1 IO
1.群集網(wǎng)絡(luò)IO,磁盤IO,HDFS IO
IO越大說明文件讀寫操作越多。當(dāng)IO突然增加時,有可能:1.compact隊列較大,集群正在進行大量壓縮操作。
2.正在執(zhí)行mapreduce作業(yè)
可以通過CDH前臺查看整個集群綜合的數(shù)據(jù)或進入指定機器的前臺查看單臺機器的數(shù)據(jù):
1.Io wait
磁盤IO對集群的影響比較大,如果io wait時間過長需檢查系統(tǒng)或磁盤是否有異常。通常IO增加時io wait也會增加,現(xiàn)在FMS的機器正常情況io wait在50ms以下
跟主機相關(guān)的指標(biāo)可以在CDH前臺左上角先點“主機”選項卡然后選要查看的主機:
1.1.1.2 CPU
如果CPU占用過高有可能是異常情況引起集群資源消耗,可以通過其他指標(biāo)和日志來查看集群正在做什么。1.1.1.3 內(nèi)存
1.1.2 JAVA
GC 情況
regionserver長時間GC會影響集群性能并且有可能會造成假死的情況1.1.3 重要的hbase指標(biāo)
1.1.3.1 region情況
需要檢查
region的數(shù)量(總數(shù)和每臺regionserver上的region數(shù))
如果發(fā)現(xiàn)異常可以通過手動merge region和手動分配region來調(diào)整
從CDH前臺和master前臺以及regionServer的前臺都可以看到region數(shù)量,如master前臺:
在region server前臺可以看到storeFile大小:
1.1.3.2 緩存命中率
緩存命中率對hbase的讀有很大的影響,可以觀察這個指標(biāo)來調(diào)整blockcache的大小。
從regionserver web頁面可以看到block cache的情況:
1.1.3.3 讀寫請求數(shù)
通過讀寫請求數(shù)可以大概看出每臺regionServer的壓力,如果壓力分布不均勻,應(yīng)該檢查regionServer上的region以及其它指標(biāo)
master web上可以看到所以regionServer的讀寫請求數(shù)
regionServer上可以看到每個region的讀寫請求數(shù)
1.1.3.4 壓縮隊列
壓縮隊列存放的是正在壓縮的storefile,compact操作對hbase的讀寫影響較大
通過cdh的hbase圖表庫可以看到集群總的壓縮隊列大小:
可以通過CDH的hbase主頁查詢compact日志:
點擊“壓縮”進入:
1.1.3.5 刷新隊列
單個region的memstore寫滿(128M)或regionServer上所有region的memstore大小總合達到門限時會進行flush操作,flush操作會產(chǎn)生新的storeFile
同樣可以通過CDH的hbase前臺查看flush日志:
1.1.3.6 rpc調(diào)用隊列
沒有及時處理的rpc操作會放入rpc操作隊列,從rpc隊列可以看出服務(wù)器處理請求的情況
1.1.3.7 文件塊保存在本地的百分比
datanode和regionserver一般都部署在同一臺機器上,所以region server管理的region會優(yōu)先存儲在本地,以節(jié)省網(wǎng)絡(luò)開銷。如果block locality較低有可能是剛做過balance或剛重啟,經(jīng)過compact之后region的數(shù)據(jù)都會寫到當(dāng)前機器的datanode,block locality也會慢慢達到接近100:
1.1.3.8 內(nèi)存使用情況
內(nèi)存使用情況,主要可以看used Heap和memstore的大小,如果usedHeadp一直超過80-85%以上是比較危險的
memstore很小或很大也不正常
從region Server的前臺可以看到:
1.1.3.9 slowHLogAppendCount
寫HLog過慢(>1s)的操作次數(shù),這個指標(biāo)可以作為HDFS狀態(tài)好壞的判斷
在region Server前臺查看:
1.1.4 CDH檢查日志
CDH有強大的系統(tǒng)事件和日志搜索功能,每一個服務(wù)(如:hadoop,hbase)的主頁都提供了事件和告警的查詢,日常運維除了CDH主頁的告警外,需要查看這些事件以發(fā)現(xiàn)潛在的問題:
選擇“事件搜索”中的標(biāo)簽(“警報”、“嚴(yán)重”)可以進入相關(guān)的事件日志,如“嚴(yán)重”:
1.2 檢查數(shù)據(jù)一致性以及修復(fù)方法
數(shù)據(jù)一致性是指:
1.每個region都被正確的分配到一臺regionserver上,并且region的位置信息及狀態(tài)都是正確的。
2.每個table都是完整的,每一個可能的rowkey 都可以對應(yīng)到唯一的一個region.
1.2.1 檢查
hbase hbck
注:有時集群正在啟動或region正在做split操作,會造成數(shù)據(jù)不一致
hbase hbck -details
加上–details會列出更詳細的檢查信息,包括所以正在進行的split任務(wù)
hbase hbck Table1 Table2
如果只想檢查指定的表,可以在命令后面加上表名,這樣可以節(jié)省操作時間
CDH
通過CDH提供的檢查報告也可以看到hbck的結(jié)果,日常只需要看CDH hbck的報告即可:
選擇“最近的Hbck結(jié)果”:
1.2.2 修復(fù)
1.2.2.1 局部的修復(fù)
如果出現(xiàn)數(shù)據(jù)不一致,修復(fù)時要最大限度的降低可能出現(xiàn)的風(fēng)險,使用以下命令對region進行修復(fù)風(fēng)險較低:
1.2.2.1.1 hbase hbck -fixAssignments
修復(fù)region沒有分配(unassigned),錯誤分配(incorrectly assigned)以及多次分配(multiply assigned)的問題
1.2.2.1.2 hbase hbck -fixMeta
刪除META表里有記錄但HDFS里沒有數(shù)據(jù)記錄的region
添加HDFS里有數(shù)據(jù)但是META表里沒有記錄的region到META表
1.2.2.1.3 hbase hbck -repairHoles
等價于:hbase hbck -fixAssignments -fixMeta -fixHdfsHoles
-fixHdfsHoles的作用:
如果rowkey出現(xiàn)空洞,即相鄰的兩個region的rowkey不連續(xù),則使用這個參數(shù)會在HDFS里面創(chuàng)建一個新的region。創(chuàng)建新的region之后要使用-fixMeta和-fixAssignments參數(shù)來使用掛載這個region,所以一般和前兩個參數(shù)一起使用
1.2.2.2 Region重疊修復(fù)
進行以下操作非常危險,因為這些操作會修改文件系統(tǒng),需要謹(jǐn)慎操作!
進行以下操作前先使用hbck –details查看詳細問題,如果需要進行修復(fù)先停掉應(yīng)用,如果執(zhí)行以下命令時同時有數(shù)據(jù)操作可能會造成不可期的異常。
1.2.2.2.1 hbase hbck -fixHdfsOrphans
將文件系統(tǒng)中的沒有metadata文件(.regioninfo)的region目錄加入到hbase中,即創(chuàng)建.regioninfo目錄并將region分配到regionser
1.2.2.2.2 hbase hbck -fixHdfsOverlaps
通過兩種方式可以將rowkey有重疊的region合并:
merge:將重疊的region合并成一個大的region
如果重疊的數(shù)據(jù)很大,直接合并成一個大的region會產(chǎn)生大量的split和compact操作,可以通過以下參數(shù)控制region過大:
-maxMerge <n> 合并重疊region的最大數(shù)量
-sidelineBigOverlaps 假如有大于maxMerge個數(shù)的 region重疊, 則采用sideline方式處理與其它region的重疊.
-maxOverlapsToSideline <n> 如果用sideline方式處理重疊region,最多sideline n個region .
1.2.2.2.3 hbase hbck -repair
以下命令的縮寫: hbase hbck -fixAssignments -fixMeta -fixHdfsHoles -fixHdfsOrphans -fixHdfsOverlaps -fixVersionFile –sidelineBigOverlaps 可以指定表名:
hbase hbck -repair Table1 Table2
1.2.2.2.4 hbase hbck -fixMetaOnly –fixAssignments
如果只有META表的region不一致,則可以使用這個命令修復(fù)
1.2.2.2.5 hbase hbck –fixVersionFile
Hbase的數(shù)據(jù)文件啟動時需要一個version file,如果這個文件丟失,可以用這個命令來新建一個,但是要保證hbck的版本和Hbase集群的版本是一樣的
1.2.2.2.6 hbase org.apache.hadoop.hbase.util.hbck.OfflineMetaRepair
如果ROOT表和META表都出問題了Hbase無法啟動,可以用這個命令來創(chuàng)建新的ROOT和META表。
這個命令的前提是Hbase已經(jīng)關(guān)閉,執(zhí)行時它會從hbase的home目錄加載hbase的相關(guān)信息(.regioninfo),如果表的信息是完整的就會創(chuàng)建新的root和meta目錄及數(shù)據(jù)
1.2.2.2.7 hbase hbck –fixSplitParents
當(dāng)region做split操作的時候,父region會被自動清除掉。但是有時候子region在父region被清除之前又做了split。造成有些延遲離線的父region存在于META表和HDFS中,但是沒有部署,HBASE又不能清除他們。這種情況下可以使用此命令重置這些在META表中的region為在線狀態(tài)并且沒有split。然后就可以使用之前的修復(fù)命令把這個region修復(fù)
1.3 手動merge region
進行操作前先將balancer關(guān)閉,操作完成后再打開balancer
經(jīng)過一段時間的運行之后有可能會產(chǎn)生一些很小的region,需要定期檢查這些region并將它們和相鄰的region合并以減少系統(tǒng)的總region數(shù),減少管理開銷
合并方法:找到需要合并的region的encoded name
進入hbase shell
1.4 手動分配region
如果發(fā)現(xiàn)臺regionServer資源占用特別高,可以檢查這臺regionserver上的region是否存在過多比較大的region,通過hbase shell將部分比較大的region分配給其他不是很忙的regions server:
move ‘regionId’,’serverName’
例:
move '54fca23d09a595bd3496cd0c9d6cae85','vmcnod05,60020,1390211132297'
1.5 手動major_compact
進行操作前先將balancer關(guān)閉,操作完成后再打開balancer
選擇一個系統(tǒng)比較空閑的時間手工major_compact,如果hbase更新不是太頻繁,可以一個星期對所有表做一次 major_compact,這個可以在做完一次major_compact后,觀看所有的storefile數(shù)量,如果storefile數(shù)量增加到 major_compact后的storefile的近二倍時,可以對所有表做一次major_compact,時間比較長,操作盡量避免高鋒期
注:fms現(xiàn)在生產(chǎn)上開啟了自動major_compact,不需要做手動major compact
1.6 balance_switch
balance_switch true 打開balancer
balance_switch flase 關(guān)閉balancer
配置master是否執(zhí)行平衡各個regionserver的region數(shù)量,當(dāng)我們需要維護或者重啟一個regionserver時,會關(guān)閉balancer,這樣就使得region在regionserver上的分布不均,這個時候需要手工的開啟balance。
1.7 regionserver重啟
graceful_stop.sh --restart --reload --debug nodename
進行操作前先將balancer關(guān)閉,操作完成后再打開balancer
這個操作是平滑的重啟regionserver進程,對服務(wù)不會有影響,他會先將需要重啟的regionserver上面的所有 region遷移到其它的服務(wù)器,然后重啟,最后又會將之前的region遷移回來,但我們修改一個配置時,可以用這種方式重啟每一臺機子,對于hbase regionserver重啟,不要直接kill進程,這樣會造成在zookeeper.session.timeout這個時間長的中斷,也不要通過 bin/hbase-daemon.sh stop regionserver去重啟,如果運氣不太好,-ROOT-或者.META.表在上面的話,所有的請求會全部失敗
1.8 regionserver關(guān)閉下線
bin/graceful_stop.sh nodename
進行操作前先將balancer關(guān)閉,操作完成后再打開balancer
和上面一樣,系統(tǒng)會在關(guān)閉之前遷移所有region,然后stop進程。
1.9 flush表
所有memstore刷新到hdfs,通常如果發(fā)現(xiàn)regionserver的內(nèi)存使用過大,造成該機的 regionserver很多線程block,可以執(zhí)行一下flush操作,這個操作會造成hbase的storefile數(shù)量劇增,應(yīng)盡量避免這個操 作,還有一種情況,在hbase進行遷移的時候,如果選擇拷貝文件方式,可以先停寫入,然后flush所有表,拷貝文件
1.10 Hbase遷移
1.10.1 copytable方式
bin/hbase org.apache.hadoop.hbase.mapreduce.CopyTable --peer.adr=zookeeper1,zookeeper2,zookeeper3:/hbase 'testtable'
這個操作需要添加hbase目錄里的conf/mapred-site.xml,可以復(fù)制hadoop的過來。
1.10.2 Export/Import
bin/hbase org.apache.hadoop.hbase.mapreduce.Export testtable /user/testtable [versions] [starttime] [stoptime]
bin/hbase org.apache.hadoop.hbase.mapreduce.Import testtable /user/testtable
1.10.3 直接拷貝hdfs對應(yīng)的文件
首先拷貝hdfs文件,如bin/hadoop distcp hdfs://srcnamenode:9000/hbase/testtable/ hdfs://distnamenode:9000/hbase/testtable/
然后在目的hbase上執(zhí)行bin/hbase org.jruby.Main bin/add_table.rb /hbase/testtable
生成meta信息后,重啟hbase
2 Hadoop日常運維
2.1 監(jiān)控Hadoop運行狀況
nameNode、ResourseManager內(nèi)存(namenode要有足夠內(nèi)存)
DataNode和NodeManager運行狀態(tài)
磁盤使用情況
2.2 檢查HDFS文件健康狀況
命令:hadoop fsck
2.3 開啟垃圾箱(trash)功能
trash功能它默認(rèn)是關(guān)閉的,開啟后,被你刪除的數(shù)據(jù)將會mv到操作用戶目錄的".Trash"文件夾,可以配置超過多長時間,系統(tǒng)自動刪除過期數(shù)據(jù)。這樣一來,當(dāng)操作失誤的時候,可以把數(shù)據(jù)mv回來
轉(zhuǎn)載于:https://blog.51cto.com/ybs000/2121364
總結(jié)
- 上一篇: 玩转MaxCompute studio
- 下一篇: kali 解决Metasploit拿到s