EMR(hadoop/hbase/phoenix夸集群数据迁移采坑记录)

简介: 一、概述: Hbase(Phoenix)数据迁移方案主要分为 Hadoop层面(distcp)、及Hbase层面(copyTable、export/import、snapshot)二、以下针对distcp方案详细说明(以亲测阿里EMR为例):st...

一、概述:

Hbase(Phoenix)数据迁移方案主要分为 Hadoop层面(distcp)、及Hbase层面(copyTable、export/import、snapshot)

二、以下针对distcp方案详细说明(以亲测阿里EMR为例):

step1:

首先打通两个集群网络(建议内网),新建一个tmp安全组,将两个集群的所有ECS都加入进来;

step2:

Cluster-A中将HBase的表在HDFS存储文件distcp到Cluster-B的HBase在HDFS中对应的目录(一定要用hdfs账户)

[root@emr-header-1 ~]# sudo su hdfs

[hdfs@emr-header-1 ~]# hadoop distcp hdfs://B:9000/hbase/data/default/safeclound.tb_ammeter hdfs://B:8020/hbase/data/default      #拷贝表safeclound.tb_ammeter的命令

备注: /hbase/data/default是E-MapReduce中HBase表在HDFS存储路径,例如表TestTable 的存储路径是/hbase/data/default/TestHbase, 可以只有单个表的路径,

也可以是default下面所有表的路径(即*表示),EMR的老版本hdfs端口是9000,新版hdfs端口是8020,这个具体情况而定就行。

特别注意:千万不能把hbase和Phoenix的系统表拷贝了,只需拷贝自建的业务表即可(因为distcp对于Cluster-B是覆盖操作),

根据本人亲测经验还是老老实实一张一张表拷贝吧,非常不建议使用*,一是多个表数据量可能巨大,二是会把系统表拷贝过去了

Cluster-B中执行HBase repair修复(一定要用hbase账户)

[root@emr-ha-header-1 ~]# sudo su hbase

[hbase@emr-ha-header-1 ~]# hbase hbck -repair            #执行hbase恢复命令,让hbase引用distcp过来的hdfs表文件

[hbase@emr-ha-header-1 ~]# hbase shell                  #进入hbase shell检查是否迁移成功

提示:根据亲测经验,若执行hbase hbck -repair后在hbase shell中任然看不到迁移来的表,别急,先喝杯茶稍等一会儿(内网迁移通常1分钟内)然后再重新执行hbase hbck -repair命令,

直到出现以下字幕,说明hbase迁移就要成功了!

util.HBaseFsck: Sleeping 10000ms before re-checking after fix...

(猜测此问题可能是由于hdfs拷贝过来后有些异步操作未完成所导致)

step3:(若不是Phoenix+hbase架构组合可忽略)

在上一步hbase shell检查迁移成功之后,再测试Phoenix查询,可能会出现在hbase shell中list或者scan命令都完全正常,

但在Phoenix中看不到迁移过来的表,别急,因为Phoenix还不知道你从hdfs迁移的表,经过Google找到解决方法1:

1. 通过在Phoenix执行create view ... 语句,创建一个视图就可以了(但后续还要维护视图,如果不像创建view 可参考以下2方案)

2. 直接在Phoenix执行create table ...语句,(警告:此方式可能会出现Huang住最后导致hbase某个节点宕机,亲身经历!!!

但也不是莫有办法,亲测一个巧妙的方法:在执行create table 时无需等待执行完成,当按下Enter键执行后,立即Ctrl+C终止sqlline.py进程

,然后重新打开sqlline.py,执行!table命令就可以看到新迁移的表了)

三、FAQ:

1. 万一误覆盖了Cluster-B的系统表如何恢复???(若操作正常可忽略)

step1:备份hbase在hdfs上的根目录

[root@emr-ha-header-1 ~]# hadoop fs -mv /hbase /hbase_bak

step2:停掉hbase所有服务(若EMR新版,可在阿里EMR控制台stop hbase all)

step3:清除ZK里hbase的注册信息(很关键,否则不会自动生成系统表)

[root@emr-ha-header-1 ~]# sh /usr/lib/zookeeper-current/bin/zkCli.sh -server 127.0.0.1:2181

[root@emr-ha-header-1 ~]# ls /

[root@emr-ha-header-1 ~]# rmr /hbase

step4:重新启动hbase所有服务

step5:测试hbase是否自动生成

[root@emr-ha-header-1 ~]# hadoop fs -ls /                #查看hdfs里是否生成了 /hbase 目录

[root@emr-ha-header-1 ~]# hbase shell                    #进入hbase shell

hbase(main):001:0> list                                #查看hbase里是否可见相应的系统表SYSTEM.CATALOG、SYSTEM.FUNCTION 、SYSTEM.MUTEX、SYSTEM.SEQUENCE、SYSTEM.STATS等

TABLE

SYSTEM.CATALOG

SYSTEM.FUNCTION

SYSTEM.MUTEX

SYSTEM.SEQUENCE

SYSTEM.STATS

5 row(s) in 0.1010 seconds

... ...

恭喜,出现以上字幕即恢复成功!

2. 可否使用离线拷贝???(若无需离线拷贝可忽略)

step1:只需将distcp...命令改用 get、put通过本地中转就行了(无关心执行账户)

[root@emr-header-1 ~]$ hadoop fs -get /hbase/data/default/safeclound.tb_ammeter_analyze            #从源hbase集群下载业务表到本地       

step2:scp到目地hbase集群服务器

[root@emr-header-1 ~]$ tar -cvf safeclound.tb_ammeter_analyze.tar safeclound.tb_ammeter_analyze

[root@emr-header-1 ~]$ scp safeclound.tb_ammeter_analyze.tar root@target-hbase-master:/root

step3:在目地服务器上将业务表文件加载到hdfs(其中target-hbase-master安装的是原生hbase且是默认配置,因此在hdfs的数据文件路径才是:/tmp/hbase-root/hbase/data/default/

,如果是阿里云的EMR,则在hdfs的数据路径为:/hbase/data/default)

[root@target-hbase-master ~]# hadoop fs -put /root/safeclound.tb_ammeter_analyze/ /tmp/hbase-root/hbase/data/default/

step4:查看验证是否加载成功

[root@target-hbase-master ~]# hadoop fs -ls /tmp/hbase-root/hbase/data/default/

step5:接下来就同上面第二点的step2中的 运行 hbase hbck -repair 命令一样了。。。

参考文献:

1. hbase数据迁移介绍

2. hbase数据迁移之distcp

3. 若使用的是Phoenix+hbase组合,若Phoenix版本低于4.10升级到4.10之后,可能会出现除主键字段外其他字段都查不出数据,但在hbase shell中scan表又有数据的情况解决:phoenix官网

相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库HBase版使用教程
  相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情: https://cn.aliyun.com/product/hbase   ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
6月前
|
机器学习/深度学习 分布式计算 Hadoop
一种HBase表数据迁移方法的优化
一种HBase表数据迁移方法的优化
88 0
|
分布式数据库 数据库 Hbase
|
6月前
|
存储 缓存 分布式数据库
HBase的数据迁移是如何进行的?
HBase的数据迁移是如何进行的?
57 0
|
云安全 Java Shell
EMR主节点内存异常100%,hbase服务异常
EMR主节点内存异常100%,hbase服务异常
|
存储 分布式计算 Hadoop
Hbase 数据迁移闭坑指南
Hbase 数据迁移闭坑指南
563 0
|
分布式计算 Hadoop 大数据
第3期:自建Hadoop集群 VS 阿里云EMR,差距居然这么大?
本期将为大家带来开源大数据平台E-MapReduce与自建Hadoop集群对比,一起来看看吧~
895 1
第3期:自建Hadoop集群 VS 阿里云EMR,差距居然这么大?
|
分布式计算 Hadoop 大数据
自建Hadoop集群 VS 阿里云EMR,差距居然这么大?
本期将为大家带来开源大数据平台E-MapReduce与自建Hadoop集群对比,一起来看看吧~
1052 0
自建Hadoop集群 VS 阿里云EMR,差距居然这么大?
|
容灾 关系型数据库 分布式数据库
BDS-HBase集群之间数据迁移同步的利器
BDS针对开源HBase目前存在的同步迁移痛点,自主研发的一套数据迁移的平台,用于HBase集群的无缝迁移、主备容灾、异地多活、在线离线业务分离、HBase数据归档、对接RDS实时增量数据等等。目的在于帮助阿里云上客户解决自建HBase、EMR HBase、Apsara HBase的数据导入导出,从.
4443 0
BDS-HBase集群之间数据迁移同步的利器
|
弹性计算 分布式计算 安全
自建 Hadoop 数据迁移到阿里云EMR集群
客户在 IDC 或者公有云环境自建 Hadoop 集群,数据集中保存在 HDFS文件系统用于数据分析任务。客户在决定上云之后,会将自建 Hadoop 集群的数据迁移到阿里云自建 Hadoop 集群或者 EMR 集群。本实践方案提供安全和低成本的 HDFS 数据迁移方案。
自建 Hadoop 数据迁移到阿里云EMR集群
|
消息中间件 弹性计算 分布式计算
自建Hadoop数据迁移到阿里云EMR
客户在IDC或者公有云环境自建Hadoop集群,数据集中保存在HDFS文件系统用于数据分析任务。客户在决定上云之后,会将自建Hadoop集群的数据迁移到阿里云自建部署架构图 Hadoop集群或者EMR集群。本实践方案提供安全和低成本的HDFS数据迁移方案。
自建Hadoop数据迁移到阿里云EMR