前言
本文基於偽分布式搭建 hadoop+zookeeper+hbase+opentsdb之后,文章鏈接:https://www.cnblogs.com/yybrhr/p/11128149.html,對於Hbase數據備份和恢復的幾種方法已經有很多大神說明了很多(https://www.cnblogs.com/ballwql/p/hbase_data_transfer.html對hbase遷移數據的4種機制都做了說明),我就不做過多描述。本文主要實戰Export 本地備份還原opentsdb數據,以及數據的遷移。
opentsdb在hbase中生成4個表,其用途和特點參考網址https://www.cnblogs.com/276815076/p/5479070.html,我總結如下:
tsdb:存儲數據點,該表只有一條數據,只有一列,值為0x17,即十進制23,即該metric的值。
tsdb-uid:存儲name和UID(metric,tagk,tagv)的映射關系,都是成組出現的,即給定一個name和uid,會保存(name,uid)和(uid,name)兩條記錄。
tsdb-meta:存儲時間序列索引和元數據。這是一個可選特性,默認不開啟,可通過配置文件來啟用該特性。
tsdb-tree:樹形表,用來以樹狀層次關系來表示metric的結構,只有在配置文件開啟該特性后,才會使用此表。
由此可見,備份還原時,直接備份還原tsdb表即可。
1、全量備份
本文測試本地備份服務器hostname:hbase3,ip為192.168.0.214。
# 備份表:tsdb,本地存放路徑/opt/soft/hbase/hbase_bak/hbase_bak_1562252298 hbase org.apache.hadoop.hbase.mapreduce.Export -Dhbase.export.scanner.batch=2000 -D mapred.output.compress=true tsdb file:///opt/soft/hbase/hbase_bak/hbase_bak_1562252298
2、跟蹤進度
#根據提示:可以通過 http://hbase3:8088 跟蹤進度
http://hbase3:8088
#問題:但是無法訪問 http://hbase3:8088,但http://192.168.0.214:8088/cluster則訪問
http://192.168.0.214:8088
#解決:配置hosts,映射hbase3(WIN+R——>輸入:drivers——>進入子路徑:/etc/hosts——>添加 192.168.0.214 hbase3)
192.168.0.214 hbase3
# 問題
# 解決:狀態與進度跟蹤
# 驗證
3、錯誤解決:
is running 17037824B beyond the 'VIRTUAL' memory limit. Current usage: 207.8 MB of 1 GB physical memory used; 2.1 GB of 2.1 GB virtual memory used. Killing container
Container killed on request. Exit code is 143
Container exited with a non-zero exit code 143
【1】錯誤log日志
后台日志:提示可以在web上查看
web日志:

【2】異常分析
我們在后台日志可以看到,is running 17037824B beyond the 'VIRTUAL' memory limit. Current usage: 207.8 MB of 1 GB physical memory used; 2.1 GB of 2.1 GB virtual memory used. Killing container.這句話其實就告訴了原因:
207.8 MB: 任務所占的物理內存
1 GB : 是hadoop的mapred-site.xml配置文件中設置的mapreduce.map.memory.mb 的值。
2.1 GB : 第一個2.1GB是程序占用的虛擬內存
2.1 GB : 是hadoop的mapred-site.xml配置文件中設置的mapreduce.map.memory.mb 的值 乘以 yarn.nodemanager.vmem-pmem-ratio 的值得到的。
其中yarn.nodemanager.vmem-pmem-ratio 是 虛擬內存和物理內存比例,在yarn-site.xml中設置,默認是2.1GB,
很明顯,這句話的意思是:分配給container虛擬內存只有2.1GB,但是目前container已經占用了2.1GB。所以kill掉了這個container。
上面只是map中產生的報錯,當然也有可能在reduce中報錯,如果是reduce中,那么就是對應mapreduce.reduce.memory.mb 和 yarn.nodemanager.vmem-pmem-ratio。
【3】解決方案
參考網址:
https://blog.csdn.net/T1DMzks/article/details/78818874
https://www.cnblogs.com/missie/p/4370135.html
# 進入目錄 cd /opt/soft/hadoop/hadoop-3.1.2/etc/hadoop/ # 進入編輯 vim mapred-site.xml # 添加以下內容:
<!--虛擬內存和真實物理內存的比率,這參數默認值為2.1。--> <property> <name>yarn.nodemanager.vmem-pmem-ratio</name> <value>2</value> </property> <!--指定map和reduce task的內存大小,該值應該在RM的最大最小container之間。如果不設置,則默認用以下規則進行計算:max{MIN_Container_Size,(Total Available RAM/containers)}。一般地,reduce設置為map的2倍。--> <property> <name>mapreduce.map.memory.mb</name> <value>4096</value> </property>
【4】結果驗證
# 添加重啟hadoop、hbase:注意先停habse,並且不要要kill,因為hadoop在不斷的切割,用stop停止,它會記錄下來,下次啟動繼續切割
stop-hbase.sh
stop-all.sh
start-all.sh
start-hbase.sh
## 驗證: # 1、先刪除本地之前的備份文件 rm -fr /opt/soft/hbase/hbase_bak/hbase_bak1562252298 # 2、再次備份 hbase org.apache.hadoop.hbase.mapreduce.Export -Dhbase.export.scanner.batch=2000 -D mapred.output.compress=true tsdb file:///opt/soft/hbase/hbase_bak/hbase_bak1562252298 # 3、結果查看:進入備份文件路徑查看內容(一般成功會生成_SUCCESS和若干part-m-文件) cd /opt/soft/hbase/hbase_bak/hbase_bak1562252298 ll
在web上可以查看進度和狀態:
在運行的時候會生成兩個YarnChild進程
4、還原
【1】停止寫入程序
【2】清空表
# 進入到shell命令 hbase shell # 清空要還原的表,只留表結構 truncate 'tsdb' # 查看表 scan 'tsdb'
【3】還原
# 此步驟在非shell命令下執行,因此需要exit退出shell命令,我這里重開一個窗口做 hbase org.apache.hadoop.hbase.mapreduce.Driver import tsdb file:///opt/soft/hbase/hbase_bak/hbase_bak1562252298
查看進度

【4】驗證
當進度達到100%時,檢查數據。
(1)hbase shell進行驗證
# 進入shell命令 hbase shell # 查看數據 scan 'tsdb'
(2)grafana驗證
5、數據遷移:從一台服務器遷移到另一台服務器
本文從hbase3(ip:192.168.0.214)遷移到hbase1(ip:192.168.0.211),這兩台服務器搭建的環境一樣,並且做了互相免密登錄。
【1】將剛剛hbase3備份的數據復制給hbase1
scp -r hbase3:/opt/soft/hbase/hbase_bak/hbase_bak1562252298/ hbase1:/opt/soft/hbase/hbase_bak/
【2】清空hbase1原本tsdb的數據
hbase1原本數據
清空
# 進入到shell命令 hbase shell # 清空要還原的表,只留表結構 truncate 'tsdb' # 查看表 scan 'tsdb'
【3】還原
【4】驗證
6、增量備份
增量備份跟全量備份操作差不多,只不過要在后面加上時間戳。需要借助時間戳轉換工具http://tool.chinaz.com/Tools/unixtime.aspx。
開始時間:2019-07-10 00:00:00 對應時間戳:1562616000
結束時間:2019-07-10 14:00:00 對應時間戳:1562652000
hbase org.apache.hadoop.hbase.mapreduce.Export -Dhbase.export.scanner.batch=2000 -D mapred.output.compress=true tsdb file:///opt/soft/hbase/hbase_bak/hbase_bak_1562601600-1562652000 1562601600 1562652000