Hadoop 集群间使用DistCp同步数据(高可用)-相同版本

Hadoop 集群间使用DistCp同步数据(高可用)-相同版本

版本:Hadoop2.7.7

一、关于集群间数据同步

  1. 集群间数据同步,可以从原集群推送数据到目标集群,此时会为会占用原集群 yarn 中的资源;
  2. 集群间数据同步,也可以从目标集群发起作业,主动拉取原集群的数据,此时消耗的是目标集群的YARN资源;
  3. 如果原集群是生产集群,一般在目标集群执行命令hadoop distcp来发起作业,通过拉的方式来同步数据,此时不会消耗原集群即生产集群的YARN资源;
  4. 当原集群和目标集群大版本不同时,(比如在 hadoop 1.x 跟 hadoop 2.x 之间同步数据),需要使用 webhdfs 协议,即通过以下格式指定远端集群:webhdfs://<namenode_hostname>:<http_port>;(当然,既可以从原集群推数据,也可以从目标集群拉数据);
  5. 当原集群和目标集群大版本相同时,(比如都是 hadoop 2.x或都是hadoop 3.x),推荐使用 hdfs 协议,此时性能比 webhdfs 更好;
  6. 如果 webhdfs 配置了 SSL 加密,则需要使用协议 “swebhdfs://” ;

二、前提条件:

  1. 源集群和目标集群的 NameNode 都是高可用的,且在不同的服务器上运行。
  2. 源集群和目标集群都已经安装了 Hadoop,并配置了相应的参数和组件,例如 HDFS、YARN、MapReduce 等。
  3. 迁移之前需要把两个集群的所有节点都互通/etc/hosts文件(重要,包括各个数据节点)
  4. 源集群和目标集群之间的网络连接可靠,且支持 SSH 和 RPC 等通信协议。同时需要确保端口号设置和防火墙策略等安全措施符合要求
  5. 在进行数据复制和同步操作前,应该进行一次充分的测试,并检查日志和错误信息,以确保操作的正确性和完整性。
  6. 由于迁移数据运行了mr任务,对集群资源有一定的消耗。

具体的端口:

使用 DistCp 工具进行 Hadoop 集群之间的数据复制和同步,需要保证以下端口的互通:

  1. HDFS 端口:DistCp 使用 HDFS 协议来读取和写入数据,因此需要确保 HDFS 端口在不同的集群之间可用,并允许相应的数据传输操作。
    • 默认为 8020(NameNode RPC 端口)或者 9000(HDFS 系统文件对外访问端口)
  2. SSH 端口:默认情况下,DistCp 通过 SSH 远程执行复制任务。这意味着,在两个集群之间复制数据需要确保 SSH 端口的可用性和连接权限设置。
    • 默认为 22
  3. MapReduce 端口:如果要使用兼容模式进行数据复制和同步,则还需要确保 MapReduce 端口在两个集群之间可用,并允许相应的作业提交和执行操作。
    • MapReduce 的每个组件都有不同的端口,其中 JobTracker 和 TaskTracker 组件使用的端口如下,默认情况下 JobTracker 端口为 54311,TaskTracker 端口为 50060

因此,在使用 DistCp 工具进行 Hadoop 集群之间的数据复制和同步操作时,需要确保以上端口的互通和设置,以避免因网络连接或配置不当而导致的数据传输失败或异常

四、关于开启了 kerberos 安全认证后的数据同步

  1. 如果原集群和目标集群都启用了kerberos认证 (hadoop.security.authentication=kerberos),需要首先做 kerberos 的 realm 互信,然后才能通过推或拉的方式执行 dictcp 进行数据同步;

  2. 如果原集群与目标集群一个启用了kerberos认证,另一个没有启用kerberos认证,为简单起见,可以在启用了kerberos认证的集群中执行distCp,通过推或拉的方式进行数据同步;

五、具体命令:

如果两个 Hadoop 集群的 NameNode 都是高可用的,可以使用 DistCp 命令进行数据复制和同步。具体命令如下:

hadoop distcp [OPTIONS] <srcurl> <desturl>

其中,[OPTIONS] 是可选的参数,<srcurl><desturl> 分别是源和目标文件系统的 URL。

假设源集群名称为 src_cluster,目标集群名称为 dst_cluster,则可以使用以下命令复制源集群中的数据到目标集群:

hadoop distcp -update -skipcrccheck -delete -bandwidth 50 -m 100 -mapredSudo hdfs://src_cluster/user/hadoop/example hdfs://dst_cluster/user/hadoop/backup

命令中使用了以下参数:

  • -update:只复制更新时间较新的文件;
  • -skipcrccheck:跳过 CRC 校验;
  • -delete:删除目标集群中比源集群中旧或不存在的文件或目录;
  • -bandwidth 50:限制最大带宽,以避免过多的网络流量阻塞;
  • -m 100:设置最大 mapper 数量;
  • -mapredSudo:启用兼容模式。

六、集群名称之间识别配置:

在使用 DistCp 进行跨集群数据复制和同步时,需要确保源集群和目标集群之间可以相互访问并识别。通常情况下,需要在源集群和目标集群的 Hadoop 配置文件中进行相应的配置,以便于两个集群之间建立连接。

具体来说,可以将目标集群的 NameNode 或 ResourceManager 的 IP 地址和端口号添加到源集群的 core-site.xmlhdfs-site.xml 配置文件中。例如,在源集群中添加目标集群的 NameNode 地址和端口号的配置如下:

<property>
  <name>fs.defaultFS</name>
  <value>hdfs://src_cluster:8020,hdfs://dst_cluster:8020</value> 
</property>

<property>
  <name>dfs.namenode.rpc-address.dst_cluster</name>
  <value>node2:8020</value>
</property>

<property>
  <name>yarn.resourcemanager.hostname.dst_cluster</name>
  <value>node2</value>
</property>

上述示例中,

  1. fs.defaultFS 属性为源集群和目标集群的 NameNode URL。

  2. dfs.namenode.rpc-address.dst_cluster 属性指定了目标集群的 NameNode 地址和端口号。

  3. yarn.resourcemanager.hostname.dst_cluster 属性则指定了目标集群的 ResourceManager 主机名。这些参数可以根据实际情况进行相应的修改和调整。

  4. 在配置好集群之后,可以通过 hdfs dfsadmin -report 命令来检查 HDFS 的状态,并查看集群是否能够正常运行并连通。

  5. 如果所有组件都正常启动,则可以使用 DistCp 命令进行跨集群数据复制和同步操作。

七、DistCp优势特性

  1. 带宽限流
  • DistCp是支持带宽限流的,使用者可以通过命令参数bandwidth来为程序进行限流,原理类似于HDFS中数据Balance程序的限流.
  1. 增量数据同步
  • 对于增量数据同步的需求,在DistCp中也得到了很好的实现.通过update,append 和 diff 2个参数能很好的解决.官方的参数使用说明:

Update: Update target, copying only missing files or directories

Append: Reuse existing data in target files and append new data to them if possible.

Diff: Use snapshot diff report to identify the difference between source and target.

第一个参数,解决了新增文件目录的同步;第二参数,解决已存在文件的增量更新同步;第三个参数解决删除或重命名文件的同步.

这里需要额外解释一下diff的使用需要设置2个不同时间的snapshot进行对比,产生相应的DiffInfo.在获取快照文件的变化时,只会选择出DELETE和RENAME这2种类型的变化信息。

  1. 高效的性能
  • 执行的分布式特性

  • 高效的MR组件

八、DistCp 的底层工作机制

新版 DistCp 底层有以下组件,其各自的职责如下:

  1. DistCp Driver:负责解析 DistCp 的命令行参数,并编排协调具体的拷贝任务(首先调用 copy-listing-generator 获得需拷贝的文件列表,然后配置并提交 Map-Reduce 拷贝任务,最后根据配置项返回 MR 任务句柄并推出,或等待 MR任务执行结束;)

  2. Copy-listing generator:负责解析给定的 source-paths(目录或文件,可以包含通配符),生成待拷贝的文件/目录列表,并输出到一个 SequenceFile;

  3. Input-formats 和 Map-Reduce:负责读取 Copy-listing generator 生成的 SequenceFile 中的待烤包的文件列表,并执行实际的文件拷贝;

九、DistCp 的重要参数讲解

DistCp 提供了多种参数,来控制拷贝任务的各种细节,经常使用到的关键参数有 -update, -delete, -overwrite, -m, -bandwidth,-diff,-p,-i 等:

  • -m <num_maps>:控制 map 任务的最大个数;(实际的 map 任务数,不会大于待拷贝的文件的个数;更多的 map 数不一定会提升整体IO吞吐);

  • -bandwidth:控制每个 map 任务可用的最大带宽,单位 MB;

  • -p[rbugpcaxt]:控制是否保留源文件的属性,rbugpcaxt 分别指:replication number, block size, user, group, permission,checksum-type, acl, xattr,以及 tiemstamp;

  • -skipcrccheck:控制检查源和目标文件差异以生成待拷贝文件列表时,是否跳过 CRC 校验;

  • -update: 拷贝目标目录下不存在而源目录下存在的文件,或目标目录下和源目录在文件大小/块大小/checksum 上不同的文件;

  • -overwrite: 覆盖目标目录下的同名文件。(如果某个 map 任务执行失败且没有指定 -i 参数,则所有的待拷贝的文件,包括拷贝失败的文件,都会被重新拷贝);

  • -i: 忽略拷贝过程中某些 MAP 任务的错误,继续执行其余的 map拷贝任务,而不是直接失败整个作业;(默认情况下,如果有某个 map 任务失败的次数达到了 mapreduce.map.maxattempts,则未完成的 map 任务都会被 kill;);

  • -delete: 删除目标目录下存在,但源目录下不存在的文件;该参数只能和 -update 或 -overwrite 配合使用;

    • -diff 和 -rdiff:控制是否结合使用快照机制,会基于两个快照的差异(snapshot diff)来确定待拷贝的文件列表,以下要点需要注意:

    • -diff 和 -rdiff,需要配合选项 -update 一起使用;

    • -diff 和 -rdiff,不能和 -delete 一起使用,否则会报错:java.lang.IllegalArgumentException: -delete and -diff/-rdiff are mutually exclusive. The -delete option will be ignored;

    • 该命令的前提条件:需要源目录下有指定的两个快照 from_snapshot 和 to_snapshot;

    • 该命令的前提条件:需要目标目录下有快照 from_snapshot;

    • 该命令的前提条件:需要目标目录在前期制作了 from_snapshot 快照后,没有新的文件写操作 (create, rename, delete);

    • 该命令执行完毕后,目标目录下并不会自动创建快照 to_snapshot,如果后续还需要基于快照来做增量同步,需要手工在同步完毕后对目标目录制作快照 to_snapshot,为后续基于快照的同步(hadoop distcp -diff -update)做好准备;

十、易踩的坑 - skipcrccheck

  • 参数 -skipcrccheck 的意思是 “Whether to skip CRC checks between source and target paths.”,即是否跳过原路径和目标路径下文件的 crc 校验(CRC:Cyclic Redundancy Check)。

  • 如果指定了该参数,会跳过crc校验,同步作业速度会快些;

  • 但指定该参数后,由于不校验 crc,而是通过文件名和文件大小来发现哪些文件需要进行同步,在极端情况下,可能会漏掉某些需要同步的小文件,比如某些只有少数几条记录的小文件,从而造成数据不一致;

某两个 hive orc 表都只有1条记录,对应的 HDFS 文件也比较小且都是 154 BYTE, 指定参数 skipcrccheck 执行同步操作时,就遗漏了该文件,造成了源目录与目标目录数据的不一致:“sudo -u hdfs hadoop distcp -update -delete -skipcrccheck -pugpb hdfs://cluster/user/hive/warehouse/vin_vin.db/test_user_scp hdfs://cluster/user/hive/warehouse/vin_vin.db/test_user_scp2“:

十一、常用命令总结

  1. 执行数据同步操作时,需要停止对目标目录的其它写操作;
  2. 当没有对原目录的写操作时(即停止了对源目录的写操作),可以使用以下命令来跨集群同步数据:hadoop distcp -delete -update -pugpb -m 10 -bandwidth 5 hdfs://xx.xx/ hdfs://yy.yy/
  3. 当有对原目录的写操作时(即有对原目录的并发写操作),需要结合快照机制来同步数据:hadoop distcp -diff <from_snapshot> <to_snapshot> -update -pugpb
  4. 结合快照机制来同步数据时,有以下前提要求:
  5. 需要源目录下有指定的两个快照 from_snapshot 和 to_snapshot;
  6. 需要目标目录下有快照 from_snapshot;
  7. 需要目标目录在前期制作了 from_snapshot 快照后,没有新的文件写操作如 create/rename/delete (即要求目标目录的当前状态跟原目录的from-snapshot一致);
  8. 该命令执行完毕后,目标目录下并不会自动创建快照 to_snapshot,如果后续还需要基于快照来做增量同步,需要手工在同步完毕后对目标目录制作快照 to_snapshot,为后续基于快照的同步(hadoop distcp -diff -update)做好准备;
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容