2017-06-18 86 views
3

當我運行一個簡單的DistCp使用命令:Hadoop distcp - 可以讓每個文件保持一致(保留文件大小)?

hadoop distcp s3://src-bucket/src-dir s3://dest-bucket/dest-dir 

我得到的大小略有出入(以字節爲單位)的src-dir和dest-dir的

>aws s3 --summarize s3://dest-bucket/dest-dir/ 
... 
Total Objects: 12290 
    Total Size: 64911104881181 

>aws s3 --summarize s3://dest-bucket/dest-dir/ 
... 
Total Objects: 12290 
    Total Size: 64901040284124 

我的問題是:

  1. 有什麼可以引入這種差異?我的dest目錄的內容是否與原始內容相同?
  2. 最重要的是 - 是否有參數可以設置,以確保每個文件看起來與他們的src計數器部分完全相同(即相同的文件大小)?

回答

0
  1. 什麼可能推出這種差異?我的dest目錄的內容是否與原始內容相同?

是否有可能,有一個並行寫入活動在該DistCp使用正在運行的同時SRC-dir的發生?例如,是否有一個文件在某些​​其他應用程序中打開以在src-dir中寫入,並且應用程序在DistCp運行時將內容寫入文件?

S3中的最終一致性效果也可以發揮作用,特別是在現有對象的更新周圍。如果應用程序覆蓋現有對象,那麼隨後會有一段時間窗口,讀取該對象的應用程序可能會看到舊版本的對象,或者他們可能會看到新版本。有關這方面的更多詳細信息,請參見Amazon S3 Data Consistency Model的AWS文檔。

  • 最重要的 - 在那裏參數I可以設置,以確保每個文件看起來完全一樣作爲他們的src計數器部分(即,相同的文件大小)?
  • 一般來說,DistCp使用將在目標執行鍼對新副本每一個源文件的CRC校驗,以確認它是正確複製。我注意到你正在使用S3文件系統而不是HDFS。對於S3,像許多其他文件系統一樣,存在無法執行CRC校驗的限制。

    作爲補充說明,S3FileSystem(針對該方案的具有s3://的URI)已被棄用,Apache Hadoop社區無法維護並且得不到支持。如果可能,我們建議用戶遷移到S3AFileSystem(該方案的網址爲s3a://),以改進功能,性能和支持。更多詳細信息,請參閱Integration with Amazon Web Services文檔。

    如果您無法找到有關s3://行爲的解釋,那麼可能存在潛伏的問題,嘗試使用s3a://可能會更好。 (如果您現有的數據已經使用s3://編寫,那麼您首先需要確定某種數據的遷移,例如通過將s3:// URI複製到等效的s3a:// URI。)

    +1

    Chris,pl0u使用的是AWS s3工具,所以s3://是他們必須玩的。他們需要遷移到Hadoop庫以使用distcp和我們的代碼 –

    +0

    良好的捕獲。謝謝,@SteveLoughran。 –

    +0

    嗨@ChrisNauroth謝謝你的洞察力。 – pl0u

    0

    我的看法是src是如何壓縮以及如何壓縮(或不)壓縮的。所以我說:

    1)檢查.*compress.*設置任何創建SRC

    2)確保他們符合DistCp使用工作

    壓縮算法的.*compress.*設置 - 使用相同的設置 - - 應該產生確定性的輸出。所以我懷疑壓縮原點與目標壓縮(或不壓縮)的不匹配。

    相關問題