大数据搬迁方案简单实践 _tyt2023

发布时间 2023-12-27 13:19:33作者: 打杂滴

本实验以通过华为云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:/
 注意:弹性公网IP见mrs_old集群详情页
登录集群主节点服务器
查看根目录下是否存在以上三个文件。

 将数据上传至HDFS

在Xfce窗口输入以下命令,同时创建三个路径。

hdfs dfs -mkdir -p /user/personal_dir_data /user/recharge_dir_data /user/usage_dir_data
 
上传本地目录下的数据到HDFS目录

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;
 创建hive_batch数据库,并切换至hive_batch:
create database hive_batch;
use hive_batch;
显示当前数据库下所有表格:
show tables;
 创建personal_data表:

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;
 显示 personal_data 的前5行
select * from hive_batch.personal_data limit 5;
 
创建表recharge_data并导入数据

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;
 创建表usage_data并导入数据

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;
 新集群Hive建库建表
利用Xfce登录mrs_new集群。
进入Hive命令窗口
beeline
显示现有的数据库
show databases;
 创建hive_batch_new数据库,并切换至hive_batch_new:
create database hive_batch_new;
use hive_batch_new;
show tables;
 
创建personal_data表:

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
 执行下列命令,安装客户端到指定目录(绝对路径),例如安装到“/opt/client”目录。
./install.sh /opt/client
 等待客户端安装完成。执行以下命令切换到客户端目录:
cd /opt/client

执行以下命令配置环境变量:
 source bigdata_env
 
输入hbase shell进入hbase命令行:
hbase shell
 在HBase中创建data_old数据表并导入数据。

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
 在HBase中创建data_new数据表。

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'