当前位置:网站首页>七夕来袭!还要做CDH数据迁移怎么办?来看看DistCp
七夕来袭!还要做CDH数据迁移怎么办?来看看DistCp
2022-08-05 10:19:00 【小林家的史莱姆】
一、背景
- 由于公司现有
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
- 这条命令会把nn1集群的
/foo/bar目录下的所有文件或目录名展开并存储到一个临时文件中,这些文件内容的拷贝工作被分配给多个map任务, 然后每个TaskTracker分别执行从nn1到nn2的拷贝操作。注意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
2) 调整脚本
在生成的SQL文件中批量修改path及location指向新集群的namenode
3) 在新集群上创建相关数据库及表
hive> create database stg;
hive> create database ods;
hive> create database dm;
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
3.3 数据迁移示例
示例把表stg.wd_windcustomcode由旧集群迁移到新集群
1) 获取旧集群的建表语句
hive -e "use stg; show create table wd_windcustomcode;" >>stg_tablesDDL.sql
修改stg_tablesDDL.sql中LOCATION指向新集群节点,并在表名前加上库名前缀
2) 在新集群上创建相关数据库及表
hive> create database stg;
[[email protected] ~]# hive -f stg_tablesDDL.sql
3) 执行迁移命令
[[email protected] ~]# 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
4) 修复新集群元数据
hive> msck repair table stg.wd_windcustomcode
5) 注意事项
服务器/etc/hosts文件需添加对应主机名解析
四. 日常增量迁移
[[email protected] ~]# 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
注:在使用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>/<path> (默认情况dfs.http.address是 <namenode>:50070)。
5.3 Map/Reduce和副效应
像前面提到的,map拷贝输入文件失败时,会带来一些副效应。
- 除非使用了
-i,任务产生的日志会被新的尝试替换掉。 - 除非使用了
-overwrite,文件被之前的map成功拷贝后当又一次执行拷贝时会被标记为 “被忽略”。 - 如果
map失败了mapred.map.max.attempts次,剩下的map任务会被终止(除非使用了-i)。 - 如果
mapred.speculative.execution被设置为final和true,则拷贝的结果是未定义的。
边栏推荐
- 登录功能和退出功能(瑞吉外卖)
- 【MindSpore Easy-Diantong Robot-01】You may have seen many knowledge quiz robots, but this one is a bit different
- 第五章:多线程通信—wait和notify
- 第七章,activiti个人任务分配,动态指定和监听器指定任务委派人「建议收藏」
- Development common manual link sharing
- 产品太多了,如何实现一次登录多产品互通?
- uniapp 连接ibeacon
- 华为轻量级神经网络架构GhostNet再升级,GPU上大显身手的G-GhostNet(IJCV22)
- DFINITY 基金会创始人谈熊市沉浮,DeFi 项目该何去何从
- 19.3 restart the Oracle environment
猜你喜欢

数据中台建设(十):数据安全管理

FPGA: Use of the development environment Vivado

This notebook of concurrent programming knowledge points strongly recommended by Ali will be a breakthrough for you to get an offer from a big factory

阿里全新推出:微服务突击手册,把所有操作都写出来了PDF

如何选币与确定对应策略研究

用KUSTO查询语句(KQL)在Azure Data Explorer Database上查询LOG实战

登录功能和退出功能(瑞吉外卖)

创建一个 Dapp,为什么要选择波卡?

IDEA performs the Test operation, resulting in duplicate data when data is inserted

Technical dry goods | Hausdorff distance for image segmentation based on MindSpore
随机推荐
First Decentralized Heist?Loss of nearly 200 million US dollars: analysis of the attack on the cross-chain bridge Nomad
用户考试分数大于单科科目平均分的查询
浅析WSGI协议
Which big guy has the 11G GI and ojvm patches in April or January 2020, please help?
MySQL事务
GCC编译的时候头文件搜索规则
NowCoderTOP35-40 - continuous update ing
Egg framework usage (2)
Why are RELTABLESPACE values 0 for many tables displayed in sys_class?
Create a Dapp, why choose Polkadot?
Development common manual link sharing
第八章:activiti多用户任务分配
SQL外连接之交集、并集、差集查询
阿里全新推出:微服务突击手册,把所有操作都写出来了PDF
2022 Hangzhou Electric Power Multi-School Session 6 1008.Shinobu Loves Segment Tree Regular Questions
企业的数字化转型到底是否可以买来?
华为轻量级神经网络架构GhostNet再升级,GPU上大显身手的G-GhostNet(IJCV22)
第五章:多线程通信—wait和notify
PHP operation mangoDb
机器学习-基础知识 - Precision, Recall, Sensitivity, Specificity, Accuracy, FNR, FPR, TPR, TNR, F1 Score, Bal