Проверка контрольной суммы для файлов в HDFS

Я использую webhdfs для загрузки данных из локальной файловой системы в HDFS. Теперь я хочу обеспечить целостность файлов, загруженных в HDFS.

Как я могу убедиться, что передаваемые файлы не повреждены/изменены и т.д.?

Я использовал приведенную ниже команду webhdfs, чтобы получить контрольную сумму файла.

curl -i -L --negotiate -u: -X GET "http://$hostname:$port/webhdfs/v1/user/path?op=GETFILECHECKSUM"

Как мне использовать указанную выше контрольную сумму для обеспечения целостности загруженных файлов? пожалуйста, предложите

Ниже приведены шаги, которые я выполняю

>md5sum locale_file
740c461879b484f4f5960aa4f67a145b

 >hadoop fs -checksum locale_file
locale_file     MD5-of-0MD5-of-512CRC32C        000002000000000000000000f4ec0c298cd6196ffdd8148ae536c9fe

Контрольная сумма файла в локальной системе отличается от того же файла в HDFS. Мне нужно сравнить контрольную сумму, как я могу это сделать?


person chhaya vishwakarma    schedule 29.06.2015    source источник


Ответы (3)


Попробуй это

curl -i "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETFILECHECKSUM"

Перейдите по ссылке для получения полной информации

https://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-hdfs/WebHDFS.html#Get_File_Checksum

person BruceWayne    schedule 29.06.2015
comment
не могли бы вы объяснить? Я не понял, что именно делает эта команда - person chhaya vishwakarma; 29.06.2015

Один из способов сделать это — вычислить контрольную сумму локально, а затем сопоставить ее с контрольной суммой hadoop после ее приема.

Я написал библиотеку для локального расчета контрольной суммы, на случай, если кто-то заинтересуется. https://github.com/srch07/HDFSChecksumForLocalfile

person Abhishek Anand    schedule 09.11.2016

Это можно сделать из консоли, как показано ниже.

$ md5sum locale_file
740c461879b484f4f5960aa4f67a145b

$ hadoop fs -cat locale_file |md5sum -
740c461879b484f4f5960aa4f67a145b -

Вы также можете проверить локальный файл с помощью кода

import java.io._
import org.apache.commons.codec.digest.DigestUtils;

val md5sum = DigestUtils.md5Hex("locale_file")

и для хаупа

import org.apache.hadoop.fs._
import org.apache.hadoop.io._

val md5sum = MD5Hash.digest(FileSystem.get(hadoopConfiguration).open(new Path("locale_file"))).toString
person maxmithun    schedule 15.11.2017