进行hive库迁移过程中碰到的问题
1、hdfs数据迁移过程中,使用hadoop distcp /apps/hive/warehouse/userinfo hdfs://10.11.32.76:8020/apps/hive/warehouse/
将老库的hive的数据复制到新库中,在测试环境报权限错误,需要添加如下配置
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
2、元数据库迁移过程中,都是从mysql到mysql,做法就是导出老库的元数据
mysqldump -uroot -proot --database hive > ./mysql_hive_data.sql (我的环境操作)
然后进入新库的mysql,使用source命令将备份库导入
在导入过程中,由于两个mysql的编码格式不一致,导致数据无法全部导入
经过检查发现,老库使用的是utf8mb4格式,新库使用的utf8格式,导入过程会包字符列最大值超界676byte。解决方法:将备份库中varchar()超过255的全部替换成255,然后将编码格式utf8mb4替换成utf8。完成元数据的迁移。
3、修改元数据中DBS中对应数据库在hdfs上的存储路径。测试新的hive时,发现表信息都已经能查询到,但是数据还是没有,
怀疑需要重新启动hive元数据服务。
将cdh(新库)的hive的元数据服务关闭后,却无法启动起来。排查两天没有解决,决定重装hive
下面是收集的材料:
https://github.com/NetEase/hive-tools 网易开源工具
Hive跨集群迁移数据工作是会出现的事情, 其中涉及到数据迁移, metastore迁移, hive版本升级等。
1. 迁移hdfs数据至新集群
hadoop distcp -skipcrccheck -update hdfs://xxx.xxx.xxx.xxx:8020/user/risk hdfs://xxx.xxx.xxx.xxx:8020/user/
-skipcrccheck 因本次迁移涉及低版本迁移高版本, 如果Hadoop版本则不需要
-update 增量更新, 通过名称和大小比较,源与目标不同则更新
hadoop distcp /apps/hive/warehouse/userinfo hdfs://10.11.32.76:8020/apps/hive/warehouse/(我的环境操作)
hadoop distcp -update /apps/hive/warehouse/ hdfs://10.11.32.76:8020/apps/hive/warehouse/ (差异复制)
xxx.xxx.xxx.xxx这个位置最好使用IP地址,尽量不要使用主机名或集群名称,否则需要配置hosts文件解析
2. 源集群metastore数据备份导出(mysql导出)
mysqldump -u root -p’密码’--skip-lock-tables -h xxx.xxx.xxx.xxx hive > mysql_hive.sql
mysqldump -uroot -p --database hive > mysql_hive_data.sql (我的环境操作)
3. 新的集群导入metastore数据(mysql导入)
mysql -u root -proot --default-character-set=utf8 hvie < mysql_hive.sql
mysql -uroot -p < mysql_data.sql(我的环境操作)
4. 升级hive内容库(如果hive版本需要升级操作,同版本不需要操作)
mysql -uroot -proot risk -hxxx.xxx.xxx.xxx < mysqlupgrade-0.13.0-to-0.14.0.mysql.sql
mysql -uroot -proot risk -hxxx.xxx.xxx.xxx < mysqlupgrade-0.14.0-to-1.1.0.mysql.sql
版本要依据版本序列升序升级,不可跨越版本,如当前是hive0.12打算升级到0.14,需要先升级到0.13再升级到0.14
5. 修改 metastore 内容库的集群信息(重要)
因为夸集群,hdfs访问的名字可能变化了,所以需要修改下hive库中的表DBS和SDS内容,除非你的集群名字或者HA的名字跟之前的一致这个就不用修改了
登录mysql数据库,查看:
mysql> use hive;
mysql> select * from DBS;
+-------+-----------------------+--------------------------------------+---------+------------+------------+
| DB_ID | DESC | DB_LOCATION_URI | NAME | OWNER_NAME | OWNER_TYPE |
+-------+-----------------------+--------------------------------------+---------+------------+------------+
| 1 | Default Hive database | hdfs://HACluster/apps/hive/warehouse | default | public | ROLE |
+-------+-----------------------+--------------------------------------+---------+------------+------------+
1 row in set (0.00 sec)
mysql> select * from SDS;
+-------+-------+------------------------------------------+---------------+---------------------------+-----------------------------------------------+-------------+------------------------------------------------------------+----------+
| SD_ID | CD_ID | INPUT_FORMAT | IS_COMPRESSED | IS_STOREDASSUBDIRECTORIES | LOCATION | NUM_BUCKETS | OUTPUT_FORMAT