将HDFS校验和与本地文件系统校验和进行比较

时间:2015-05-27 03:56:36

标签: hdfs md5 checksum

我正在尝试编写一个简单的脚本来验证HDFS和本地文件系统校验和。

在HDFS上我得到 -

[m@x01tbipapp3a ~]$ hadoop fs -checksum /user/m/file.txt
/user/m/file.txt  MD5-of-0MD5-of-512CRC32C        **000002000000000000000000755ca25bd89d1a2d64990a68dedb5514**

在本地文件系统上,我得到了 -

[m@x01tbipapp3a ~]$ cksum file.txt
**3802590149 26276247** file.txt
[m@x01tbipapp3a ~]$ md5sum file.txt
**c1aae0db584d72402d5bcf5cbc29134c**  file.txt

现在我如何比较它们。我试图将HDFS校验和从十六进制转换为十进制,以查看它是否与chksum匹配,但它没有...

有没有办法比较使用任何算法的2个校验和?

感谢

5 个答案:

答案 0 :(得分:1)

这不是解决方案,而是可以使用的解决方法。 本地文件校验和: cksum test.txt

HDFS校验和: cksum hadoop fs -cat /user/test/test.txt > tmp.txt tmp.txt

你可以比较它们。

希望它有所帮助。

答案 1 :(得分:0)

我使用了一种解决方法,创建了一个简单的脚本来比较使用md5sum的本地和hdfs文件系统的校验和。我已将hdfs文件系统挂载为local / hdfs。

md5sum /hdfs/md5test/* | awk {'print $1'} > hdfsfile.txt
md5sum /test/* | awk {'print $1'} > localfile.txt
if ! diff /root/localfile.txt /root/hdfsfile.txt > /dev/null 2>&1;
then
/bin/mail -s "checksum difference between local and hdfs files" user@xyz.com < /dev/null
fi

答案 2 :(得分:0)

答案 3 :(得分:0)

将cat'd hdfs文件的结果管道化为md5sum对我有用:

public function edit_data($id_barang) {
    /* load model dahulu, karena bukan global model */

    $this->load->model('models_barang', 'mb');

    $brg = $this->mb->GetBarang(" where id_barang = '$id_barang'");

    $datab = array(
        'id_barang' => $brg[0]['id_barang'],
        'kode_barang' => $brg[0]['kode_barang'],
        'nama_barang' => $brg[0]['nama_barang'],
        'material_barang' => $brg[0]['material_barang'],
        'model_barang' => $brg[0]['model_barang'],
        'kategori_barang' => $brg[0]['kategori_barang'],
        'harga_barang' => $brg[0]['harga_barang'],
        'size_barang' => $brg[0]['size_barang'],
        'merk_barang' => $brg[0]['merk_barang'],
        'ket_barang' => $brg[0]['ket_barang']
    );

    // DUPLICATE, REMOVED
    //$this->load->view('templates/admin/form_edit_barang', $datab);

    $this->load->model('models_kategori_barang', 'mkb');
    $this->load->model('models_model_barang', 'modb');
    $this->load->model('models_material_barang', 'matb');
    $this->load->model('models_merk_barang', 'merb');

    $datakb = $this->mkb->GetKategoriBarang();
    $datamodb = $this->modb->GetModelBarang();
    $datamatb = $this->matb->GetMaterialBarang();
    $datamerb = $this->merb->GetMerkBarang();

    // MERGED ARRAY HERE
    $this->load->view('templates/admin/form_edit_barang', array_merge($datab, array(
        'datakb' => $datakb,
        'datamodb' => $datamodb,
        'datamatb' => $datamatb,
        'datamerb' => $datamerb)));
}

答案 4 :(得分:0)

从Hadoop 3.1开始,可以在HDFS中执行校验和。但是,比较取决于首先如何将文件put转换为HDFS。默认情况下,HDFS使用CRC32C,它会计算单个块的所有MD5校验和的MD5。

这意味着您无法轻松地将该校验和与本地副本之一进行比较。您可以最初使用CRC32校验和写入文件:

hdfs dfs -Ddfs.checksum.type=CRC32 -put myFile /tmp

然后,获取校验和:

hdfs dfs -Ddfs.checksum.combine.mode=COMPOSITE_CRC -checksum /tmp/myFile

对于本地副本:

crc32 myFile

如果您没有使用CRC32校验和上传文件,或者不想使用CRC32校验和再次上传文件,也可以只使用CRC32C校验和上传要与之进行比较的本地副本:

hdfs dfs -put myFile /tmp

然后将HDFS上的两个文件与:

hdfs dfs -checksum /tmp/myFilehdfs dfs -checksum /tmp/myOtherFile


参考: