公司重新搭建CDH6.0.1,并把旧集群Hive1.1迁移新集群Hive2.1,记录一下过程。
步骤:
目录
1. 迁移Hive数据和MySQL中的matastore
通过DistCp拷贝Hive数据到新集群,并从MySQL中导出Hive的元数据上传到新集群,最后在新集群MySQL中导入Hive元数据,并更新Hive版本,修改信息。
1. 迁移Hive数据至新集群,在新集群上执行
版本差异不大,使用hdfs
hadoop distcp -skipcrccheck -update hdfs://hadoop-master:8020/user/hive/* \
hdfs://cdh-master:8020/user/hive
#-update 如果新集群目标目录已经存在,替换差异文件,不存在则不用这个参数。
#-skipcrccheck -update 忽略crc检查,hadoop版本相同则不需要,-skipcrccheck必须与-update同时使用才能生效。
版本差异大,使用htfp
hadoop distcp -skipcrccheck -update htfp://hadoop-master:50070/user/hive/* \
hdfs://cdh-master:8020/user/hive
#因为从Hadoop2.6迁移到Hadoop3.0版本,使用hftp方式。
#源集群的格式是 hftp://<dfs.http.address>/<path> ,默认设置dfs.http.address是 <namenode>:50070。
#新的webhdfs协议代替了hftp后,源地址和目标地址都可以使用http协议webhdfs,可以完全兼容 。
hadoop distcp -skipcrccheck -update webhdfs://hadoop-master:50070/user/hive/* \
webhdfs://cdh-master:50070/user/hive
2. 在源集群上MySQL导出Hive metastore
mysqldump -uroot -p123456 --databases hive > mysql_hive.sql
#--skip-lock-tables,导出时会锁定所有表,如果不锁表,一边导出一边录入数据,会出问题