2014-04-29 61 views
2

我發現,如果你創建一個計算引擎(CentOS的或Debian的)機器和使用gsutil下載(CP)一個TGZ文件將導致crcmod錯誤...計算引擎使用gsutil下載TGZ文件有crcmod錯誤

$ gsutil cp gs://mybucket/data.tgz . 
Copying gs://mybucket/data.tgz... 
CommandException: 
Downloading this composite object requires integrity checking with CRC32c, but 
your crcmod installation isn't using the module's C extension, so the the hash 
computation will likely throttle download performance. For help installing the 
extension, please see: 
    $ gsutil help crcmod 
To download regardless of crcmod performance or to skip slow integrity checks, 
see the "check_hashes" option in your boto config file. 

目前我使用 「check_hashes =從不」 繞過檢查...

$ vi /etc/boto.cfg 
[GSUtil] 
default_project_id = 429100748693 
default_api_version = 2 
check_hashes = never 
... 

但是,什麼是根本原因?有沒有什麼好的解決方案來解決這個問題?

回答

1

您嘗試下載的對象是composite object,這基本上意味着它是以並行塊的形式上傳的。 gsutil在上傳大於150M的對象(可配置的閾值)時自動執行此操作,以提供更好的性能。

複合對象僅具有CRC32C校驗(無MD5),因此,爲了下載複合對象,gsutil會需要執行CRC32C校驗時驗證數據的完整性。不幸的是,使用Python發佈的庫不包含編譯的crc32c實現,因此除非安裝編譯的crc32c,否則gsutil將使用非編譯的Python實現的crc32c,這非常緩慢。該警告被打印到讓你知道有一種方法來解決這個性能問題:請運行:

gsutil help crcmod 

,並按照指示安裝編譯CRC32C。這很容易做到,值得付出努力。

另一個說明:我強烈建議不要在您的boto配置文件中設置check_hashes = never。這將禁用完整性檢查,這意味着您的下載可能會損壞,您不知道它。您希望啓用數據完整性檢查以確保您正在處理正確的數據。

+0

有沒有辦法通過'check_hashes'作爲'gsutil'的參數來執行單個命令? –

+1

Robert - 您可以使用gsutil -o選項將配置文件參數傳遞給gsutil,例如gsutil -o GSUtil:check_hashes = if_fast_else_fail cp文件gs:// my-bucket –