がないため、2 つの HDFS ファイルを比較するにはどうすればよいdiff
ですか?
Hive テーブルを使用し、HDFS からデータをロードしてから、2 つのテーブルで結合ステートメントを使用することを考えていました。より良いアプローチはありますか?
Hadoop にはdiff
コマンドが用意されていませんが、次のコマンドを使用して、実際にシェルでリダイレクトを使用できますdiff
。
diff <(hadoop fs -cat /path/to/file) <(hadoop fs -cat /path/to/file2)
違いを気にせずに 2 つのファイルが同一かどうかだけを知りたい場合は、別のチェックサム ベースのアプローチをお勧めします。両方のファイルのチェックサムを取得して比較することができます。チェックサムは既に保存されているため、Hadoop は生成する必要はないと思いますが、私は間違っているかもしれません。そのためのコマンド ライン オプションはないと思いますが、Java API を使用して簡単にこれを実行し、小さなアプリを作成できます。
FileSystem fs = FileSystem.get(conf);
chksum1 = fs.getFileChecksum(new Path("/path/to/file"));
chksum2 = fs.getFileChecksum(new Path("/path/to/file2"));
return chksum1 == chksum2;
まあ、最も簡単な答えはおそらく次のとおりです。
diff <(hadoop fs -cat file1) <(hadoop fs -cat file2)
ローカル マシンで実行されるだけです。それが遅すぎる場合は、はい、Hive と MapReduce で何かを行う必要がありますが、それは少しトリッキーであり、diff が行う順序比較と完全には一致しません。