我的管道(python)正在编写从BigQuery读取的文本数据。 根据我的知识,我有两种选择将文本数据写入S3。
第一个选项是" Writer子类"自定义Sink写入每个记录到S3存储桶目录。 根据我的经验,转移效率似乎很低。 作家每1条记录花费大约一秒钟。(我的数据也有数百万条记录!)
第二个选项是将文本数据发送到预先写入GCS的GCS中。 我觉得这个选项效率低下。 原因是GCS和DataFlow之间发生了不必要的流量(上传/下载)。 (我的管道不需要将文本数据存储到GCS中)
有没有更好的方式来写入S3而不是我的两个选项?
问候。
答案 0 :(得分:1)
为S3编写自定义接收器的第一种方法似乎很好。您可以使用缓冲区批量上载到S3的写入,而不是每个记录写入一个文件。如果您的缓冲区不是很大,那么您可以直接上传到s3,否则使用分段上传API也是一个不错的选择。 gcsio中的代码在这里可能很有用。
在第二种情况下,您可以直接使用TextSink写入GCS,但如果数据最后需要存在于s3中,您必须稍后将文件从GCS移动到S3。
我还创建了https://issues.apache.org/jira/browse/BEAM-994来跟踪支持S3的需求