正文
hbase备份表,hbase备份方案有哪些
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
hbase的作用
HBase 是典型的 NoSQL 数据库,通常被描述成稀疏的、分布式的、持久化的,由行键、列键和时间戳进行索引的多维有序映射数据库,主要用来存储非结构化和半结构化的数据。因为 HBase 基于 Hadoop 的 HDFS 完成分布式存储,以及 MapReduce 完成分布式并行计算,所以它的一些特点与 Hadoop 相同,依靠横向扩展,通过不断增加性价比高的商业服务器来增加计算和存储能力。
HBase 虽然基于 Bigtable 的开源实现,但它们之间还是有很多差别的,Bigtable 经常被描述成键值数据库,而 HBase 则是面向列存储的分布式数据库。
下面介绍 HBase 具备的显著特性,这些特性让 HBase 成为当前和未来最实用的数据库之一。
容量巨大
HBase 的单表可以有百亿行、百万列,可以在横向和纵向两个维度插入数据,具有很大的弹性。
当关系型数据库的单个表的记录在亿级时,查询和写入的性能都会呈现指数级下降,这种庞大的数据量对传统数据库来说是一种灾难,而 HBase 在限定某个列的情况下对于单表存储百亿甚至更多的数据都没有性能问题。
HBase 采用 LSM 树作为内部数据存储结构,这种结构会周期性地将较小文件合并成大文件,以减少对磁盘的访问。
扩展性强
HBase 工作在 HDFS 之上,理所当然地支持分布式表,也继承了 HDFS 的可扩展性。HBase 的扩展是横向的,横向扩展是指在扩展时不需要提升服务器本身的性能,只需添加服务器到现有集群即可。
HBase 表根据 Region 大小进行分区,分别存在集群中不同的节点上,当添加新的节点时,集群就重新调整,在新的节点启动 HBase 服务器,动态地实现扩展。这里需要指出,HBase 的扩展是热扩展,即在不停止现有服务的前提下,可以随时添加或者减少节点。
高可靠性
HBase 运行在 HDFS 上,HDFS 的多副本存储可以让它在岀现故障时自动恢复,同时 HBase 内部也提供 WAL 和 Replication 机制。
WAL(Write-Ahead-Log)预写日志是在 HBase 服务器处理数据插入和删除的过程中用来记录操作内容的日志,保证了数据写入时不会因集群异常而导致写入数据的丢失;而 Replication 机制是基于日志操作来做数据同步的。
hbase怎么用?
HBase安装及简单使用
通过之前的hadoop0.20.2的安装并调试成功,接下来我们继续安装hbase0.90.5。在安装hbase0.90.5之前,因为hbase0.90.5只支持jdk1.6,所以,我把之前的jdk1.8卸载,重新安装了jdk1.6。
第一步:
首先需要下载hbase0.90.5.tar.gz,并解压到/home/hadoop/的目录下,同时将目录修改为hbase0.90.5
第二步:
替换hadoop核心jar包,主要母的是防止hbase和hadoop版本不同出现兼容问题,造成hmaster启动异常
将hbase0.90.5/lib目录中的hadoop-core-0.20-append-r1056497.jar包进行备份后删除,再将/home/hadoop/hadoop下面的hadoop-0.20.2-core.jar赋值到/home/hadoop/hbase0.90.5目录下即可
第三步:
编辑配置文件
①/home/hadoop/hbase0.90.5/conf/hbase-env.sh
指定jdk的路径以及hadoop的路径即可。
我们翻到hbase-env.sh文件的最下面,可以看到
# export HBASE_MANAGES_ZK=true
如果你需要用单独的zookeeper,这里需要把#去掉,并将true改成false,如果你用hbase自带的zookeeper,这句则可以不用修改,因为这也是他默认的设置。
我们简单看下hbase和hadoop和zookeeper之间的架构图
zookeeper:主要用于协调分布式系统上的各种服务,例如确认小时是否准确到达,防止单点失效,处理负载平衡,一般可以用于Hbaes中实现NameNode的自动切换。也算是Hadoop家族中的一员。
②/home/hadoop/hbase0.90.5/conf/hbase-site.xml
③/home/hadoop/hbase0.90.5/conf/regionservers
第四步:
将修改的hbase目录同步到其他节点(node2、node3)
[hadoop@master ~]$ scp -r hbase0.90.5 node2:/home/hadoop/
[hadoop@master ~]$ scp -r hbase0.90.5 node3:/home/hadoop/
第五步:
启动hbase,保证环境的完整性,这里先启动hadoop在启动hbase
[hadoop@master ~]$ hadoop/bin/start-all.sh
[hadoop@master ~]$ hbase0.90.5/bin/start-hbase.sh
执行完命令后,验证hbase是否启动正常,可以在浏览器中输入: 出现以下页面可表示hbase安装配置成功。
简单的操作
创建一个'member'表,其中'member_id'为行键,其中'address‘和'info‘是列族
下面我们往'member'表中插入数据
我们对行键'1001'中列族info的列名age赋值24(1001:info:age=24),插入两次,会将最后一次的值进行合并,其中,用时间戳来区分。从图片中的时间戳不同可以看出保存的是最后一次put的内容。
hbase备份数据需要多久
一天。hbase备份是它的一个功能,备份数据需要一天的时间,速度比较慢。它执行HBase备份有两种主要的策略:关闭集群进行备份,以及在活动的集群上进行备份。
hbase 数据迁移
hbase snapshot数据迁移问题
不需要提前建表,分区也会自动同步
HBase自身也提供了ExportSnapshot的方法可以从HDFS文件层基于某个快照快速的导出HBase的数据,并不会对RegionServer造成影响,但该源生的方法不支持增量
1、在源集群执行
snapshot 'src_table', 'snapshot_src_table'
snapshot的流程主要有三个步骤
加锁: 加锁对象是regionserver的memstore,目的是禁止在创建snapshot过程中对数据进行insert,update,delete操作
刷盘:刷盘是针对当前还在memstore中的数据刷到HDFS上,保证快照数据相对完整,此步也不是强制的,如果不刷会,快照中数据有不一致风险
创建指针: snapshot过程不拷贝数据,但会创建对HDFS文件的指针,snapshot中存储的就是这些指针元数据
2、在源集群执行,属于推送方式,在目标集群执行数据拉取方式
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot test_snap -copy-from hdfs://HDFS80386/hbase -copy-to hdfs://shyt-hadoop-4031.xx.com.cn:8020/apps/hbase/data -mappers 20 -bandwidth 5
3、在目标集群执行使用hbase用户
disable 'dalishen:bbs_member'
restore_snapshot 'bbs_member_snap'
使用restore命令在目标集群自动新建表,以及与archive里的HFile建立link
执行该步骤的时候,可能会遇到权限问题,需要赋权限
Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=hbase, access=WRITE, inode="/apps/hbase/data/archive/data/dalishen/bbs_member/f9406f2ff1fe4d542a5cc36b850c2689/f/.links-91a554a73b1e41a7a0b33208331d62df":hadoop:hdfs:drwxr-xr-x
源集群
groups hadoop hdfs 可以发现导入的是源集群的权限
所以需要赋权限
hdfs dfs -chmod -R 777 /apps/hbase/data/archive/data/dalishen/bbs_member/
enable 'dalishen:bbs_member'
不需要提前建表,分区也会自动同步,支持增量备份,需要指定要备份的时间范围
copyTable也是属于HBase数据迁移的工具之一,以表级别进行数据迁移。copyTable的本质也是利用MapReduce进行同步的,与DistCp不同的时,它是利用MR去scan 原表的数据,然后把scan出来的数据写入到目标集群的表。这种方式也有很多局限,如一个表数据量达到T级,同时又在读写的情况下,全量scan表无疑会对集群性能造成影响。
1.3-1.1 高到低版本 不需要提前建表,分区也会自动同步
检查是否开启同步
echo "list_replicated_tables" | hbase shell -n |grep dalishen:app_deviceid
没有的话执行
enable_table_replication 'tname'
1.源集群hadoop查询数据量,如太大先别迁移超过5000w
hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'dalishen:app_deviceid'
2.源集群上执行 替换表名
hbase org.apache.hadoop.hbase.mapreduce.CopyTable -Dhbase.client.scanner.caching=1000 -Dmapred.map.tasks.speculative.execution=false -D mapreduce.task.timeout=6000000 --families=f:f --peer.adr=10.52.24.42:2181:/hbase-unsecure --new.name=dalishen:app_deviceid dalishen:app_deviceid
3.目标集群上执行数据量对比下
hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'dalishen:app_deviceid'
4.指定时间戳进行增量同步
hbase org.apache.hadoop.hbase.mapreduce.CopyTable -Dhbase.client.scanner.caching=1000 -Dmapred.map.tasks.speculative.execution=false -D mapreduce.task.timeout=6000000 --starttime=1600792683760 --endtime=1600792684760 --families=f:f --peer.adr=172.18.12.7:2181:/hbase --new.name=testwang testwang
在源集群进入hbase shell
1、 add_peer '1', 'shyt-hadoop-4032.xxx.com.cn,shyt-hadoop-4031.xxx.com.cn,shyt-hadoop-4030.xxx.com.cn:2181:/hbase-unsecure'
2、修改REPLICATION_SCOPE属性=1,全局模式,此数据会被复制给所有peer
alter 'testwang',{NAME = 'f' ,REPLICATION_SCOPE = '1'}
3、hbase(main):006:0 enable_table_replication 'testwang'
0 row(s) in 0.0860 seconds
The replication swith of table 'testwang' successfully enabled
验证在源集群 put 'testwang','1005','f:name','1005'
在目标集群 get 'testwang','1005'
校验数据量:通count
hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'testwang'
查看同步状态: status 'replication'
建议大表先进行snapshot方式同步,然后再利用copy进行增量数据同步,小表直接copy table数据迁移,最后配置hbase replication peer实时同步
关于hbase备份表和hbase备份方案有哪些的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。