当前位置:网站首页>七夕来袭!还要做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
,则拷贝的结果是未定义的。
边栏推荐
- SMB + SMB2: Accessing shares return an error after prolonged idle period
- 攻防世界-PWN-new_easypwn
- Confessing in the era of digital transformation: Mai Cong Software allows enterprises to use data in the easiest way
- RT-Thread记录(一、RT-Thread 版本、RT-Thread Studio开发环境 及 配合CubeMX开发快速上手)
- Go编译原理系列6(类型检查)
- 公众号如何运维?公众号运维专业团队
- Go compilation principle series 6 (type checking)
- 产品太多了,如何实现一次登录多产品互通?
- Jenkins使用手册(2) —— 软件配置
- 浅析WSGI协议
猜你喜欢
皕杰报表的下拉框联动
深入理解 Istio 流量管理的超时时间设置
Custom filters and interceptors implement ThreadLocal thread closure
入门 Polkadot 平行链开发,看这一篇就够了
【综合类型第 35 篇】程序员的七夕浪漫时刻
NowCoderTOP35-40 - continuous update ing
Still looking for a network backup resources?Hurry up to collect the following network backup resource search artifact it is worth collecting!
Huawei's lightweight neural network architecture GhostNet has been upgraded again, and G-GhostNet (IJCV22) has shown its talents on the GPU
【温度预警程序de开发】事件驱动模型实例运用
How can project cost control help project success?
随机推荐
告白数字化转型时代:麦聪软件以最简单的方式让企业把数据用起来
气象数据数据处理实例——matlab字符串切割匹配与R语言日期匹配(数据拼接)
浅析WSGI协议
如何选币与确定对应策略研究
Can MySQL use aggregate functions without GROUP BY?
012_SSS_ Improving Diffusion Model Efficiency Through Patching
[Unity] [UGUI] [Display text on the screen]
DFINITY 基金会创始人谈熊市沉浮,DeFi 项目该何去何从
Four years of weight loss record
【MindSpore易点通机器人-01】你也许见过很多知识问答机器人,但这个有点不一样
入门 Polkadot 平行链开发,看这一篇就够了
IDEA performs the Test operation, resulting in duplicate data when data is inserted
公众号如何运维?公众号运维专业团队
What is the function of the regular expression replaceFirst() method?
项目成本控制如何帮助项目成功?
2022华数杯数学建模思路分析交流
【综合类型第 35 篇】程序员的七夕浪漫时刻
第五章:redis持久化,包括rdb和aof两种方式[通俗易懂]
How to choose coins and determine the corresponding strategy research
How does the official account operate and maintain?Public account operation and maintenance professional team