LinuxサーバーからWebhdfsを介してファイルをHadoop(HDFS)に移動した後、チェックサムを検証する必要がありますか?
コピーした後、HDFS上のファイルが破損していないことを確認したいと思います。しかし、チェックサムのチェックは必要ですか?
クライアントがデータをHDFSに書き込む前にチェックサムを実行する
Linuxシステムのソースファイルがwebhdfsを使用してHdfsに取り込まれたファイルと同じであることを確認するにはどうすればよいですか?.
HDFSにある2つのファイルを比較することが目的の場合、「hdfs dfs -checksum URI」を使用しません。私の場合、同じ内容のファイルに対して異なるチェックサムが生成されるためです。
以下の例では、異なる場所にある同じ内容の2つのファイルを比較しています。
古い学校の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
同じ内容に対して同じチェックサムが生成されることを期待するので、少し不可解です。
ファイルのチェックサムは、hadoop fsコマンドを使用して計算できます。
使用法:hadoop fs -checksum URI
ファイルのチェックサム情報を返します。
例:
hadoop fs -checksum hdfs://nn1.example.com/file1 hadoop fs -checksum file:/// path/in/linux/file1
詳細については、 Hadoopのドキュメント を参照してください
したがって、linuxとhdfsの両方でfile1を比較したい場合は、上記のユーティリティを使用できます。
ローカルファイルのチェックサムを計算できるライブラリを作成しました。これは、hadoopがhdfsファイルに対して行う方法と同じです。
したがって、チェックサムを比較してクロスチェックできます。 https://github.com/srch07/HDFSChecksumForLocalfile
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)
Crcチェックを行います。すべてのファイルに対して.crcを作成し、破損がないことを確認します。