将文件从 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 花费的时间太长的主要内容,如果未能解决你的问题,请参考以下文章

将文件(带有特定后缀)从 S3 复制到 Redshift

使用复制命令将数据从 s3 加载到 redshift

将具有多个值的 JSON 从 S3 复制到 Redshift

将数据从 s3 复制到 redshift 时忽略所有无效记录

将数据从 Amazon S3 复制到 Redshift 并避免重复行

从 s3 到 Redshift 的数据复制:清单与我需要下载的文件位于不同的存储桶中