压缩保存在 Google 云存储中的文件

Posted

技术标签:

【中文标题】压缩保存在 Google 云存储中的文件【英文标题】:Compress files saved in Google cloud storage 【发布时间】:2016-08-09 19:14:25 【问题描述】:

是否可以压缩已保存在 Google 云存储中的文件?

这些文件由 Google 数据流代码创建和填充。数据流无法写入压缩文件,但我的要求是以压缩格式保存。

【问题讨论】:

【参考方案1】:

标准 TextIO.Sink 不支持写入压缩文件,因为从压缩文件中读取的可扩展性较差 - 如果不先解压缩,文件就无法在多个工作人员之间拆分。

如果您想这样做(并且不担心潜在的可扩展性限制),您可以考虑编写一个基于文件的自定义接收器来压缩文件。您可以查看TextIO 的示例,也可以查看docs how to write a file-based sink。

TextIO 的主要变化是修改TextWriteOperation(扩展FileWriteOperation)以支持压缩文件。

另外,请考虑针对Cloud Dataflow 和/或Apache Beam 提交功能请求。

【讨论】:

【参考方案2】:

另一种选择可能是稍微改变你的管道。

您可以将管道写入 BigQuery 中的表,而不是直接写入 GCS,然后当您的管道完成后,只需使用 GZIP 压缩集启动 BigQuery 导出作业到 GCS。

https://cloud.google.com/bigquery/docs/exporting-data https://cloud.google.com/bigquery/docs/reference/v2/jobs#configuration.extract.compression

【讨论】:

【参考方案3】:

您可以编写一个应用程序(可能使用 App Engine 或 Compute Engine)来执行此操作。您将在存储桶上配置通知,以便在写入新对象时通知您的应用程序,然后运行、读取对象、压缩它、覆盖对象并设置 Content-Encoding 元数据字段。因为对象写入是事务性的,所以对象的压缩形式在完成之前不会变得可见。请注意,如果您这样做,任何使用数据的应用程序/服务都需要能够处理压缩或未压缩格式。作为替代方案,您可以更改数据流设置,使其输出到临时存储桶,并为该存储桶设置通知以使您的压缩程序运行 - 然后该程序会将压缩版本写入您的生产存储桶并删除未压缩的对象。

【讨论】:

以上是关于压缩保存在 Google 云存储中的文件的主要内容,如果未能解决你的问题,请参考以下文章

将数据从 S3 迁移到 Google 云存储

在 Google 云存储中使用 HTML5 视频标签“src”URL 的问题

使用 spark 将 parquet 数据从 Google 云存储加载到 BigQuery

云存储项目 遇到的问题

云存储项目 遇到的问题

如何检索云存储桶中的最新文件?