Hadoop集群数仓迁移——distcp命令、分区修复

目前项目涉及需求:迁移Hadoop数仓(由CDH环境迁移到HDP环境),涉及到hive表的重建,以及hdfs上文件的迁移,以及元数据、分区表的修复。

一、建表

hive重建表比较简单,首先show create table tablename;然后把建表语句拷贝下来即可,这里要注意的是,特殊分割符和存储文件格式(默认textfile,项目中设计parquet格式),需要将分割语句和stored as XXX语句也加上。否则会导致hadoop集群的hive建表时的默认的存储格式不一致而报错
这里我写了一个批量建表的shell脚本,如果表非常多可以采用
《批量生成hive建表语句》

二、HDFS文件数据迁移

hdfs的数据迁移,有几种方式可以选择:

1、如果数据在关系型数据库中也存在一份,可以直接使用sqoop命令导入新集群。

2、如果表不是很多,可以先从hdfs上把数据get到本地,随后再load到新集群的hive表中,或直接put进相应的hdfs路径。

3、使用hadoop distcp命令,这个命令是用于大规模集群内部和集群之间拷贝的工具。 它使用Map/Reduce实现文件分发,错误处理和恢复,以及报告生成。 它把文件和目录的列表作为map任务的输入,每个任务会完成源列表中部分文件的拷贝。 由于使用了Map/Reduce方法,这个工具在语义和执行上都会有特殊的地方。
案例:
格式:hadoop distcp 源路径 目标路径

// 集群拷贝,拷贝到HDP测试目录
 hadoop distcp -D ipc

你可能感兴趣的:(Hive,数仓设计和数据处理)