2015-08-10 8 views
5

Müssen wir die Prüfsumme überprüfen, nachdem wir Dateien von einem Linux-Server über Webhdfs nach Hadoop (HDFS) verschoben haben?Überprüfung der Prüfsumme in Hadoop

Ich möchte sicherstellen, dass die Dateien auf dem HDFS nach dem Kopieren nicht beschädigt sind. Aber ist Checksumme erforderlich?

Ich lese Client Prüfsumme tut, bevor Daten auf HDFS

geschrieben

Kann mir jemand verstehen helfen, wie kann ich sicherstellen, dass Quelldatei auf Linux-System als aufgenommene Datei gleich ist webhdfs auf HDFS verwenden.

Antwort

5

Prüfsumme für eine Datei kann mit dem Befehl hadoop fs berechnet werden.

Verbrauch: hadoop fs -checksum URI

Gibt die Prüfsumme Informationen einer Datei.

Beispiel:

hadoop fs -checksum hdfs: //nn1.example.com/file1 hadoop fs -checksum file: /// path/in/Linux/file1

Siehe: Hadoop documentation für mehr Details

Wenn Sie also Datei1 sowohl in Linux als auch in hdfs kompilieren möchten, können Sie das obige Dienstprogramm verwenden.

+0

Prüfsumme der Datei auf linux box und hdfs kommt anders –

+3

'hadoop fs-checksum datei: /// path/in/linux/file1' hat bei mir nicht funktioniert, es gibt 'NONE' zurück. irgendwelche Ideen warum? –

+0

Ist Ihr Pfad 'file: /// path/in/linux/file1' ein hdfs Pfad? – Abhi

0

Es tut CRC überprüfen. Für jede Datei wird .crc erstellt, um sicherzustellen, dass keine Korruption vorliegt.

2

Wenn Ihr Ziel ist zwei Dateien auf HDFS zu vergleichen mit Wohnsitz, würde ich nicht verwenden „hdfs dfs -checksum URI“, wie in meinem Fall erzeugt es verschiedene Prüfsummen für Dateien mit identischem Inhalt.

Im folgenden Beispiel habe ich zwei Dateien mit dem gleichen Inhalt in verschiedenen Orten am Vergleich:

Old-school md5sum Methode die gleiche Prüfsumme zurück:

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

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

jedoch Prüfsumme auf HDFS erzeugt wird verschiedene Dateien mit dem gleichen Inhalt:

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

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

Ein bisschen rätselhaft, wie ich gleich Prüfsumme erzeugt wird gegen die identischen conten erwarten t.

0

Wenn Sie dieses Kontroll via API tun

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

Option 1: für den Wert b9fdea463b1ce46fabc2958fc5f7644a

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

Option 2: für den Wert 3e50be59553b2ddaf401c575f8df6914

val md5:String = FileSystem.get(hadoopConfiguration).getFileChecksum(new Path("/project1/file.txt"))).toString.split(":")(0)