• 七夕来袭!还要做CDH数据迁移怎么办?来看看DistCp


    一、背景

    • 由于公司现有CDH集群架设在虚拟机之上,节点数较少、节点硬件及网络资源受限,同时考虑到后续业务不断壮大的情况,旧集群性能已无法满足需求,迫切需要切换至配置更高的新集群。
    • 在不影响现有业务的情况下迁移数据,确保新旧集群的顺利衔接和平稳过渡,同时确保新集群中的业务数据准确无误。
    • 为减小对目前环境的影响,采用先搭建新集群然后同步业务数据的方案。
    • 项目中涉及的业务数据均存储在HDFS上,迁移推荐使用DistCp(分布式拷贝)工具。

    二、数据迁移

    2.1、DistCp简介(来自于官网)

    2.1.1 基本概述

    • 该工具用于大规模集群内部和集群之间数据拷贝,它使用Map/Reduce实现文件分发,错误处理和恢复,以及报告生成。 它把文件和目录的列表作为map任务的输入,每个任务会完成源列表中部分文件的拷贝。

    2.1.2 使用方法

    hadoop distcp hdfs://nn1:8020/foo/bar hdfs://nn2:8020/bar/foo
    
    • 1
    • 这条命令会把nn1集群的/foo/bar目录下的所有文件或目录名展开并存储到一个临时文件中,这些文件内容的拷贝工作被分配给多个map任务, 然后每个TaskTracker分别执行从nn1nn2的拷贝操作。注意DistCp使用绝对路径进行操作。

    三、全量初始化迁移

    3.1 元数据迁移

    1) 获取旧集群所有数据库下的表

    #!/bin/bash
    hive_databases='stg
    ods
    dm
    default'
    for db in $hive_databases
    do
       hive -e "use $db; show tables;" > ./db_tables/${db}_all_tables.txt
    cat ${db}_all_tables.txt |while read eachline
    do
         hive -e "use $db; show create table $eachline;" >>${db}_tablesDDL.sql
       done
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    2) 调整脚本

    在生成的SQL文件中批量修改pathlocation指向新集群的namenode

    3) 在新集群上创建相关数据库及表

    hive> create database stg;
    hive> create database ods;
    hive> create database dm;
    
    • 1
    • 2
    • 3

    3.2 业务数据迁移

    配置好/etc/hosts,保证新旧集群网络已打通。

    #!/bin/bash
    hive_databases='stg
    ods
    dm
    default'
    for db in $hive_databases;do
    	tbl_file=`ls ./db_tables|grep $db`
    	for tbl in `cat ./db_tables/$tbl_file`
    	do
    	hadoop distcp -D ipc.client.fallback-to-simple-auth-allowed=true -overwrite hdfs://nn1:8020/user/hive/warehouse/$db.db/$tbl hdfs://nn2:8020/user/hive/warehouse/$db.db/$tbl
    	hive -e "use $db; msck repair table $tbl;"
    	echo "hadoop distcp -D ipc.client.fallback-to-simple-auth-allowed=true hdfs://nn1:8020/user/hive/warehouse/$db.db/$tbl hdfs://nn2:8020/user/hive/warehouse/$db.db/$tbl" >> distcp_for_${db}.txt
    	done
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    3.3 数据迁移示例

    示例把表stg.wd_windcustomcode由旧集群迁移到新集群

    1) 获取旧集群的建表语句

    hive -e "use stg; show create table wd_windcustomcode;" >>stg_tablesDDL.sql
    
    • 1

    修改stg_tablesDDL.sql中LOCATION指向新集群节点,并在表名前加上库名前缀

    2) 在新集群上创建相关数据库及表

    hive> create database stg;
    [root@cdh07 ~]# hive -f stg_tablesDDL.sql
    
    • 1
    • 2

    3) 执行迁移命令

    [root@cdh07 ~]# hadoop distcp -D ipc.client.fallback-to-simple-auth-allowed=true -overwrite hdfs://cdh06.businessmatrix.com.cn:8020/user/hive/warehouse/stg.db/wd_windcustomcode \ hdfs://cdh601.businessmatrix.com.cn:8020/user/hive/warehouse/stg.db/wd_windcustomcode
    
    • 1

    4) 修复新集群元数据

    hive> msck repair table stg.wd_windcustomcode
    
    • 1

    5) 注意事项

    服务器/etc/hosts文件需添加对应主机名解析

    四. 日常增量迁移

    [root@cdh07 ~]# hadoop distcp -update hdfs://cdh06.businessmatrix.com.cn:8020/user/hive/warehouse/stg.db/wd_windcustomcode hdfs://cdh601.businessmatrix.com.cn:8020/user/hive/warehouse/stg.db/wd_windcustomcode
    
    • 1

    注:在使用update选项的情况下,如果被拷贝文件在目标位置中已经存在,但文件内容不同,则目标位置的文件内容会被更新

    五、注意事项

    5.1 Map数目

    DistCp会尝试着均分需要拷贝的内容,这样每个map拷贝差不多相等大小的内容。 但因为文件是最小的拷贝粒度,所以配置增加同时拷贝(如map)的数目不一定会增加实际同时拷贝的数目以及总吞吐量。
    如果没使用-m选项,DistCp会尝试在调度工作时指定map的数目 为 min (total_bytes / bytes.per.map, 20 * num_task_trackers), 其中bytes.per.map默认是256MB
    建议对于长时间运行或定期运行的作业,根据源和目标集群大小、拷贝数量大小以及带宽调整map的数目。

    5.2 不同HDFS版本间的拷贝

    对于不同Hadoop版本间的拷贝,用户应该使用HftpFileSystem。 这是一个只读文件系统,所以DistCp必须运行在目标端集群上(更确切的说是在能够写入目标集群的TaskTracker上)。 源的格式是 hftp:/// (默认情况dfs.http.address是 :50070)

    5.3 Map/Reduce和副效应

    像前面提到的,map拷贝输入文件失败时,会带来一些副效应。

    • 除非使用了-i,任务产生的日志会被新的尝试替换掉。
    • 除非使用了-overwrite,文件被之前的map成功拷贝后当又一次执行拷贝时会被标记为 “被忽略”。
    • 如果map失败了mapred.map.max.attempts次,剩下的map任务会被终止(除非使用了-i)。
    • 如果mapred.speculative.execution被设置为 finaltrue,则拷贝的结果是未定义的。
  • 相关阅读:
    分布式事务理论
    怎么给视频添加水印?几个简单的步骤就搞定
    css过渡属性的简单使用
    python的opencv操作记录(十)——图像融合
    深度学习 Lecture 9 信息增益、One-hot、回归树、集成树、随机森林、XGBoost模型
    机器学习笔记之隐马尔可夫模型(五)学习问题——EM算法
    效率倍增啊,20个面向数据科学家的自动机器学习(AutoML)库来了
    左偏树学习笔记
    北京工商大学计算机考研资料汇总
    Linux企业应用——Docker(一)之初步了解Docker以及Docker的安装
  • 原文地址:https://blog.csdn.net/qq_38617531/article/details/126163900