本实验以通过华为云CDM服务进行数据迁移为例,介绍如何将其他Hadoop集群的历史数据迁移至华为云MRS中,以便获取MRS云服务的诸多特性。 本迁移指导将指导适用于多种不同场景下的HBase、Hive数据向MRS集群的迁移工作。由于数据迁移过程中可能存在数据覆盖、丢失、损坏等风险,因此本指导只作为实验参考,实际项目的数据迁移方案的制定及实施请华为云支持人员协同完成。
购买MRS集群
这个实验里我们需要购买两台MRS集群,其中一台mrs_old中有Hive和HBase历史数据,另一台mrs_new没有数据。实验过程模拟从mrs_old搬迁Hive和HBase数据到mrs_new中。
除了 mrs_new和mrs_old不同的eip外,其余配置均与之前保持一致。
点击进入MRS页面,点击“购买集群”:
选择“自定义购买”
区域:华北—北京四
计费模式:按需计费
集群名称:mrs-old
版本类型:普通版
集群版本:MRS 3.1.0 WXL
集群类型:自定义
勾选组件:Hadoop/HBase/Hive/Zookeeper/Ranger
开启“拓扑调整”,勾选master(3)的“DN, NM, RS”。此操作表示在Master3节点分别部署DataNode, NodeManager, RegionServer以解决如上警告。
购买CDM集群
“服务列表”->“迁移”->“云数据迁移 CDM”
进入CDM界面,点击“购买云数据迁移服务”
当前区域:华北-北京四
可用区:任意区即可
集群名称:cdm-bigdata
实例类型:cdm.large 8核16GB
虚拟私有云:vpc-bigdata
子网:subnet-bigdata
安全组:sg-bigdata
消息通知:保持关闭状态
确认无误后点击“立即购买”。
再次确认配置,确认无误后点击“提交”。等待约【8分钟】创建成功。
旧集群Hive建库建表
业务数据通常存放在多个不同系统的不同业务表中,在需要进行统计分析和进一步的数据挖掘时合成宽表,汇总更多的特征。
本实验中用户信息表(personal_data)来自客户办理业务时生成的表格,用户充值信息表(recharge_data)为用户平时的充值情况,用户业务使用表(usage_data)为用户平时通话、上网等数据,最终形成的业务宽表具有更多字段或者特征,为下一步分析和数据挖掘做好准备。
下载数据至实验沙箱
重新启动一个Xfce终端连接,使用wget命令在Xfce终端下载personal_data.csv、recharge_data.csv、usage_data.csv三个文件。
wget https://sandbox-expriment-files.obs.cn-north-1.myhuaweicloud.com:443/20220726/usage_data.csv
wget https://sandbox-expriment-files.obs.cn-north-1.myhuaweicloud.com:443/20220726/recharge_data.csv
wget https://sandbox-expriment-files.obs.cn-north-1.myhuaweicloud.com:443/20220726/personal_data.csv
上传数据至集群服务器
scp usage_data.csv recharge_data.csv personal_data.csv root@xxx.xxx.xxx.xxx:/
将数据上传至HDFS
在Xfce窗口输入以下命令,同时创建三个路径。
hdfs dfs -mkdir -p /user/personal_dir_data /user/recharge_dir_data /user/usage_dir_data
hdfs dfs -put /personal_data.csv /user/personal_dir_data
hdfs dfs -put /recharge_data.csv /user/recharge_dir_data
hdfs dfs -put /usage_data.csv /user/usage_dir_data
查看HDFS上数据。注意命令后跟三个路径
hdfs dfs -ls /user/personal_dir_data /user/recharge_dir_data /user/usage_dir_data
Hive中建库、建表并加载数据
进入Hive命令窗口
beeline
显示现有的数据库
show databases;
show tables;
create table hive_batch.personal_data
(USER_ID int,SERVICE string, AGE int,LOCATION string, CAREER string,CREATEDATE string)
row format delimited fields terminated by ',' stored as textfile;
加载数据到 personal_data
LOAD DATA INPATH '/user/personal_dir_data/personal_data.csv' OVERWRITE INTO TABLE hive_batch.personal_data;
select * from hive_batch.personal_data limit 5;
create table hive_batch.recharge_data
(USER_ID int,LAST_RECHARGE_VALUE int,TOTAL_RECHARGE_VALUE int,
TOTAL_RECHARGE_COUNT int,BALANCED int)
row format delimited fields terminated by ',' stored as textfile;
LOAD DATA INPATH '/user/recharge_dir_data/recharge_data.csv' OVERWRITE INTO TABLE hive_batch.recharge_data;
显示recharge_data前5行
select * from hive_batch.recharge_data limit 5;
create table hive_batch.usage_data
(USER_ID int,SERVICE_KIND string,CALL_DURATION int,CALLED_DURATION int,IN_PACKAGE_FLUX int,OUT_PACKAGE_FLUX int,MONTHLY_ONLINE_DURATION int,NET_DURATION int)
row format delimited fields terminated by ',' stored as textfile;
LOAD DATA INPATH '/user/usage_dir_data/usage_data.csv' OVERWRITE INTO TABLE hive_batch.usage_data;
显示前5行
select * from hive_batch.usage_data limit 5;
show tables;
show databases;
create table hive_batch_new.personal_data
(USER_ID int,SERVICE string, AGE int,LOCATION string, CAREER string,CREATEDATE string)
row format delimited fields terminated by ',' stored as textfile;
创建表recharge_data表:
create table hive_batch_new.recharge_data
(USER_ID int,LAST_RECHARGE_VALUE int,TOTAL_RECHARGE_VALUE int,
TOTAL_RECHARGE_COUNT int,BALANCED int)
row format delimited fields terminated by ',' stored as textfile;
创建表usage_data并导入数据
create table hive_batch_new.usage_data
(USER_ID int,SERVICE_KIND string,CALL_DURATION int,CALLED_DURATION int,IN_PACKAGE_FLUX int,OUT_PACKAGE_FLUX int,MONTHLY_ONLINE_DURATION int,NET_DURATION int)
row format delimited fields terminated by ',' stored as textfile;
显示当前数据库下所有表格
show tables;
CDM迁移Hive数据表
创建CDM链接
进入CDM界面,点击“作业管理”
在“连接管理”标签下点击“新建连接”。
配置对应的Hive连接。
由于我们模拟从一台MRS集群迁移到另一台MRS集群,因此需分别针对mrs_old和mrs_new创建两个MRS Hive连接。先创建针对mrs_old的连接。
选择MRS Hive,点击下一步。
配置基本参数。
① 名称:Hive_old
② 连接器:Hive
③ Hadoop类型:MRS
④ Manage IP:在右侧点击“选择”按钮,找到自己创建的mrs_old,点击该集群名称,会自动映射到该集群的Active Master节点IP
⑤ 认证类型:SIMPLE
⑥ Hive版本:HIVE_3_X
⑦ 用户名:admin
⑧ 密码:设置为自己购买MRS集群时的密码
⑨ OBS支持:否
⑩ 运行模式:EMBEDDED
⑪ 是否使用集群配置:否
确认无误后点击“测试“。测试可能需要花费一定时间,请耐心等待约半分钟。测试通过后点击保存,即可保存所创建的连接了。
类似的,再建立一个到mrs_new集群Hive的连接。
① 名称:Hive_new
② 连接器:Hive
③ Hadoop类型:MRS
④ Manage IP:在右侧点击“选择”按钮,找到自己创建的mrs_new,点击该集群名称,会自动映射到该集群的Active Master节点IP
⑤ 认证类型:SIMPLE
⑥ Hive版本:HIVE_3_X
⑦ 用户名:admin
⑧ 密码:设置为自己购买MRS集群时的密码
⑨ OBS支持:否
⑩ 运行模式:EMBEDDED
⑪ 是否使用集群配置:否
确认无误后点击“测试“。测试可能需要花费一定时间,请耐心等待约半分钟。测试通过后点击保存,即可保存所创建的连接了。
两个连接都创建成功后,完成后回到连接管理界面,可以看到所创建的连接如下:
新建表迁移作业
进入“ 表/文件“迁移界面
配置信息如下:
作业名称:HiveQYCS
源端作业配置
源连接名称:下拉选择Hive_old
数据库名称:下拉选择hive_batch
数据表名称:下拉选择personal_data
读取方式:HDFS
目的端作业配置
目的连接名称:下拉选择Hive_new
数据库名称:下拉选择hive_batch_new
表名:下拉选择personal_data
确认无误后点击“下一步“,进入字段映射的界面。
由于我们建表时字段数量、名称和类型都是完全一致的,因此无需配置。在实际业务中可能会有目的端和源端字段不一致的情况,可根据实际需要进行配置。
确认无误后点击下一步,进入任务配置。这一步可配置失败重试机制,防止因网络问题导致迁移失败,同时在高级选项中还可根据迁移作业大小配置作业的并发度。由于我们的演示数据量不大,因此不做配置,保持默认即可。
确认无误后,点击保存并运行。任务提交后等待约5秒左右即可完成迁移
使用Xfce回到mrs_new集群,进入Hive操作界面.
beeline
切换至hive_batch_new数据库,查看personal_data表前5行,发现数据已被正确迁移至新集群。
use hive_batch_new;
select * from hive_batch_new.personal_data limit 5;
新建整库迁移作业
表迁移作业只能一次迁移一张表,当表文件数量较多时比较繁琐。在CDM服务中还提供了整库迁移的选项,可以一次性批量迁移多张表格,从而大大提高了迁移的效率。
回到CDM作业配置界面,找到“整库迁移“标签,点击“新建作业”。
配置作业信息如下:
作业名称:HiveZKQY
源连接名称:下拉选择Hive_old
数据库名称:下拉选择hive_batch
目的连接名称:下拉选择Hive_new
数据库名称:下拉选择hive_batch_new
另外,由于之前已经导入过personal_data表,因此需将“导入前清空数据” 选项选为“是“。
注意:只有内部表才可清空数据,外部表无法执行清空数据选项。
确认无误后点击下一步。此时字段映射选择的是需要迁移的表。如果需将所有表都迁移至新集群,可以点击“全选”,然后点击“>>”按钮。
点击下一步。
在任务配置界面,根据需要设定“同时执行的子作业个数”和“抽取并发数”。此处我们保持默认即可。
确认无误后点击“保存并运行”。提交成功后等待约7秒即可迁移成功。
利用Xfce登录mrs_new集群,回到Hive命令行:
beeline
切换至hive_batch_new数据库,分别查看recharge_data表和usage_data表的前5行,发现数据已被正确迁移至新集群。
CDM迁移HBase数据表
旧集群HBase建表
在mrs-old 集群管理页中点击进入 Manager页 ,选择EIP方式。下载HBase命令行客户端并执行安装。
在右上角选择“更多 > 下载客户端”,弹出“下载客户端”信息提示框。
选择客户端类型”中选择“完整客户端”。
“选择平台类型”中选择x86_64
勾选“仅保存到如下路径”,单击“确定”开始生成客户端文件。
文件生成后默认保存在主管理节点“/tmp/FusionInsight-Client”。
打开一个新的Xfce窗口,登录到MRS-old集群
进入安装包所在目录,例如“/tmp/FusionInsight-Client”。
执行如下命令解压安装包到本地目录。
tar -xvf FusionInsight_Cluster_1_HBase_Client.tar
tar -xvf FusionInsight_Cluster_1_HBase_ClientConfig.tar
cd /tmp/FusionInsight-Client/FusionInsight_Cluster_1_HBase_ClientConfig
./install.sh /opt/client
cd /opt/client
执行以下命令配置环境变量:
hbase shell
import java.util.Date
#创建表
create 'data_old','f'
#插入数据
put 'data_old',Date.new().getTime(),'f:content','{"p_id":"100001","p_name":"<张家界-凤凰-天门山-玻璃栈道飞机5日游>","price":"2141"}'
put 'data_old',Date.new().getTime(),'f:content','{"p_id":"100002","p_name":"<丽江-香格里拉-泸沽湖双飞7日游>","price":"4429"}'
put 'data_old',Date.new().getTime(),'f:content','{"p_id":"100003","p_name":"<香格里拉-昆大丽3飞6日游>","price":"2479"}'
put 'data_old',Date.new().getTime(),'f:content','{"p_id":"100004","p_name":"<桂林-阳朔-古东瀑布-世外桃源双飞5日游>","price":"2389"}'
put 'data_old',Date.new().getTime(),'f:content','{"p_id":"100005","p_name":"<海南三亚-无自费5日游>","price":"2389"}'
put 'data_old',Date.new().getTime(),'f:content','{"p_id":"100006","p_name":"<成都-九寨沟-黄龙-花湖-红原-九曲双飞7日游>","price":"3729"}'
put 'data_old',Date.new().getTime(),'f:content','{"p_id":"100007","p_name":"<海南三亚5日游>","price":"2168"}'
put 'data_old',Date.new().getTime(),'f:content','{"p_id":"100008","p_name":"<海南三亚五星0购物6日游>","price":"2916"}'
put 'data_old',Date.new().getTime(),'f:content','{"p_id":"100009","p_name":"<厦门双飞4日游>","price":"1388"}'
put 'data_old',Date.new().getTime(),'f:content','{"p_id":"100010","p_name":"<绵阳-九寨-黄龙-都江堰-成都双飞5日游>","price":"2899"}'
put 'data_old',Date.new().getTime(),'f:content','{"p_id":"100011","p_name":"<桂林-阳朔-古东-世外桃源双飞4日游>","price":"2249"}'
put 'data_old',Date.new().getTime(),'f:content','{"p_id":"100012","p_name":"<成都-九寨沟-黄龙双飞6日游>","price":"2611"}'
put 'data_old',Date.new().getTime(),'f:content','{"p_id":"100013","p_name":"<版纳-香格里拉-昆大丽4飞一卧8日游>","price":"3399"}'
put 'data_old',Date.new().getTime(),'f:content','{"p_id":"100014","p_name":"<成都-都江堰-黄龙九寨沟双飞6日游>","price":"2989"}'
put 'data_old',Date.new().getTime(),'f:content','{"p_id":"100015","p_name":"<桂林-大漓江-阳朔-龙脊梯田双飞4日游>","price":"2048"}'
put 'data_old',Date.new().getTime(),'f:content','{"p_id":"100016","p_name":"<长沙-张家界-黄龙洞-天门山-凤凰双飞7日游>","price":"3141"}'
插入成功后,使用scan命令查看data_old数据表:
scan 'data_old'
新集群HBase建表
使用同样的方法在新集群创建表
下载hbase客户端
在右上角选择“更多 > 下载客户端”,弹出“下载客户端”信息提示框。
安装 同上
输入hbase shell进入hbase命令行:
hbase shell
import java.util.Date
#创建表
create 'data_new','f'
使用scan命令查看data_new数据表:
scan 'data_new'
创建CDM链接
进入CDM界面,点击“作业管理”
在“连接管理”标签下点击“新建连接”。
配置对应的HBase连接。
类似地,我们需分别针对mrs_old和mrs_new创建两个MRS HBase连接。先创建针对mrs_old的连接。
选择MRS HBase,点击下一步。
配置基本参数。
① 名称:HBase_old
② 连接器:HBase
③ HBase类型:MRS
④ Manage IP:在右侧点击“选择”按钮,找到自己创建的mrs_old,点击该集群名称,会自动映射到该集群的Active Master节点IP
⑤ 用户名:admin
⑥ 密码:设置为自己购买MRS集群时的密码
⑦ 认证类型:SIMPLE
⑧ HBase版本:HBASE_2_X
⑨ 运行模式:EMBEDDED
⑩ 是否使用集群配置:否
类似的,再建立一个到mrs_new集群Hive的连接
① 名称:HBase_new
② 连接器:HBase
③ HBase类型:MRS
④ Manage IP:在右侧点击“选择”按钮,找到自己创建的mrs_new,点击该集群名称,会自动映射到该集群的Active Master节点IP
⑤ 用户名:admin
⑥ 密码:设置为自己购买MRS集群时的密码
⑦ 认证类型:SIMPLE
⑧ HBase版本:HBASE_2_X
⑨ 运行模式:EMBEDDED
⑩ 是否使用集群配置:否
确认无误后点击“测试“。测试可能需要花费一定时间,请耐心等待约半分钟。测试通过后点击保存,即可保存所创建的连接了。
两个连接都创建成功后,完成后回到连接管理界面,可以看到所创建的连接如下:
新建表迁移作业
进入“ 表/文件“迁移界面
点击“新建作业“。
配置信息如下:
作业名称:HBaseQYCS
源端作业配置
源连接名称:下拉选择HBase_old
表名:下拉选择data_old
整表迁移:是
目的端作业配置
目的连接名称:下拉选择HBase_new
表名:下拉选择data_new
导入前清空数据:否
自动创表:下拉选择“不存在时创建”
确认无误后点击“下一步“,进入任务配置的界面。
同样,这一步可配置失败重试机制,防止因网络问题导致迁移失败,同时在高级选项中还可根据迁移作业大小配置作业的并发度。由于我们的演示数据量不大,因此不做配置,保持默认即可。
确认无误后,点击保存并运行。任务提交后等待约5秒左右即可完成迁移。
使用Xfce回到mrs_new集群,进入HBase操作界面(需按之前类似步骤安装HBase客户端).
hbase shell
使用list命令查看是否有data_new数据表:
list
然后查看数据是否成功导入
scan 'data_new'