天天看點

E-MapReduce HDFS檔案快速CRC校驗工具介紹

在大資料應用場景下經常有資料檔案的遷移工作,如果保障遷移之後資料的完整性是一個很常見的問題。對本地檔案系統的資料而言,我們一般用md5工具(在linux下可用md5sum指令)。

而對雲存儲上的檔案來說,md5不一定滿足需求。比如阿裡雲oss檔案并沒有提供md5校驗值,而是提供了crc64校驗值。本文就給大家介紹一下在大資料場景下,如何用工具快速對比檔案。

其中的 x-oss-hash-crc64ecma : 5376366475988344152 就是校驗值。

ossutil hash指令還能得到本地檔案的crc64值:

将兩個crc值進行比較,就可以知道從本地上傳到oss上的檔案是否成功。

但是,上面的方法隻對單個檔案有用,如果你的檔案是放在分布式檔案系統,比如e-mapreduce上的hdfs,有需要備份資料到oss上,用ossutil工具可能就太慢了。下面将引入一個新的工具。

首先用emr distcp工具将資料從hdfs導入到oss上:

這裡的原始目錄有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

然後,需要你下載下傳本文附件中的壓縮包,解壓縮之後可以得到兩個檔案 streaming.jar 和 crctool。其中crctool是一個可以在本地運作的可執行檔案(注意:隻能在linux 64位環境下執行),功能和ossutil的hash功能類似,但它隻支援從标準輸入中讀取資料,比如:

接下去就可以運作distcheck工具了,具體指令如下:

檢視工具輸出的結果:

這是hdfs上檔案的crc值,可以和oss上的檔案做比較: