压缩保存在 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 云存储中的文件的主要内容,如果未能解决你的问题,请参考以下文章
在 Google 云存储中使用 HTML5 视频标签“src”URL 的问题