数据湖实操讲解【数据迁移】第二讲:数据无忧 - 利用 checksum 迁移 HDFS 数据到 OSS

本文涉及的产品
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: 数据湖 JindoFS+OSS 实操干货 36讲 每周二16点准时直播!扫文章底部二维码入钉群,线上准时观看~Github链接:https://github.com/aliyun/alibabacloud-jindofs/blob/master/docs/jindo_distcp/jindo_distcp_overview.md

本期导读 :【数据迁移】第二讲

主题:数据无忧:利用 checksum 迁移 HDFS 数据到 OSS
讲师:焱冰,阿里巴巴计算平台事业部 EMR 技术专家
主要内容:
  • Checksum 技术科普
  • DistCp 技术解密
  • Jindo DistCp 操作实战
直播回放链接:(1/2讲)

https://developer.aliyun.com/live/246728

概念简述

DistCp & Jindo DistCp

DistCp(分布式拷贝)是用于大规模集群内部和集群之间拷贝数据的工具。使用Map/Reduce实现文件分发,错误处理和恢复,以及报告生成。

Jindo DistCp,则是基于 JindoFS SDK 的阿里云数据迁移工具。Jindo DistCp 由阿里云 E-MapReduce 团队开发,目前支持 HDFS/OSS/S3 之间的数据拷贝场景,提供多种个性化拷贝参数和多种拷贝策略。重点优化 HDFS 到 OSS 的数据拷贝,通过定制化 CopyCommitter,实现 No-Rename 拷贝,并保证数据拷贝落地的完整性、一致性。

Jindo DistCp 具体文档,可参见github:
https://github.com/aliyun/alibabacloud-jindofs/tree/master/docs/jindo_distcp

数据迁移场景中的 Checksum

大数据迁移使用场景:迁移后完整性校验、差异比对/增量拷贝。

完整性校验的场景,特别是异构存储介质间的迁移场景。由于异构存储介质间,默认的数据校验方式往往无法通用。现有的方案往往只能跳过数据完整性校验,这使得在迁移出现问题时无法及时发现。

现有的增量拷贝方案中,开源的 Hadoop DistCp 和 S3 DistCp 也会做差异比较,在异构存储介质间只能对文件名,文件大小做比较,不能真实反应源文件和目标文件是否完全一致。哪怕在同构存储介质间,在做差异比较时,往往也需要将目标存储介质的数据重新读取,并计算一次校验和。

Checksum 技术科普

Checksum

数据校验和,可用于差错检测和完整性校验,常见的算法有:

  • 奇偶校验
  • MD5
  • SHA-1
  • SHA-256
  • SHA-512
  • CRC32
  • CRC64

奇偶校验

奇偶校验是最简单的校验算法。
具体做法是,在原始数据外,新增一位奇偶校验位,奇偶校验位有两种类型:

  • 以偶校验位来说,如果一组给定数据位中1的个数是奇数,补一个bit为1,使得总的1的个数是偶数。

例:0000001, 补一个bit为1, 00000011。

  • 以奇校验位来说,如果给定一组数据位中1的个数是奇数,补一个bit为0,使得总的1的个数是奇数。

例:0000001, 补一个bit为0, 00000010。
11.png

数据摘要算法

MD5、SHA-1、SHA-256、SHA-512 都是数据摘要算法,均被广泛作为密码的散列函数。

但由于 MD5、SHA-1 已经被证明为不安全的算法,目前建议使用较新的 SHA-256 和 SHA-512。

所有算法的输入均可以是不定长的数据。MD5 输出是16字节(128位), SHA-1 输出为20字节(160位),SHA-256 为32字节(256位),SHA-512 为64字节(512位)。

可以看到,SHA 算法的输出长度更长,因此更难发生碰撞,数据也更为安全。但运算速度与 MD5 相比,也更慢。

循环冗余校验

循环冗余校验又称 CRC(Cyclic redundancy check),将待发送的比特串看做是系数为 0 或者 1 的多项式。

  • M = 1001010
  • M(x) = 1x^6 + 0x^5 + 0x^4 + 1x^3 + 0x^2 + 1x^1 + 0*x^0
  • M(x) = x^6 + x^3 + x

CRC 编码时,发送方和接收方必须预先商定一个生成多项式 G(x)。

发送方将比特串和生成多项式 G(x) 进行运算得到校验码,在比特串尾附加校验码,使得带校验码的比特串的多项式能被 G(x) 整除。接收方接收到后,除以 G(x),若有余数,则传输有错。
22.jpg

CRC 常用的生成多项式( ITU-IEEE 规范)

图片2.jpg

CRC的优缺点

CRC算法的优点是算法实现相对简单、运算速度较快。而且错误检错能力很强,因此被广泛应用于通信数据校验。

缺点是输出长度较短,容易被伪造,碰撞率高。

性能参考:CRC32 > CRC64 > MD5 > SHA-1 > SHA-512 > SHA-256
Dingtalk_20210513134303.jpg

DistCp 技术解密

Hadoop DistCp

默认 Checksum 算法:CRC32
跳过 Checksum 校验的参数:-skipcrccheck
差异比较:直接调用参数 -diff
增量拷贝:直接调用参数 –update

Hadoop 3.1.1以上版本,支持了全新组合式 CRC 文件 Checksum 。让Hadoop 实现与外部存储系统一致的 CRC 算法,以满足 HDFS 和其他外部存储系统进行差异对比。但该方案有以下缺点:源存储介质和目标存储介质必须使用相同的 Checksum 算法,如果是往云上迁移,往往只能改变源端私有化存储介质的 Checksum 算法,去适配目标介质,有一定改造成本。

S3 DistCp

默认 Checksum 算法:MD5
不支持扩展 Checksum
不支持差异比较功能
不支持一键增量拷贝功能

  • 拷贝结束时,在-outputManifest参数指定的路径下生成Manifest文件。
  • 下次拷贝时,指定-previousManifest参数,获取Manifest中的差异文件列表来实现增量拷贝。

其他云厂商

  • 同样不支持一键增量拷贝功能。
  • 差异比较时,往往需要拉取源文件重复计算Checksum。

Jindo DistCp

Checksum 算法:默认CRC32,支持CRC64
Checksum 相关的参数:默认开启,禁用参数-disableChecksum
差异比对,增量拷贝方式与 Hadoop 社区对齐:

  • --diff:指定为差异比较模式。
  • --update:指定为增量Copy模式。
  • 默认先比较是否存在,再比较文件大小,最后比较文件Checksum。
  • 如果不希望比较文件Checksum,可以通过增加--disableChecksum参数来关闭,即只比较文件名和文件大小。
  • 差异比较/增量比较时不重复计算。

横向比较

Dingtalk_20210513134816.jpg

Jindo DistCp 操作实战

下载
•wget https://smartdata-binary.oss-cn-shanghai.aliyuncs.com/Jindo-distcp-3.0/DISTCP-3.5/jindo-distcp-3.5.0.jar

执行命令
•hadoop jar jindo-distcp-3.5.0.jar --src /user/root/random-data --dest oss://yanbin-hd2-test/distcp/ --parallelism 10
•-src:hdfs 的源路径
•--dest:oss 的目标路径
•--ossKey:oss 的 AccessKey
•--ossSecret:oss 的 AccessSecret
•--ossEndPoint:oss 的 endpoint 信息,可以公网或者内网的 endpoint
•--parallelism:任务并发大小,根据集群资源可调整

Jindo DistCp 高阶使用实战

禁用Checksum
•hadoop jar jindo-distcp-3.5.0.jar --src /user/root/random-data --dest oss://yanbin-hd2-test/distcp/ --parallelism 10 --disableChecksum

增量拷贝
•hadoop jar jindo-distcp-3.5.0.jar --src /user/root/random-data --dest oss://yanbin-hd2-test/distcp/ --parallelism 10 --update

差异比较时,启用CMS告警
•export cmsAccessKeyId=<your_key_id>
•export cmsAccessSecret=<your_key_secret>
•export cmsRegion=cn-shanghai
•export cmsToken=<your_cms_token>
•export cmsLevel=WARN
•hadoop jar jindo-distcp-3.5.0.jar --src /user/root/random-data --dest oss://yanbin-hd2-test/distcp/ --diff --enableCMS

直接观看视频回放,获取实例讲解~https://developer.aliyun.com/live/246728


Github链接:
https://github.com/aliyun/alibabacloud-jindofs/blob/master/docs/jindo_distcp/jindo_distcp_overview.md

不错过每次直播信息、探讨更多数据湖 JindoFS+OSS 相关技术问题,欢迎扫码加入钉钉交流群!
新建项目 (6).jpg

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
27天前
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
28 4
|
27天前
|
SQL
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
31 2
|
27天前
|
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
68 0
|
27天前
|
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
33 0
|
27天前
|
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
41 0
|
3月前
|
SQL 存储 分布式计算
HDFS数据(跨集群)迁移
HDFS数据(跨集群)迁移
|
3月前
|
存储 缓存 数据管理
阿里云EMR数据湖文件系统问题之JindoFS数据孤岛的问题如何解决
阿里云EMR数据湖文件系统问题之JindoFS数据孤岛的问题如何解决
|
Java 对象存储 Perl
oss迁移以及校验
oss的数据迁移以及一致性校验
2379 0
|
4月前
|
机器学习/深度学习 人工智能 专有云
人工智能平台PAI使用问题之怎么将DLC的数据写入到另一个阿里云主账号的OSS中
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
4天前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。