eld*_*uff 1 java multithreading amazon-s3 amazon-redshift
我正在使用Redshift进行一些POC工作,使用来自Java程序的copy命令通过S3 json文件加载数据.这个POC正在测试我们为Redshift播种而不是日常使用的初始数据迁移.我的数据被拆分为S3中的大约7500个子文件夹,我希望能够并行插入子文件夹.每个子文件夹包含大约250个json文件,每个文件大约插入3000行.
我的类的单线程版本在大约20秒内从我的一个s3子文件夹加载文件(通过复制命令).但是,当我引入第二个线程(每个线程从BoneCP连接池获得一个redshift数据库连接)时,每个复制命令(第一个除外)大约需要40秒.当我在Redshift中运行查询以显示所有正在运行的查询时,Redshift表示它正在同时运行两个查询(如预期的那样).但是,就好像第二个查询真的在等待第一个查询开始工作之前完成.我预计每个复制命令仍然只需要20秒.Redshift控制台显示我只能运行单线程或双线程的高达60%的CPU使用率.
这可能是因为我的Redshift集群中只有一个节点吗?或者Redshift无法打开到S3的多个连接来获取数据?我很感激有关如何通过运行多线程复制命令获得性能提升的任何提示.
Amazon Redshift 利用所有节点并行地从Amazon S3加载数据.从测试结果来看,运行多个COPY命令似乎不会提高性能,因为所有节点都已经参与了复制过程.
对于每个表,始终在单个COPY命令中加载尽可能多的文件,而不是稍后添加.如果要加载多个表,最好按顺序执行它们(但是您的测试可能会发现加载多个较小的表可以并行完成).
一些参考:
| 归档时间: |
|
| 查看次数: |
2188 次 |
| 最近记录: |