HDFS数据(跨集群)迁移
一、数据迁移使用场景
1 2 3 | 1.冷热集群数据同步、分类存储 2.整体数据整体搬迁 3.数据准实时同步(备份) |
二、
1 2 3 4 | 1.网络传输带宽及时间,是否会影响现有业务 2.性能,单机?多线程?分布式? 3.是否正常增量同步 4.数据迁移的同步性(同步单位时间数据超过单位时间) |
三、
1 2 3 4 5 6 7 8 | distcp(分布式拷贝)是用于大规模集群内部和集群之间拷贝的工具。 它使用 Map/Reduce 实现文件分发,错误处理和恢复,以及报告生成。 它把文件和目录的列表作为 map 任务的输入,每个任务会完成源列表中部分文件的拷贝。 由于使用了 Map/Reduce 方法,这个工具在语义和执行上都会有特殊的地方。 这篇文档会为常用 distcp 操作提供指南并阐述它的工作模型。 特性: 1.hadoop自带,并支持带宽限流 2.高性能,底层使用MapReduce 进行分布式计算 3.支持增量数据同步,主要有以下三个参数: update(只拷贝不存在的文件或目录):解决新增文件、目录的同步 append(追加写目标路径下已存在的文件) :解决已存在文件的增量同步 diff(通过快照对比信息同步源端路径和目标路径):解决删除或重命名文件的同步 |
3.2 命令指南
参考链接:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | hadoop distcp usage: distcp OPTIONS [source_path...] <target_path> -append 拷贝文件时支持对现有文件进行追加写操作 -async 异步执行distcp 拷贝任务 -bandwidth <arg> 对每个Map任务的带宽限速 -delete 删除对于源端多出的文件或目录 -diff <arg> 通过快照diff信息进行数据同步 -overwrite 以覆盖的方式进行拷贝,如果目标端存在,则直接覆盖 -p <arg> 拷贝数据时,扩展信息保留,如权限 块大小信息 -skipcrccheck 拷贝数据时是否跳过 checksum校验 -update 拷贝数据时只拷贝相对于源端,目标端不存在的文件数据 -i 忽略失败 -f <urllist_uri> 将urlist_uri作为源文件列表 -filters 排除指定路径和文件不做拷贝 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 1.跨集群拷贝 其中source_path 、target_path 需要带上地址前缀以区分不同的集群 例如: hadoop distcp hdfs: //nn1:8020/foo/a hdfs://nn2:8020/bar/foo (nn1 nn2 分别表示两个集群的namenode) 上面的命令表示从nnl集群拷贝/foo/a路径下的数据到nn2集群的/ bar/foo路径下,注意,源路径必须是绝对路径。 2.通过命令行指定多个源目录 hadoop distcp hdfs: //nn1:8020/foo/a hdfs://nn1:8020/foo/b hdfs://nn2:8020/bar/foo 3.通过文件指定多个源目录 hadoop distcp -f hdfs: //nn1:8020/srclist hdfs://nn2:8020/bar/foo 其中 srclist 的内容格式是 hdfs: //nn1:8020/foo/a hdfs: //nn1:8020/foo/b 4.排除指定文件不拷贝 adoop distcp -filters /path/to/filterfile.txt hdfs: //nn1:8020/source/path hdfs://nn2:8020/destination/path # # filterfile.txt 在本地文件系统上 # filterfile.txt文件格式 .*test.* # 正则表达式法 /source/test # 在源集群上 hdfs: //0.0.0.0:8020/source/test # 在目标集群上,需要写全路径 |
3.4 其他
1 2 3 4 5 6 7 8 9 10 11 | 1.map数目 distcp会尝试着均分需要拷贝的内容,这样每个map拷贝差不多相等大小的内容。 但因为文件是最小的拷贝粒度,所以配置增加同时拷贝(如map)的数目不一定会增加实际同时拷贝的数目以及总吞吐量。 如果没使用 -m选项,distcp会尝试在调度工作时指定map的数目 为 min (total_bytes / bytes.per.map, 20 * num_task_trackers), 其中 bytes.per.map默认是256MB。 建议对于长时间运行或定期运行的作业,根据源和目标集群大小、拷贝数量大小以及带宽调整map的数目。 hadoop distcp -Ddistcp.bytes.per.map=1073741824 -Ddfs.client.socket-timeout=240000000 -Dipc.client.connect.timeout=40000000 -i -update hdfs: //nn1:8020/foo/a hdfs://nn1:8020/foo/b hdfs://nn2:8020/bar/foo 2.不同HDFS版本间的拷贝(大版本) 对于不同Hadoop版本间的拷贝,用户应该使用HftpFileSystem。 这是一个只读文件系统,所以distcp必须运行在目标端集群上(更确切的说是在能够写入目标集群的TaskTracker上)。 源的格式是 webhdfs: //<dfs.http.address>/<path> (默认情况 dfs.http.address是 <namenode>:port, prot:3.x 8020,2.x 50070) # 此命令适用于2.x迁移到3.x hadoop distcp webhdfs: //nn1:50070/user/hive/warehouse/demo.db hdfs://nn2:8020/user/hive/warehouse |
"一劳永逸" 的话,有是有的,而 "一劳永逸" 的事却极少
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
2018-02-17 CentOS7.4安装部署openstack [Liberty版] (二)