面試題百日百刷-HBase HRegionServer宕機(jī)如何處理
鎖屏面試題百日百刷,每個(gè)工作日?qǐng)?jiān)持更新面試題。鎖屏面試題app、小程序現(xiàn)已上線,官網(wǎng)地址:https://www.demosoftware.cn。已收錄了每日更新的面試題的所有內(nèi)容,還包含特色的解鎖屏幕復(fù)習(xí)面試題、每日編程題目郵件推送等功能。讓你在面試中先人一步!接下來(lái)的是今日的面試題:
1.HBase的導(dǎo)入導(dǎo)出方式?
1)導(dǎo)入:bin/hbase org.apache.hadoop.hbase.mapreduce.Driver import 表名 路徑
路徑:來(lái)源
本地路徑?file:///path
HDFS hdfs://cluster1/path
2)導(dǎo)出:bin/hbase org.apache.hadoop.hbase.mapreduce.Driver export 表名 路徑
路徑:目的地
本地路徑?file:///path
HDFS hdfs://cluster1/path
2.Region如何預(yù)建分區(qū)?
預(yù)分區(qū)的目的主要是在創(chuàng)建表的時(shí)候指定分區(qū)數(shù),提前規(guī)劃表有多個(gè)分區(qū),以及每個(gè)分區(qū)的區(qū)間范圍,這樣在存儲(chǔ)的時(shí)候rowkey按照分區(qū)的區(qū)間存儲(chǔ),可以避免region熱點(diǎn)問(wèn)題。
通常有兩種方案:
方案1:shell 方法
create 'tb_splits', {NAME => 'cf',VERSIONS=> 3},{SPLITS => ['10','20','30']}
方案2: JAVA程序控制
· 取樣,先隨機(jī)生成一定數(shù)量的rowkey,將取樣數(shù)據(jù)按升序排序放到一個(gè)集合里;
· 根據(jù)預(yù)分區(qū)的region個(gè)數(shù),對(duì)整個(gè)集合平均分割,即是相關(guān)的splitKeys;
· HBaseAdmin.createTable(HTableDescriptor tableDescriptor,byte[][]splitkeys)可以指定預(yù)分區(qū)的splitKey,即是指定region間的rowkey臨界值。
3.HRegionServer宕機(jī)如何處理?
1)ZooKeeper會(huì)監(jiān)控HRegionServer的上下線情況,當(dāng)ZK發(fā)現(xiàn)某個(gè)HRegionServer宕機(jī)之后會(huì)通知HMaster
進(jìn)行失效備援;
2)該HRegionServer會(huì)停止對(duì)外提供服務(wù),就是它所負(fù)責(zé)的region暫時(shí)停止對(duì)外提供服務(wù);
3)HMaster會(huì)將該HRegionServer所負(fù)責(zé)的region轉(zhuǎn)移到其他HRegionServer上,并且會(huì)對(duì)HRegionServer上存在memstore中還未持久化到磁盤中的數(shù)據(jù)進(jìn)行恢復(fù);
4) 這個(gè)恢復(fù)的工作是由WAL重播來(lái)完成,這個(gè)過(guò)程如下:
· wal實(shí)際上就是一個(gè)文件,存在/hbase/WAL/對(duì)應(yīng)RegionServer路徑下。
· 宕機(jī)發(fā)生時(shí),讀取該RegionServer所對(duì)應(yīng)的路徑下的wal文件,然后根據(jù)不同的region切分成不同的臨時(shí)文件recover.edits。
· 當(dāng)region被分配到新的RegionServer中,RegionServer讀取region時(shí)會(huì)進(jìn)行是否存在recover.edits,如果有則進(jìn)行恢復(fù)。
4.HBase讀寫流程?
讀:
① HRegionServer保存著meta表以及表數(shù)據(jù),要訪問(wèn)表數(shù)據(jù),首先Client先去訪問(wèn)zookeeper,從zookeeper里面獲取meta表所在的位置信息,即找到這個(gè)meta表在哪個(gè)HRegionServer上保存著。
② 接著Client通過(guò)剛才獲取到的HRegionServer的IP來(lái)訪問(wèn)Meta表所在的HRegionServer,從而讀取到Meta,進(jìn)而獲取到Meta表中存放的元數(shù)據(jù)。
③ Client通過(guò)元數(shù)據(jù)中存儲(chǔ)的信息,訪問(wèn)對(duì)應(yīng)的HRegionServer,然后掃描所在HRegionServer的Memstore和Storefile來(lái)查詢數(shù)據(jù)。
④ 最后HRegionServer把查詢到的數(shù)據(jù)響應(yīng)給Client。
寫:
① Client先訪問(wèn)zookeeper,找到Meta表,并獲取Meta表元數(shù)據(jù)。
② 確定當(dāng)前將要寫入的數(shù)據(jù)所對(duì)應(yīng)的HRegion和HRegionServer服務(wù)器。
③ Client向該HRegionServer服務(wù)器發(fā)起寫入數(shù)據(jù)請(qǐng)求,然后HRegionServer收到請(qǐng)求并響應(yīng)。
④ Client先把數(shù)據(jù)寫入到HLog,以防止數(shù)據(jù)丟失。
⑤ 然后將數(shù)據(jù)寫入到Memstore。
⑥ 如果HLog和Memstore均寫入成功,則這條數(shù)據(jù)寫入成功
⑦ 如果Memstore達(dá)到閾值,會(huì)把Memstore中的數(shù)據(jù)flush到Storefile中。
⑧ 當(dāng)Storefile越來(lái)越多,會(huì)觸發(fā)Compact合并操作,把過(guò)多的Storefile合并成一個(gè)大的Storefile。
⑨ 當(dāng)Storefile越來(lái)越大,Region也會(huì)越來(lái)越大,達(dá)到閾值后,會(huì)觸發(fā)Split操作,將Region一分為二。