hadoop-hdfs-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "zhenzhao wang (JIRA)" <j...@apache.org>
Subject [jira] [Comment Edited] (HDFS-13056) Expose file-level composite CRCs in HDFS which are comparable across different instances/layouts
Date Wed, 31 Jan 2018 18:45:01 GMT

    [ https://issues.apache.org/jira/browse/HDFS-13056?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16347281#comment-16347281
] 

zhenzhao wang edited comment on HDFS-13056 at 1/31/18 6:44 PM:
---------------------------------------------------------------

Thanks for the detailed info. Both adding new method and modifying existing protocol sounds
good to me.

Part of the reason I added a data checksum option in top level is because CRC32/CRC32C is
more generic checksum method (name) which is easy to understand. E.g. if I want copy a file
from HDFS to GCS in distcp, the file checksum type or algorithm from GCS is CRC32C. And
I hope I could use a same checksum type/name to get checksum from HDFS for verification. But
I understand your concern too, as you said, it's difficult to come up with an entirely satisfactory
approach. Both approach make sense to me. Now I got a patch to verify the data integrity in
distcp by specifying the source and target fs checksum type explicitly, will modify it accordingly
once this feature is accomplished.

As for the CRC, your approach is much faster. CRC(concatenate(A, B)) = CRC(concatenate(A,
\{length of B}))^CRC(B). Shift-right is faster than the matrix approach while calculating concatenate(A,
\{length of B}) though the complexity are all O Log(\{length of B}).

 

 


was (Author: wzzdreamer):
Thanks for the detailed info. Both adding new method and modifying existing protocol sounds
good to me.

Part of the reason I added a data checksum option in top level is because CRC32/CRC32C is
more generic checksum method (name) which is easy to understand. E.g. if I want copy a file
from HDFS to GCS in distcp, the file checksum type or algorithm from GCS is CRC32C. And
I hope I could use a same checksum type/name to get checksum from HDFS for verification. But
I understand your concern too, as you said, it's difficult to come up with an entirely satisfactory
approach. Both approach make sense to me. Now I got a patch to verify the data integrity in
distcp by specifying the source and target fs checksum type explicitly, will modify it according
once this feature is accomplished.

As for the CRC, your approach is much faster. CRC(concatenate(A, B)) = CRC(concatenate(A,
\{length of B}))^CRC(B). Shift-right is faster than the matrix approach while calculating concatenate(A,
\{length of B}) though the complexity are all O Log(\{length of B}).

 

 

> Expose file-level composite CRCs in HDFS which are comparable across different instances/layouts
> ------------------------------------------------------------------------------------------------
>
>                 Key: HDFS-13056
>                 URL: https://issues.apache.org/jira/browse/HDFS-13056
>             Project: Hadoop HDFS
>          Issue Type: New Feature
>          Components: datanode, distcp, erasure-coding, federation, hdfs
>    Affects Versions: 3.0.0
>            Reporter: Dennis Huo
>            Priority: Major
>         Attachments: HDFS-13056-branch-2.8.001.patch, HDFS-13056-branch-2.8.poc1.patch,
Reference_only_zhen_PPOC_hadoop2.6.X.diff, hdfs-file-composite-crc32-v1.pdf
>
>
> FileChecksum was first introduced in [https://issues-test.apache.org/jira/browse/HADOOP-3981] and
ever since then has remained defined as MD5-of-MD5-of-CRC, where per-512-byte chunk CRCs are
already stored as part of datanode metadata, and the MD5 approach is used to compute an aggregate
value in a distributed manner, with individual datanodes computing the MD5-of-CRCs per-block
in parallel, and the HDFS client computing the second-level MD5.
>  
> A shortcoming of this approach which is often brought up is the fact that this FileChecksum
is sensitive to the internal block-size and chunk-size configuration, and thus different
HDFS files with different block/chunk settings cannot be compared. More commonly, one might
have different HDFS clusters which use different block sizes, in which case any data migration
won't be able to use the FileChecksum for distcp's rsync functionality or for verifying end-to-end
data integrity (on top of low-level data integrity checks applied at data transfer time).
>  
> This was also revisited in https://issues.apache.org/jira/browse/HDFS-8430 during the
addition of checksum support for striped erasure-coded files; while there was some discussion
of using CRC composability, it still ultimately settled on hierarchical MD5 approach, which also adds
the problem that checksums of basic replicated files are not comparable to striped files.
>  
> This feature proposes to add a "COMPOSITE-CRC" FileChecksum type which uses CRC composition
to remain completely chunk/block agnostic, and allows comparison between striped vs replicated
files, between different HDFS instances, and possible even between HDFS and other external
storage systems. This feature can also be added in-place to be compatible with existing block
metadata, and doesn't need to change the normal path of chunk verification, so is minimally
invasive. This also means even large preexisting HDFS deployments could adopt this feature
to retroactively sync data. A detailed design document can be found here: https://storage.googleapis.com/dennishuo/hdfs-file-composite-crc32-v1.pdf



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: hdfs-issues-unsubscribe@hadoop.apache.org
For additional commands, e-mail: hdfs-issues-help@hadoop.apache.org


Mime
View raw message