从S3复制实木复合地板文件时出现Vertica性能问题

问题描述 投票:0回答:1

我有66个实木复合地板文件,它们经过GZIP压缩,由S3中的20亿条记录组成,我使用Vertica复制命令将数据从s3复制到Vertica,如下所示。

COPY schema.table ( col1, col2, col3, col4, col5, col6 ) FROM 's3://test_path/*' PARQUET ABORT ON ERROR DIRECT NO COMMIT 

我们有4个Vertica节点。为了复制这20亿行,需要45分钟以上。 Vertica文档说,默认情况下,从S3加载文件以多线程方式在多个节点上运行。 DBA告诉我,达到最佳性能的方法是并行运行66个查询(每个文件1个查询),这样每个查询将在不同的节点上运行,并且每个查询将加载不同的文件。

Vertica Copy命令是从Java中以编程方式调用的,我不想对每个文件运行copy命令,这使维护事务变得很麻烦,而且在高峰负载期间文件可能会增加到1000+。

我想只使用一个COPY命令来减少执行时间,所以真的很感谢任何指针和帮助。

谢谢

performance amazon-s3 bigdata vertica
1个回答
0
投票

尝试这个:

COPY schema.table ( col1, col2, col3, col4, col5, col6 ) 
FROM 's3://test_path/*' ON ANY NODE PARQUET
ABORT ON ERROR DIRECT;

我不知道您的DBA是如何得到您应该为每个文件运行一个命令的想法...上面的命令将在解析阶段涉及4个节点中的每个节点,通常每个节点甚至具有几个并行解析器。解析阶段完成后,将根据表在各个节点上的投影分割方案对数据进行分割,每个节点将对自己的数据进行排序和编码,最后将其写入磁盘-最后提交。只要记住文件全局字符串后的ON ANY NODE指令即可。

使用1000个文件而不是60个文件,您最终可能会达到性能下降(例如,数TB的数据,具体取决于节点的RAM大小)-然后您可能想要使用通常的分而治之方法将其分为几个命令。只需尝试入门...

© www.soinside.com 2019 - 2024. All rights reserved.