2015-09-01 66 views
0

我正在做一些使用Redshift的POC工作,使用來自Java程序的複製命令通過S3 json文件加載數據。這個POC正在測試一個初始的數據遷移,我們會做種子Redshift,而不是日常使用。我的數據在S3中被拆分爲大約7500個子文件夾,我希望能夠並行插入子文件夾。每個子文件夾包含約250個json文件,每個文件約需要插入3000行。通過S3將數據加載到Redshift中COPY,多線程

我的課程的單線程版本在大約20秒(通過複製命令)從我的s3子文件夾之一加載文件。但是,當我引入第二個線程(每個線程從BoneCP連接池中獲得一個Redshift數據庫連接)時,每個複製命令(除第一個之外)都需要大約40秒。當我在Redshift中運行查詢以顯示所有正在運行的查詢時,Redshift表示它正在同時運行兩個查詢(如預期的那樣)。然而,就好像第二個查詢在開始工作之前確實等待第一個完成。我預計每個複製命令每個仍然只需要20秒。 Redshift控制檯顯示我只有60%的CPU使用率運行單線程或雙線程。

難道這是因爲我的Redshift集羣中只有1個節點?或者Redshift無法打開到S3的多個連接來獲取數據?我很感激任何有關如何通過運行多線程複製命令來獲得性能提升的提示。

回答

5

Amazon Redshift並行加載Amazon S3的數據,利用所有節點。從您的測試結果看來,運行多個COPY命令不會提高性能,因爲所有節點都已經參與了複製過程。

對於每個表,總是在單個COPY命令中加載儘可能多的文件,而不是稍後追加。如果您要加載多個表,最好按順序進行(但您的測試可能會發現可以並行加載多個較小的表)。

一些參考:

+0

也儘量保持文件的尺寸儘量均勻,如果文件很小(KB範圍)不要費心去壓縮它們。 – Guy

相關問題