将文本输出写入 S3 存储桶的最佳实践是啥?
Posted
技术标签:
【中文标题】将文本输出写入 S3 存储桶的最佳实践是啥?【英文标题】:What is best practice of the the case of writing text output into S3 bucket?将文本输出写入 S3 存储桶的最佳实践是什么? 【发布时间】:2017-03-30 04:53:02 【问题描述】:我的管道(python)正在编写从 BigQuery 读取的文本数据。 据我所知,我有两个选项可以将文本数据写入 S3。
第一个选项是自定义 Sink 的“Writer 子类”将每条记录写入 S3 存储桶目录。 根据我的经验,传输效率似乎非常低。 Writer 每 1 条记录花费大约一秒钟。(我的数据源也有数百万条记录!)
第二种选择是将文本数据发送到预先写入GCS的GCS。 我似乎这个选项效率低下。 原因是 GCS 和 DataFlow 之间发生了不必要的流量(上传/下载)。 (My Pipeline 不需要将文本数据存储到 GCS 中)
有没有比我的两个选项更好的写入 S3 的方法?
问候。
【问题讨论】:
欢迎来到 ***!您能否提供有关您的应用程序正在做什么的更多详细信息?例如,您希望将每条记录存储在单独的 Amazon S3 对象中,还是将数据附加到现有对象?您是否可以将数据存储在“本地”文件中,然后在文件有一定数量的记录时上传文件?您是否考虑过将数据发送到 Amazon Kinesis Firehose 以捕获流数据并将其存储在 Amazon S3 中? 【参考方案1】:为 S3 编写自定义接收器的第一种方法似乎不错。您可以使用缓冲区将写入批量上传到 S3,而不是为每条记录写入一个文件。如果您的缓冲区不是很大,那么您可以直接上传到 s3,否则使用分段上传 API 也是一个不错的选择。 gcsio 中的代码在这里可能有用。
在第二种情况下,您可以直接使用 TextSink 写入 GCS,但如果数据最后需要保存在 s3 中,您必须稍后以某种方式将文件从 GCS 移动到 S3。
我还创建了https://issues.apache.org/jira/browse/BEAM-994 用于跟踪支持 S3 的需求
【讨论】:
以上是关于将文本输出写入 S3 存储桶的最佳实践是啥?的主要内容,如果未能解决你的问题,请参考以下文章
将 Play 代码从 git 存储库部署到生产环境的最佳实践是啥?
在没有 AWS Pipeline 的情况下,将数据(csv 文件)从 s3 自动传输到 Redshift 的最佳方式是啥?