热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Hbase数据迁移闭坑指南

HBase自身也提供了ExportSnapshot的方法可以从HDFS文件层基于某个快照快速的导出HBase的数据,并不会对RegionServer造成影响,但该源


点击上方蓝字关注我们

  • hbase数据迁移前提

a. 2套集群的hosts文件内容都需要包含对方的主机地址
b. 配置hosts 在源集群所有机器的hosts中配置目标集群的hostname与ip

快照方式

hbase snapshot数据迁移问题

不需要提前建表,分区也会自动同步

HBase自身也提供了ExportSnapshot的方法可以从HDFS文件层基于某个快照快速的导出HBase的数据,并不会对RegionServer造成影响,但该源生的方法不支持增量。

1.在源集群执行

  1. snapshot 'src_table', 'snapshot_src_table'

snapshot的流程主要有三个步骤

  • 加锁: 加锁对象是regionserver的memstore,目的是禁止在创建snapshot过程中对数据进行insert,update,delete操作

  • 刷盘:刷盘是针对当前还在memstore中的数据刷到HDFS上,保证快照数据相对完整,此步也不是强制的,如果不刷,快照中数据有不一致风险

  • 创建指针: snapshot过程不拷贝数据,但会创建对HDFS文件的指针,snapshot中存储的就是这些指针元数据

2.在源集群执行,属于推送方式,在目标集群执行数据拉取方式

  1. 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用户

  1. disable 'dalishen:bbs_member'

  2. 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 可以发现导入的是源集群的权限

所以需要赋权限

  1. hdfs dfs -chmod -R 777 /apps/hbase/data/archive/data/dalishen/bbs_member/

  2. hbase shell

  3. enable 'dalishen:bbs_member'

copyTable方式

不需要提前建表,分区也会自动同步,支持增量备份,需要指定要备份的时间范围
copyTable也是属于HBase数据迁移的工具之一,以表级别进行数据迁移。copyTable的本质也是利用MapReduce进行同步的,与DistCp不同的时,它是利用MR去scan 原表的数据,然后把scan出来的数据写入到目标集群的表。这种方式也有很多局限,如一个表数据量达到T级,同时又在读写的情况下,全量scan表无疑会对集群性能造成影响。1.3->1.1 高到低版本 不需要提前建表,分区也会自动同步。

检查是否开启同步

  1. echo "list_replicated_tables" | hbase shell -n |grep dalishen:app_deviceid

没有的话执行

  1. enable_table_replication 'tname'

1.源集群hadoop查询数据量,如太大先别迁移超过5000w

  1. hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'dalishen:app_deviceid'

2.源集群上执行 替换表名

  1. 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.目标集群上执行数据量对比下

  1. hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'dalishen:app_deviceid'

4.指定时间戳进行增量同步

  1. 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

实时同步

1.在源集群进入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

  1. alter 'testwang',{NAME => 'f' ,REPLICATION_SCOPE => '1'}

3.进入hbase shell

  1. hbase(main):006:0> enable_table_replication 'testwang'

  2. 0 row(s) in 0.0860 seconds

  3. The replication swith of table 'testwang' successfully enabled

  4. 验证在源集群

  5. put 'testwang','1005','f:name','1005'

  6. 在目标集群

  7. get 'testwang','1005'

  8. 校验数据量:

  9. count

  10. hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'testwang'

4.查看同步状态:

  1. hbase(main):016:0> status 'replication'

  2. version 1.3.1

  3. 4 live servers

  4. 172.18.x.x:

  5. SOURCE: PeerID=1, AgeOfLastShippedOp=789, SizeOfLogQueue=0, TimeStampsOfLastShippedOp=Wed Aug 12 15:22:43 CST 2020, Replication Lag=789

  6. PeerID=2, AgeOfLastShippedOp=0, SizeOfLogQueue=6, TimeStampsOfLastShippedOp=Thu Jan 01 08:00:00 CST 1970, Replication Lag=1597216964669

  7. SINK : AgeOfLastAppliedOp=0, TimeStampsOfLastAppliedOp=Wed Aug 12 15:21:25 CST 2020

  8. 172.18.x.x:

  9. SOURCE: PeerID=1, AgeOfLastShippedOp=989, SizeOfLogQueue=0, TimeStampsOfLastShippedOp=Wed Aug 12 15:22:44 CST 2020, Replication Lag=989

  10. PeerID=2, AgeOfLastShippedOp=0, SizeOfLogQueue=4, TimeStampsOfLastShippedOp=Thu Jan 01 08:00:00 CST 1970, Replication Lag=1597216964850

  11. SINK : AgeOfLastAppliedOp=1001, TimeStampsOfLastAppliedOp=Wed Aug 12 15:22:43 CST 2020

  12. 172.18.x.x:

  13. SOURCE: PeerID=1, AgeOfLastShippedOp=1382, SizeOfLogQueue=0, TimeStampsOfLastShippedOp=Wed Aug 12 15:22:43 CST 2020, Replication Lag=1382

  14. PeerID=2, AgeOfLastShippedOp=0, SizeOfLogQueue=7, TimeStampsOfLastShippedOp=Thu Jan 01 08:00:00 CST 1970, Replication Lag=1597216963622

  15. SINK : AgeOfLastAppliedOp=1011, TimeStampsOfLastAppliedOp=Wed Aug 12 15:22:41 CST 2020

  16. 172.18.x.x:

  17. SOURCE: PeerID=1, AgeOfLastShippedOp=994, SizeOfLogQueue=0, TimeStampsOfLastShippedOp=Wed Aug 12 15:22:43 CST 2020, Replication Lag=994

  18. PeerID=2, AgeOfLastShippedOp=1006, SizeOfLogQueue=0, TimeStampsOfLastShippedOp=Wed Aug 12 15:22:43 CST 2020, Replication Lag=1006

  19. SINK : AgeOfLastAppliedOp=976, TimeStampsOfLastAppliedOp=Wed Aug 12 15:22:43 CST 2020

总结

建议大表先进行snapshot方式同步,然后再利用copy进行增量数据同步,小表直接copy table数据迁移,最后配置hbase replication peer实时同步。


人生就像一场旅行,不必在乎目的地,在乎的是沿途的风景,以及看风景的心情,珍惜眼前的一切。在节假日旅游的时候开开心心过好每一天。




往期推荐

Spark之Shuffle机制及其文件寻址详解

【docker】容器间跨宿主机通信-基于overlay

【Kafka】宏观解释Kafka数据发送流程

【Kafka】一文详解零拷贝原理……

大规模集群下Hadoop NameNode如何承载每秒上千次的高并发访问





推荐阅读
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 我们在之前的文章中已经初步介绍了Cloudera。hadoop基础----hadoop实战(零)-----hadoop的平台版本选择从版本选择这篇文章中我们了解到除了hadoop官方版本外很多 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了将mysql从5.6.15升级到5.7.15的详细步骤,包括关闭访问、备份旧库、备份权限、配置文件备份、关闭旧数据库、安装二进制、替换配置文件以及启动新数据库等操作。 ... [详细]
  • 面试经验分享:华为面试四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试
    最近有朋友去华为面试,面试经历包括四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试。80%的人都在第一轮电话面试中失败,因为缺乏基础知识。面试问题涉及 ... [详细]
  • Tomcat安装与配置教程及常见问题解决方法
    本文介绍了Tomcat的安装与配置教程,包括jdk版本的选择、域名解析、war文件的部署和访问、常见问题的解决方法等。其中涉及到的问题包括403问题、数据库连接问题、1130错误、2003错误、Java Runtime版本不兼容问题以及502错误等。最后还提到了项目的前后端连接代码的配置。通过本文的指导,读者可以顺利完成Tomcat的安装与配置,并解决常见的问题。 ... [详细]
  • Hadoop源码解析1Hadoop工程包架构解析
    1 Hadoop中各工程包依赖简述   Google的核心竞争技术是它的计算平台。Google的大牛们用了下面5篇文章,介绍了它们的计算设施。   GoogleCluster:ht ... [详细]
  • mapreduce源码分析总结
    这篇文章总结的非常到位,故而转之一MapReduce概述MapReduce是一个用于大规模数据处理的分布式计算模型,它最初是由Google工程师设计并实现的ÿ ... [详细]
  • 对于开源的东东,尤其是刚出来不久,我认为最好的学习方式就是能够看源代码和doc,測试它的样例为了方便查看源代码,关联导入源代 ... [详细]
  • Java程序员必会的40个Linux命令!
    你知道的越多,不知道的就越多,业余的像一棵小草!你来,我们一起精进!你不来,我和你的竞争对手一起 ... [详细]
  • Azkaban(三)Azkaban的使用
    界面介绍首页有四个菜单projects:最重要的部分,创建一个工程,所有flows将在工程中运行。scheduling:显示定时任务executing:显示当前运行的任务histo ... [详细]
  • Zookeeper 总结与面试题汇总
    Zookeeper总结与面试题汇总,Go语言社区,Golang程序员人脉社 ... [详细]
  • SparkOnYarn在YARN上启动Spark应用有两种模式。在cluster模式下,Spark驱动器(driver)在YARNApp ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
author-avatar
刘刘刘存乐_626
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有