HDFS数据(跨集群)迁移

简介: HDFS数据(跨集群)迁移

一、数据迁移使用场景

1

2

3

1.冷热集群数据同步、分类存储

2.整体数据整体搬迁

3.数据准实时同步(备份)

二、考量因素

1

2

3

4

1.网络传输带宽及时间,是否会影响现有业务

2.性能,单机?多线程?分布式?

3.是否正常增量同步

4.数据迁移的同步性(同步单位时间数据超过单位时间)

三、DistCp工具使用

3.1 简介

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 命令指南  

参考链接:https://hadoop.apache.org/docs/r3.1.4/hadoop-distcp/DistCp.html

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            排除指定路径和文件不做拷贝         

3.3 基本使用方法

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

  

 

相关文章
|
1月前
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
38 4
|
1月前
|
SQL
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
33 2
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
84 0
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-23 Sqoop 数据MySQL到HDFS(部分) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
37 0
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
46 0
|
4月前
|
分布式计算 Hadoop
|
4月前
|
分布式计算 Hadoop 关系型数据库
实时计算 Flink版操作报错合集之Hadoop在将文件写入HDFS时,无法在所有指定的数据节点上进行复制,该如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
5月前
|
存储 分布式计算 Hadoop
Hadoop的HDFS数据均衡
【6月更文挑战第13天】
236 3
|
6月前
|
存储 分布式计算 Hadoop
hadoop节点HDFS数据分片过程
【5月更文挑战第18天】
70 1
|
6月前
|
存储 分布式计算 Hadoop