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文件系统查看到结果
[[email protected] root]$ hdfs dfs -text /redoop/export/customers/_metadata
1.3.2 数据迁移
该操作在新平台操作,使用distcp将原平台/redoop/export/customers文件的内容迁移到新平台,执行
[[email protected] 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文件系统查看导入成功结果
[[email protected] 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.执行以下命令登入数据库
[[email protected] ~]# 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的元数据存放库导出
[[email protected] opt]# mysqldump --databases hive > hive2.sql
如果原集群的mysql(MariaDB)有密码,则需要执行
mysqldump -uuname -ppasswd --databases
2.3.3 导入数据
1.将生成的hive2.sql文件拷贝到新集群mysql(MariaDB)安装的机器
2.导入数据,执行
[[email protected] 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中的数据库,表是否存在