小編給大家分享一下HBase如何實(shí)現(xiàn)集群管理,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
在祿勸等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、成都外貿(mào)網(wǎng)站建設(shè)公司 網(wǎng)站設(shè)計(jì)制作定制開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計(jì),網(wǎng)絡(luò)營(yíng)銷推廣,外貿(mào)營(yíng)銷網(wǎng)站建設(shè),祿勸網(wǎng)站建設(shè)費(fèi)用合理。
通過之前文章的描述,我們已經(jīng)有能力設(shè)計(jì)并部署搭建HBase集群了
當(dāng)我們的HBase集群開始運(yùn)行的時(shí)候,新的挑戰(zhàn)又來了
例如,我們可能會(huì)遇到在集群運(yùn)行的時(shí)候添加或者刪除節(jié)點(diǎn)
又或者需要拷貝/備份整個(gè)集群的數(shù)據(jù)等等
如何在集群運(yùn)行的時(shí)候以最小的代價(jià)來執(zhí)行這些操作呢?
下面總結(jié)一下HBase集群的相關(guān)運(yùn)維和管理知識(shí)點(diǎn)
運(yùn)維任務(wù)
添加/刪除節(jié)點(diǎn)
在HBase中動(dòng)態(tài)添加/刪除節(jié)點(diǎn)非常簡(jiǎn)單,只需要一些命令操作即可,HBase會(huì)自動(dòng)幫你處理節(jié)點(diǎn)上下線需要做的事情
添加節(jié)點(diǎn)
1.修改conf目錄下的regionservers文件,將新節(jié)點(diǎn)的主機(jī)名另起一行添加進(jìn)去
2.復(fù)制該文件到集群中的所有機(jī)器
3.啟動(dòng)該機(jī)器完成節(jié)點(diǎn)的添加
節(jié)點(diǎn)啟動(dòng)之后會(huì)在ZK上注冊(cè)創(chuàng)建對(duì)應(yīng)的znode, 然后它會(huì)加入集群被分配region等
啟動(dòng)該節(jié)點(diǎn)的方式有兩種:
master節(jié)點(diǎn)上執(zhí)行start-hbase.sh腳本,其會(huì)檢查regionservers文件并跳過已經(jīng)啟動(dòng)的子節(jié)點(diǎn),將其中未啟動(dòng)的節(jié)點(diǎn)啟動(dòng)
對(duì)應(yīng)的子節(jié)點(diǎn)上執(zhí)行hbase-daemon.sh start regionserver命令,隨后該機(jī)器上的RegionServer服務(wù)啟動(dòng)
刪除節(jié)點(diǎn)
首先到需要停止運(yùn)行的機(jī)器上執(zhí)行:
hbase-daemon.sh stop regionserver
隨后該節(jié)點(diǎn)關(guān)閉所有region,停止進(jìn)程
ZK中的znode臨時(shí)節(jié)點(diǎn)將會(huì)過期,master會(huì)注意到該region服務(wù)器停止了, 并按照故障處理的流程將該機(jī)器上的所有region重新分配到其他機(jī)器上
下線節(jié)點(diǎn)需要注意兩點(diǎn):
1.如果負(fù)載均衡進(jìn)程正在執(zhí)行,請(qǐng)先停止,因?yàn)槠淇赡軙?huì)和master轉(zhuǎn)移region產(chǎn)生競(jìng)爭(zhēng)
2.如果該節(jié)點(diǎn)上的數(shù)據(jù)量很大,移動(dòng)region的過程可能很漫長(zhǎng)
另外,在HBase0.90.2以上的版本中可以使用graceful_stop.sh hostname來下線節(jié)點(diǎn)
顧名思義,該腳本可以讓節(jié)點(diǎn)的下線過程變得“優(yōu)雅”起來:將region從對(duì)應(yīng)的服務(wù)器上一個(gè)個(gè)移動(dòng)出來以減少擾動(dòng)
添加備份master節(jié)點(diǎn)
由于HBase本身并沒有自動(dòng)提供像HDFS那樣的Namenode雙節(jié)點(diǎn)方案,所以一個(gè)潛在的風(fēng)險(xiǎn)就是單點(diǎn)故障問題
但是HBase允許我們手動(dòng)啟動(dòng)一個(gè)備份的master節(jié)點(diǎn)來避免這個(gè)問題
多個(gè)master節(jié)點(diǎn)存在的情況下,它們會(huì)競(jìng)爭(zhēng)ZK中專用的znode,***個(gè)競(jìng)爭(zhēng)到的master來提供服務(wù)
其余的master進(jìn)程只是輪詢檢查這個(gè)znode,當(dāng)它消失時(shí)再次競(jìng)爭(zhēng)
我們可以在集群中的另外一臺(tái)配置一樣的機(jī)器上啟動(dòng)備用master:
hbase-daemon.sh start master
從0.90.x版本開始,也可以在conf目錄下的backup-master文件來執(zhí)行備用服務(wù)器
編輯方式和regionservers一樣
該文件中的master會(huì)在集群中的主master和regionserver都啟動(dòng)之后才會(huì)啟動(dòng)
由于master只被設(shè)計(jì)為集群運(yùn)行時(shí)的協(xié)調(diào)者,并不占用太多資源
所以啟動(dòng)多個(gè)備用master并沒有什么影響,反而啟動(dòng)太少可能會(huì)留下隱患
建議啟動(dòng)兩到三個(gè)備用master比較合適
數(shù)據(jù)遷移任務(wù)
導(dǎo)入和導(dǎo)出
HBase的jar包中包含了兩個(gè)以MapReduce作業(yè)形式來導(dǎo)入導(dǎo)出數(shù)據(jù)的工具
使用方式為:
hadoop jar ${hbase.jar} export ${tablename} ${outputdir}
該工具其余的參數(shù)可以做到增量導(dǎo)出、控制導(dǎo)出的數(shù)據(jù)版本等功能,具體使用請(qǐng)看jar包的幫助信息
導(dǎo)出的數(shù)據(jù)將會(huì)存儲(chǔ)在HDFS指定的目錄上,之后可以使用hadoop distcp命令拷貝到其他集群上,并在該集群上進(jìn)行導(dǎo)入操作
需要注意的是,導(dǎo)出的表和導(dǎo)入的表需要有相同的表模式
將export導(dǎo)出的文件數(shù)據(jù)導(dǎo)入到hbase中,使用方式如下:
hadoop jar hbase-server-*.jar import -D* 表名 生成文件路徑
其中-D后面的參數(shù)包括但不限于為以下幾個(gè)
HBASE_IMPORTER_RENAME_CFS:重命名列族,格式為”舊列族名:新列族名”
import.filter.class:指定過濾器類型,在數(shù)據(jù)寫入前進(jìn)行過濾
import.filter.args:指定過濾器之后提供的參數(shù)
import.bulk.output:指定了該參數(shù)之后不會(huì)直接寫入數(shù)據(jù),而是生成hfile文件用于bulkload
可能會(huì)有人注意到,其實(shí)我們是可以直接使用hadoop distcp命令將HDFS上的hbase根目錄整個(gè)拷貝到其他集群中
但是這個(gè)做法并不推薦, 因?yàn)檫@個(gè)操作會(huì)忽略文件的狀態(tài)和內(nèi)存中還沒有被刷寫的數(shù)據(jù)
CopyTable工具
另一個(gè)導(dǎo)出HBase表數(shù)據(jù)的工具是CopyTable,該工具的使用方式很簡(jiǎn)單,參考幫助信息中的例子即可操作
其是通過mr程序?qū)?shù)據(jù)逐條put到目標(biāo)表中的(TableInputFormat和TableOutputFormat)
使用方式如下:
hadoop jar hbase-server-*.jar copytable -D*
-D的參數(shù)涵括但不限于以下幾個(gè)
–startrow=起始Rowkey
–stoprow=終止Rowkey
–starttime=起始時(shí)間戳
–endtime=終止時(shí)間戳
–versions=保留的版本數(shù)
–all.cells=是否拷貝刪除標(biāo)記的數(shù)據(jù)
–new.name=目標(biāo)表名
–peer.adr=目標(biāo)zk-ip:zk-port:hbase在zk中的根目錄, 必須指定
–families=舊列族名:新列族名,如果一致則指定一個(gè)即可
表名
批量導(dǎo)入
批量導(dǎo)入可以有多種不同的形式,常見的是使用MapReduce和普通的客戶端API
但是這兩種方式都不高效,這里推薦另外一種做法:blukload
blukload是一種將數(shù)據(jù)文件(可能是普通的文本文件)導(dǎo)入到hbase中的一種工具
其運(yùn)作流程是:
1.讀取數(shù)據(jù)文件,格式為Rowkey+\t+col1數(shù)據(jù)+\t+col2數(shù)據(jù)…
2.將數(shù)據(jù)文件轉(zhuǎn)換為hfile文件
3.讀取hfile文件導(dǎo)入hbase
使用方式1
數(shù)據(jù)文件可以是由程序生成的
使用
hadoop jar hbase-server-*.jar importtsv 列名參數(shù) 表名 數(shù)據(jù)文件位置
直接將數(shù)據(jù)文件導(dǎo)入hbase,其中列名參數(shù)具體為 -Dimporttsv.columns=HBASE_ROW_KEY,”列族名:列名”…
使用方式2
編寫mr程序讀源hbase庫,生成hfile文件,OutputFormat要設(shè)置為HFileOutputFormat類
之后使用
hadoop jar hbase-server-*.jar completebulkload mr結(jié)果文件目錄 表名
將hfile文件導(dǎo)入目標(biāo)hbase數(shù)據(jù)庫
注意,該mr程序可以只有mapper過程,輸出的 類型為ImmutableBytesWritable和KeyValue
復(fù)制
hbase中的replication相當(dāng)于MySQL中的主從同步技術(shù),RegionServer會(huì)在后臺(tái)啟動(dòng)一個(gè)進(jìn)程不斷put或者delete到同步的集群上
比較適合小集群的熱備
使用replication需要在hbase-site.xml文件中配置以下選項(xiàng):
配置完畢之后在hbase shell中設(shè)置replication的信息:
add_peer '1','目標(biāo)zk-ip:zk-port:hbase在zk中的根目錄'
之后可以通過list_peer命令查看設(shè)置的replication
集群遷移方法對(duì)比
改變?nèi)罩炯?jí)別
默認(rèn)HBase的日志是DEBUG級(jí)別的,這在安裝和設(shè)計(jì)階段比較有用
它可以讓用戶在系統(tǒng)出現(xiàn)問題的時(shí)候在日志文件中搜尋到比較多的信息
生產(chǎn)環(huán)境中用戶可以根據(jù)需要修改日志的級(jí)別為INFO或者WARN
修改方式如下:
編輯conf目錄下的log4j.properties文件
將log4j.logger.org.apache.hadoop.hbase=INFO
以上是“HBase如何實(shí)現(xiàn)集群管理”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!