HIve 数据迁移

1.跨Hadoop平台之间的Hive表迁移操作

1.1 分析

实现两个hadoop平台之间的数据迁移,需要将原平台的Hive表元数据文件使用export导出到HDFS文件系统。通过Distcp命令将导出的元数据文件迁移到新集群的HDFS文件中,最后在新集群中通过import命令导入表。

1.2 要求

条件要求
Hadoop Hive Zookeeper服务正常启动,service check 正常
网络两个集群之间的网络能够互通
权限具备文件的操作权限
其它YARN containers至少分配1GB内存

1.3 实现过程

1.3.1 导出元数据文件

该操作在原平台执行,将Hive表中的元数据文件导出到原集群的HDFS文件中,在Hive中执行

hive> export table customers to '/redoop/export/customers';

在HDFS文件系统查看到结果

[hdfs@cloud01 root]$ hdfs dfs -text /redoop/export/customers/_metadata

1.3.2 数据迁移

该操作在新平台操作,使用distcp将原平台/redoop/export/customers文件的内容迁移到新平台,执行

[hdfs@redoop01 root]$ hadoop distcp -skipcrccheck -update hdfs://192.168.0.82:8020/redoop/export/customers /redoop/import/customers

说明:

-skipcrccheck 参数是跳过hadoop版本检测

-update 增量更新,如果两文件相同则不更新

hdfs://192.168.0.82:8020/redoop/export/customers 原平台导出customers表元数据文件的路径

/redoop/import/customers 新平台要存放的路径

在新平台的HDFS文件系统查看导入成功结果

[hdfs@redoop01 root]$ hdfs dfs -text /redoop/import/customers/_metadata

1.3.3 生成表

该操作在新平台操作,使用import命令生成表,在hive中执行

hive> import table customers_import from '/redoop/import/customers';

查看导入结果

hive> show tables;
hive> select * from customers_import limit 10;

2. mysql(MariaDB )元数据文件迁移

2.1 分析

要将mysql(MariaDB )中的Hive元数据信息进行迁移只需要将原集群中的Hive创建的元数据表迁移到新集群即可。

2.2 要求

要求条件
mysql(MariaDB)新集群中需要有mysql或maridb(使用CRH6.X安装的集群已经有MariaDB)
驱动mysql-connector-java.jar(使用CRH6.X安装的集群已经有,在/usr/share/java)
权限具备操作权限

2.3 实现过程

本过程的默认环境已经部署了CRH6.X系列的高可用集群。

2.3.1 新建数据库

该操作在新集群上操作,首先需要登陆mysql(MariaDB)的安装主机

1.执行以下命令登入数据库

[root@redoop02 ~]# mysql

2.新建Hive原数据库

MariaDB [(none)]> create database hive2;

3.为新建数据库建立相关用户

MariaDB [(none)]> CREATE USER 'hive'@'localhost' IDENTIFIED By 'admin';
Query OK, 0 rows affected (0.03 sec)
​
MariaDB [(none)]> GRANT ALL PRIVILEGES ON hive2.* TO 'hive'@'localhost';
Query OK, 0 rows affected (0.00 sec)
​
MariaDB [(none)]> CREATE USER 'hive'@'%' IDENTIFIED By 'admin';
Query OK, 0 rows affected (0.00 sec)
​
MariaDB [(none)]> GRANT ALL PRIVILEGES ON hive2.* TO 'hive'@'%';
Query OK, 0 rows affected (0.00 sec)
​
MariaDB [(none)]> CREATE USER 'hive'@'redoop02' IDENTIFIED By 'admin';
Query OK, 0 rows affected (0.00 sec)
​
MariaDB [(none)]> GRANT ALL PRIVILEGES ON hive2.* TO 'hive'@'redoop02';
Query OK, 0 rows affected (0.00 sec)
​

说明:

IDENTIFIED By 'admin'; admin为用户设置的密码

GRANT ALL PRIVILEGES ON hive2.* TO 'hive'@'localhost' 允许远程访问hive2元数据表的内容

redoop02为新集群中安装mysql(MariaDB) 的主机

4.刷新配置

该过程必须操作

MariaDB [(none)]> FLUSH PRIVILEGES;

2.3.2 导出数据

在原集群的使用mysql命令将Hive的元数据存放库导出

[root@cloud02 opt]# mysqldump  --databases hive > hive2.sql

如果原集群的mysql(MariaDB)有密码,则需要执行

mysqldump -uuname -ppasswd  --databases

2.3.3 导入数据

1.将生成的hive2.sql文件拷贝到新集群mysql(MariaDB)安装的机器

2.导入数据,执行

[root@redoop02 opt]# mysql hive2 < ./hive2.sql 

3.查看生成的数据库hive2

MariaDB [(none)]> show databases;

4.查看hive2中的元数据表

MariaDB [hive2]> use hive2;
MariaDB [hive2]> show tables;
​

2.3.4 修改hive配置

1.登陆CRH的管理界面,点击hive -> 配置 ->advanced ->hive metastore

2.在 Hive Database选中Existing MySQL / MariaDB Database ,修改database name 为你刚才创建的,密码也同样修改,点击测试连接,测试连接成功后点击保存

3.按照提示,重启服务

4.查看迁移效果

在新集群上进入hive,查看原集群的hive中的数据库,表是否存在

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐