gpt4 book ai didi

python - GCS - 数据损坏 : Checksum mismatch while downloading

转载 作者:太空宇宙 更新时间:2023-11-03 11:42:29 49 4
gpt4 key购买 nike

我正在使用 python 的 google-cloud客户端从 Google Cloud Storage (GCS) 下载文件,出现以下错误:

File "/deploy/app/scanworker/storagehandler/gcshandler.py" line 62 in download_object 
blob.download_to_file(out_file)

File "/usr/local/lib/python3.5/dist-packages/google/cloud/storage/blob.py" line 464 in download_to_file self._do_download(transport, file_obj, download_url, headers)

File "/usr/local/lib/python3.5/dist-packages/google/cloud/storage/blob.py" line 418 in _do_download
download.consume(transport)

File "/usr/local/lib/python3.5/dist-packages/google/resumable_media/requests/download.py" line 169 in consume

self._write_to_stream(result)

File "/usr/local/lib/python3.5/dist-packages/google/resumable_media/requests/download.py" line 132 in _write_to_stream [args] [locals]
raise common.DataCorruption(response, msg)


DataCorruption: Checksum mismatch while downloading:

https://www.googleapis.com/download/storage/v1/b/<my-bucket>/o/<my-object>?alt=media

The X-Goog-Hash header indicated an MD5 checksum of:

fdn2kKmS4J6LCN6gfmEUVQ==

but the actual MD5 checksum of the downloaded contents was:

C9+ywW2Dap0gEv5gHoR1UQ==

我使用以下代码从 GCS 下载 blob:

bucket_name = '<some-bucket>'
service_account_key = '<path to json credential file>'
with open(service_account_key, 'r') as f:
keyfile = json.load(f)
project_id = keyfile['project_id']

credentials = service_account.Credentials.from_service_account_file(service_account_key)
client = storage.Client(project=project_id,
credentials=credentials)
bucket = client.get_bucket(bucket_name)

blob_name = '<name of blob>'
download_path = "./foo.obj"
blob = bucket.blob(blob_name)
with open(download_path, "w") as out_file:
blob.download_to_file(out_file) # it fails here

一些信息:

  • 使用python3
  • 在 Kubernetes 中的 Ubuntu 16.04 Docker 容器中运行
  • 使用随 pika 下载的 0.27.0 版 google-cloud 客户端库

此外,我似乎无法在我的本地桌面上重现该错误,无法从我的 Docker 容器下载失败的相同文件。

这是客户端库的错误吗?或者可能是网络问题?尝试下载不同的文件,所有文件都从 Kubernetes 给出相同的错误。相同的代码已经运行了几个月没有问题,现在只看到这个错误。

编辑:

使用与之前完全相同的代码重建 Docker 容器似乎解决了问题。不过,我仍然很好奇最初导致错误的原因。

编辑 2:我们使用 circleci 将 webapp 部署到生产环境。现在看起来在 circleci 上构建的图像失败了,而在本地构建它似乎确实有效。由于它包含在 Docker 容器中,这真的很奇怪,我们从哪里构建它应该无关紧要吧?

编辑 3:登录到 kubernetes 中出现上述错误的同一个容器,我尝试运行 gsutil cp gs:/<bucket>/<blob-name> foo.obj这运行没有任何问题

最佳答案

正如 Mike 在评论中指出的:这是 google-resumable-media 库 0.3.0 版的问题。 (请参阅此处的问题:https://github.com/GoogleCloudPlatform/google-resumable-media-python/issues/34)

在我们的 pip 的 requirements.txt 中指定 google-resumable-media==0.2.3 完成了这项工作!

从我的桌面构建的 Docker 镜像中没有出现错误的原因是我使用旧版本的 google-resumable-media 缓存了图像。

关于python - GCS - 数据损坏 : Checksum mismatch while downloading,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46804668/

49 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com