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