gpt4 book ai didi

java - 通过 S3 COPY 将数据加载到 Redshift,多线程

转载 作者:行者123 更新时间:2023-11-29 06:57:09 24 4
gpt4 key购买 nike

我正在使用 Redshift 进行一些 POC 工作,使用来自 Java 程序的复制命令通过 S3 json 文件加载数据。此 POC 正在测试我们为播种 Redshift 而不是日常使用所做的初始数据迁移。我的数据在 S3 中被分成大约 7500 个子文件夹,我希望能够并行插入子文件夹。每个子文件夹包含大约 250 个 json 文件,每个文件大约有 3000 行要插入。

我的类的单线程版本在大约 20 秒内从我的 s3 子文件夹之一加载文件(通过复制命令)。但是,当我引入第二个线程时(每个线程从 BoneCP 连接池获取一个 redshift 数据库连接),每个复制命令(第一个除外)大约需要 40 秒。当我在 Redshift 中运行一个查询以显示所有正在运行的查询时,Redshift 说它同时运行两个查询(如预期的那样)。但是,就好像第二个查询真的在等待第一个查询在开始工作之前完成。我预计每个复制命令仍然只需要 20 秒。 Redshift 控制台显示我在单线程或双线程运行时的 CPU 使用率最多只有 60%。

这会不会是因为我的 Redshift 集群中只有 1 个节点?还是 Redshift 无法打开到 S3 的多个连接来获取数据?对于如何通过运行多线程复制命令获得一些性能提升的任何提示,我将不胜感激。

最佳答案

Amazon Redshift 利用所有节点从 Amazon S3 加载数据。从您的测试结果来看,运行多个 COPY 命令似乎不会提高性能,因为所有节点都已参与复制过程。

对于每个表,始终在单个COPY 命令中加载尽可能多的文件,而不是稍后追加。如果您要加载多个表,最好按顺序加载它们(但您的测试可能会发现加载多个较小的表可以并行完成)。

一些引用资料:

关于java - 通过 S3 COPY 将数据加载到 Redshift,多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32337679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com