将文件从 s3 复制到 redshift 花费的时间太长
Posted
技术标签:
【中文标题】将文件从 s3 复制到 redshift 花费的时间太长【英文标题】:Copy files from s3 to redshift is taking too long 【发布时间】:2016-08-16 19:10:43 【问题描述】:我正在使用 AWS 将我的 S3 存储桶中的 COPY
日志文件记录到我的 Redshift 集群内的一个表中。每个文件大约有 100MB,我还没有'gziped'
他们。我现在有 600 个这些文件,而且还在增长。我的集群有 2 个dc1.large
计算节点和一个领导节点。
问题是,COPY
运行时间太大,至少40分钟。加快速度的最佳方法是什么?
1) 获得更多节点或为节点提供更好的机器?
2) 如果我对文件进行 gzip 压缩,那么在COPY
操作时间增益方面真的很重要吗?
3) 有什么设计模式在这里有帮助吗?
【问题讨论】:
【参考方案1】:罗德里戈,
以下是答案:
1 - 在更改硬件设置之前,您可能可以进行一些优化。您必须进行测试,但在确保完成所有优化后,如果您仍然需要更好的性能,我建议您使用更多节点。
2 - Gzipped 文件可能会给您带来性能提升。但我怀疑您需要先进行其他优化。请参阅 Redshift 文档中的此建议:http://docs.aws.amazon.com/redshift/latest/dg/c_best-practices-compress-data-files.html
3 -- 以下是您应该按重要性顺序查看的内容:
-
分发密钥——您的分发密钥是否提供跨多个切片的良好分发?如果您有一个“错误”的分发密钥,那就可以解释您遇到的问题。
编码 -- 确保编码是最佳的。使用分析压缩命令。
排序键 -- 您是否选择了适合此的排序键
桌子。拥有一个好的排序键会对
压缩,进而影响读取和写入时间。
真空 -- 如果您已经在此表中执行了多个测试,您是否在测试之间进行了真空。 Redshift 不会在删除或更新后删除数据(更新被处理为删除和插入,而不是就地更新)。
多个文件 -- 您应该有大量文件。您已经这样做了,但是对于尝试将数据加载到 Redshift 的人来说,这可能是一个很好的建议。
清单文件 -- 使用清单文件允许 Redshift 并行化您的负载。
我预计 60GB 的负载会比您看到的更快,即使在 2 节点集群中也是如此。检查这 6 项并告诉我们。
谢谢
@BigDataKid
【讨论】:
4 个节点和 gzip 文件耗时 20 分钟。以上是关于将文件从 s3 复制到 redshift 花费的时间太长的主要内容,如果未能解决你的问题,请参考以下文章
将具有多个值的 JSON 从 S3 复制到 Redshift
将数据从 s3 复制到 redshift 时忽略所有无效记录