大数据

CDH集群间的数据迁移方案

2019-11-14  本文已影响0人  勤奋的超跑

       目前不同公司多多少少存在Hive数据库在不同集群间的数据迁移需求,我们只要在CDH新版本集群搭建完成之后,即可进行数据迁移工作,如下描述hive及HDFS数据的迁移。

一、源集群hive表结构的备份

写备份hive数据表ddl脚本如下,在源集群主节点服务器上执行。可自行放在/home/dw目录下:

!/bin/sh

for hive_database in "sjczq_db" "sjjsq_db"

do

sudo -u hive hive -e "use ${hive_database};

         show tables;" > ${hive_database}_tables.txt

rm -f ${hive_database}_tablesDDL.txt

cat ${hive_database}_tables.txt |while read eachline

do

sudo -u hive hive -e "use ${hive_database};

         show create table $eachline;" >>${hive_database}_tablesDDL.txt

         echo ';' >> ${hive_database}_tablesDDL.txt

dones

cone

将导出相应的hive的DDL语句,修改一下对应的path和location为新集群的主节点名称。

如下图所示:

将调整后的DDL语句在新集群环境执行。

由于hive数据库是逐个迁移的,请事先创建好hive数据库;

二、新老集群hive&HDFS数据文件迁移

distcp(分布式拷贝)是用于大规模集群内部和集群之间拷贝的工具

distcp最常用在集群之间的拷贝:

sudo -u hive hadoop distcp hdfs://192.168.201.83:8020/user/hive/warehouse/sjczq_db.db/* hdfs://192.168.220.63:8020/user/hive/warehouse/sjczq_db.db

注意: (1) distcp使用绝对路径进行操作;

            (2) 该命令需要在目标集群上执行;

            (3) 为了保持hive数据文件权限问题,请使用sudo -u hive用户执行;

            (4) -overwrite参数谨慎使用,可不指定操作类型,采用默认即可,若目标文件存在,存在跳过,否则进行同步复制;

这条命令会把集群的/user/hive/warehouse/sjczq_db.db目录下的所有文件或目录名展开并存储到一个临时文件中,这些文件内容的拷贝工作被分配给多个map任务, 然后每个TaskTracker分别执行从83到63的拷贝操作。

若命令中断,可再次执行,不影响之前迁移同步数据表。

三、迁移后数据验证

针对迁移同步后的数据表直接查询,查看数据量及数据字段值是否一致;

1、全量表数据,直接同步即可,数据验证没有问题

2、分区数据表,查询发现数据为空,但是HDFS文件数据已迁移同步

此时需要使用msck repair table new_table;修复新表的分区元数据

修复后分区表正常。

至此hive数据库迁移完成。

上一篇 下一篇

猜你喜欢

热点阅读