将文件从 s3 复制到 redshift 花费的时间太长

Rod*_*Ney 1 amazon-s3 amazon-redshift

我正在使用 AWS 将COPYS3 存储桶中的文件记录到 Redshift 集群内的表中。每个文件大约有 100MB,我'gziped'还没有。我现在有 600 个论文文件,而且还在增加。我的集群有 2 个dc1.large计算节点和一个领导节点。

问题是,COPY手术时间太大了,至少要40分钟。加快速度的最佳方法是什么?

1)获得更多节点或更好的节点机器?

2)如果我对文件进行 gzip,在COPY操作时间增加方面真的很重要吗?

3) 有一些设计模式在这里有帮助吗?

Big*_*Kid 6

罗德里戈,

以下是答案:

1 - 在更改硬件设置之前,您可能可以进行一些优化。您必须进行测试以确保完成所有优化后,如果您仍然需要更好的性能,我建议使用更多节点。

2 - Gzipped 文件可能会给您带来性能提升。但我怀疑您还需要先进行其他优化。请参阅 Redshift 文档中的此建议:http : //docs.aws.amazon.com/redshift/latest/dg/c_best-practices-compress-data-files.html

3 -- 以下是您应该按重要性顺序查看的事项:

  1. 分布键——你的分布键是否提供了跨多个切片的良好分布?如果您有一个“坏”的分发密钥,那就可以解释您所看到的问题。
  2. 编码——确保编码是最佳的。使用分析压缩命令。
  3. 排序键 -- 您是否选择了适合该表的排序键。拥有一个好的排序键会对压缩产生巨大影响,进而影响读取和写入时间。
  4. 抽真空——如果您在此表中执行了多项测试,您是否在两次测试之间抽真空。Redshift 在删除或更新后不会移除数据(更新被处理为删除和插入,而不是就地更新)。
  5. 多个文件——您应该拥有大量文件。您已经这样做了,但对于尝试将数据加载到 Redshift 的人来说,这通常是一个很好的建议。
  6. 清单文件——使用清单文件允许 Redshift 并行化您的负载。

我希望 60GB 的负载比您看到的要快,即使在 2 节点集群中也是如此。检查这 6 项并告诉我们。

谢谢

@BigDataKid