2013-01-23 84 views
3

如何比較兩個HDFS文件,因爲沒有diffHDFS文件比較

我正在考慮使用Hive表並從HDFS加載數據,然後在2個表上使用聯接語句。有沒有更好的方法?

+0

你使用的是什麼版本的hadoop?你在使用CDH發行版嗎? –

回答

11

提供了用Hadoop沒有diff命令,但你可以在你的shell與diff命令實際使用重定向:

diff <(hadoop fs -cat /path/to/file) <(hadoop fs -cat /path/to/file2) 

如果你只是想知道,如果兩個文件是相同的或並非沒有照顧到知道差異,我會建議另一種基於校驗和的方法:你可以得到兩個文件的校驗和然後比較它們。我認爲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; 
3

好,最簡單的答案很可能是:

diff <(hadoop fs -cat file1) <(hadoop fs -cat file2) 

它只是將你的本地計算機上運行。如果這太慢了,那麼是的,你必須對Hive和MapReduce做些什麼,但這有點棘手,並且不會與diff的按序比較完全匹配。