2015-08-10 2 views
5

Нужно ли проверять контрольную сумму после перемещения файлов в Hadoop (HDFS) с сервера Linux через Webhdfs?Проверка контрольной суммы в Hadoop

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

Я прочитал клиент делает контрольную сумму, прежде чем данные записываются в HDFS

Может кто-нибудь помочь мне понять, как я могу убедиться, что исходный файл в системе Linux является такой же, как съеденной файл на HDFS с помощью webhdfs.

ответ

5

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

Использование: Hadoop фс -checksum URI

Возвращает информацию о контрольной суммы файла.

Пример:

Hadoop фс -checksum HDFS: //nn1.example.com/file1 Hadoop файла фс -checksum: /// путь/в/Linux/файл1

См: Hadoop documentation для подробнее

Так что если вы хотите добавить файл 1 в linux и hdfs, вы можете использовать утилиту выше.

+0

контрольной суммы файла на linux box и hdfs идут разные –

+3

'hadoop fs -checksum файл: /// path/in/linux/file1' не работал для меня, он возвращает 'NONE'. любые идеи почему? –

+0

Является ли ваш путь 'file: /// path/in/linux/file1' hdfs path? – Abhi

0

Он делает проверку crc. Для каждого и каждого файла он создает .crc, чтобы убедиться, что нет никакого искажения.

2

Я написал библиотеку, с помощью которой вы можете вычислить контрольную сумму локального файла, точно так же, как hadoop делает это на файлах hdfs.

Итак, вы можете сравнить контрольную сумму для перекрестной проверки. https://github.com/srch07/HDFSChecksumForLocalfile

2

Если ваша цель, чтобы сравнить два файла, находящиеся на HDFS, я бы не использовать «HDFS Dfs -checksum URI», как и в моем случае это создает различные контрольные суммы для файлов с одинаковым содержанием.

В приведенном ниже примере я сравниваю два файла с одинаковым содержанием в разных местах:

Старая школа метод md5sum возвращает ту же контрольную сумму:

$ hdfs dfs -cat /project1/file.txt | md5sum 
b9fdea463b1ce46fabc2958fc5f7644a - 

$ hdfs dfs -cat /project2/file.txt | md5sum 
b9fdea463b1ce46fabc2958fc5f7644a - 

Однако контрольная сумма генерируется на HDFS является различен для файлов с одинаковым содержанием:

$ hdfs dfs -checksum /project1/file.txt 
0000020000000000000000003e50be59553b2ddaf401c575f8df6914 

$ hdfs dfs -checksum /project2/file.txt 
0000020000000000000000001952d653ccba138f0c4cd4209fbf8e2e 

немного озадачивает, как я ожидал бы идентичную контрольную сумму, которая должна вырабатываться с одинаковой conten т.

0

Если вы делаете эту проверку с помощью API

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

Вариант 1: для значения b9fdea463b1ce46fabc2958fc5f7644a

val md5:String = MD5Hash.digest(FileSystem.get(hadoopConfiguration).open(new Path("/project1/file.txt"))).toString 

Вариант 2: для значения 3e50be59553b2ddaf401c575f8df6914

val md5:String = FileSystem.get(hadoopConfiguration).getFileChecksum(new Path("/project1/file.txt"))).toString.split(":")(0) 
Смежные вопросы