HBase備份還原OpenTSDB數據之Export/Import(增量+全量)


 前言

  本文基於偽分布式搭建 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




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM