E-MapReduce HDFS文件快速CRC校验工具介绍

本文涉及的产品
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: 在大数据应用场景下经常有数据文件的迁移工作,如果保障迁移之后数据的完整性是一个很常见的问题。本文就给大家介绍一下在大数据场景下,如何用工具快速对比文件。

背景

在大数据应用场景下经常有数据文件的迁移工作,如果保障迁移之后数据的完整性是一个很常见的问题。对本地文件系统的数据而言,我们一般用md5工具(在Linux下可用md5sum命令)。

而对云存储上的文件来说,md5不一定满足需求。比如阿里云OSS文件并没有提供md5校验值,而是提供了CRC64校验值。本文就给大家介绍一下在大数据场景下,如何用工具快速对比文件。

OSSUtil

首先我们使用OSS官方提供ossutil工具,可以方便的得到云端OSS文件的CRC64:

[hadoop@emr-header-1 ~]$ ossutil stat oss://bucket/file.txt
ACL                         : default
Accept-Ranges               : bytes
Content-Length              : 500000000
Content-Type                : application/octet-stream
Etag                        : 1C1CE59DC84E49EC89EE6570A3608597-96
Last-Modified               : 2017-08-01 11:16:27 +0800 CST
Owner                       : onwerid
X-Oss-Hash-Crc64ecma        : 5376366475988344152
X-Oss-Object-Type           : Multipart
X-Oss-Storage-Class         : Standard
0.097086(s) elapsed

其中的 X-Oss-Hash-Crc64ecma : 5376366475988344152 就是校验值。

ossutil hash命令还能得到本地文件的CRC64值:

[hadoop@emr-header-1 ~]$ ossutil hash file.txt
CRC64-ECMA                  : 5376366475988344152

将两个CRC值进行比较,就可以知道从本地上传到OSS上的文件是否成功。

但是,上面的方法只对单个文件有用,如果你的文件是放在分布式文件系统,比如E-MapReduce上的HDFS,有需要备份数据到OSS上,用OSSUtil工具可能就太慢了。下面将引入一个新的工具。

E-MapReduce Distcp和DistCheck

DistCp

首先用EMR distcp工具将数据从HDFS导入到OSS上:

hadoop distcp /user/hadoop/terasort-10g oss://emr-bucket/upload

这里的原始目录有10G,文件列表是:
/user/hadoop/terasort-10g/input/part-m-00000
/user/hadoop/terasort-10g/input/part-m-00001
...
/user/hadoop/terasort-10g/input/part-m-00020

将文件列表保持成一个文件 list.txt ,并上传到 HDFS 上 /user/hadoop/list.txt

hadoop fs -put list.txt /user/hadoop/list.txt

下载工具

然后,需要你下载本文附件中的压缩包,解压缩之后可以得到两个文件 streaming.jar 和 crctool。其中crctool是一个可以在本地运行的可执行文件(注意:只能在Linux 64位环境下执行),功能和ossutil的hash功能类似,但它只支持从标准输入中读取数据,比如:

cat file.txt | ./crctool 

运行工具

接下去就可以运行DistCheck工具了,具体命令如下:

hadoop jar streaming.jar -Dmapred.reduce.tasks=1 -mapper crctool -file crctool -input /user/hadoop/list.txt -output /user/hadoop/distcheck-out

查看结果

查看工具输出的结果:

[hadoop@emr-header-1 ~]$ hadoop  fs -cat /user/hadoop/distcheck-out/part-00000
hdfs://emr-header-1:9000/user/hadoop/terasort-10g/input/part-m-00000: 5376366475988344152
hdfs://emr-header-1:9000/user/hadoop/terasort-10g/input/part-m-00001: 11439160807767203705
hdfs://emr-header-1:9000/user/hadoop/terasort-10g/input/part-m-00002: 2122411653175000878
hdfs://emr-header-1:9000/user/hadoop/terasort-10g/input/part-m-00003: 7064261157479130820
...

这是HDFS上文件的CRC值,可以和OSS上的文件做比较:

[hadoop@emr-header-1 ~]$ hadoop fs -ls oss://emr-bucket/upload/terasort-10g/input  |grep part | awk '{print $6}' | xargs -L1 ./ossutil stat  | grep Crc64
X-Oss-Hash-Crc64ecma        : 5376366475988344152
X-Oss-Hash-Crc64ecma        : 11439160807767203705
X-Oss-Hash-Crc64ecma        : 2122411653175000878
X-Oss-Hash-Crc64ecma        : 7064261157479130820
...
相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
4月前
|
存储 分布式计算 监控
Hadoop【基础知识 01+02】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
【4月更文挑战第3天】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
261 2
|
1月前
|
存储 分布式计算 算法
MapReduce 处理压缩文件的能力
【8月更文挑战第12天】
29 4
|
21天前
|
存储 分布式计算 Hadoop
|
2月前
|
分布式计算 Hadoop 关系型数据库
实时计算 Flink版操作报错合集之Hadoop在将文件写入HDFS时,无法在所有指定的数据节点上进行复制,该如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
3月前
|
SQL JSON 数据处理
实时计算 Flink版产品使用问题之把hdfs集群里的core-site.xml hdfs.xml两个文件放到flink/conf/目录下,启动集群说找不到hdfs,该如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
3月前
|
存储 分布式计算 NoSQL
|
3月前
|
数据采集 SQL 分布式计算
|
3月前
|
分布式计算 Hadoop Java
分布式系统详解--框架(Hadoop--JAVA操作HDFS文件)
分布式系统详解--框架(Hadoop--JAVA操作HDFS文件)
33 0
|
4月前
|
SQL 分布式计算 监控
Flume实时读取本地/目录文件到HDFS
Flume实时读取本地/目录文件到HDFS
80 7
|
3月前
|
存储 分布式计算 Hadoop
Hadoop生态系统详解:HDFS与MapReduce编程
Apache Hadoop是大数据处理的关键,其核心包括HDFS(分布式文件系统)和MapReduce(并行计算框架)。HDFS为大数据存储提供高容错性和高吞吐量,采用主从结构,通过数据复制保证可靠性。MapReduce将任务分解为Map和Reduce阶段,适合大规模数据集的处理。通过代码示例展示了如何使用MapReduce实现Word Count功能。HDFS和MapReduce的结合,加上YARN的资源管理,构成处理和分析大数据的强大力量。了解和掌握这些基础对于有效管理大数据至关重要。【6月更文挑战第12天】
106 0