前言

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

最新文章

  1. Java 中的集合接口——List、Set、Map
  2. Media Player插件
  3. redis 学习笔记(3)-master/slave(主/从模式)
  4. IOPS=(Queue Depth)/(IO latency)
  5. bzoj 1455: 罗马游戏 左偏树+并查集
  6. Kuhn-Munkres算法。带权二分图匹配模板 (bin神小改版本)
  7. [Effective Modern C++] Item 2. Understand auto type deduction - 了解auto类型推断
  8. php 截取字符串
  9. 使用MySQL Workbench建立数据库,建立新的表,向表中添加数据
  10. Link方式导入java项目
  11. java.toString() ,(String),String.valueOf的区别
  12. js验证身份证号码
  13. MySQL运维相关工具汇总(待补充)
  14. 新概念英语(1-17)How do you do ?
  15. phpstudy 2016 切换Nginx+php7.0版本所需运行库 vc14 + 安装redis拓展
  16. JS:判断是否是移动端
  17. Fetch的使用及兼容ie的处理
  18. jmeter4.0 源码编译 二次开发
  19. MySQL:数据库的基本操作
  20. 关于QT建立项目中遇到的相关问题的处理办法

热门文章

  1. GCD and LCM HDU 4497 数论
  2. JVM调优 — 命令大全(jps jstat jmap jhat jstack jinfo)(转)
  3. Python内建函数reduce()用法
  4. 除了a链接跳转,还有其他的跳转方式
  5. .linux基础命令三
  6. 剑指offer学习读书笔记--二维数组中的查找
  7. vim ctags
  8. Windows 10 系统获取密钥方法
  9. Linux–Nginx攻略
  10. Ubuntu16.04 启用root权限