2017-08-16 44 views
2

我需要創建一個ETL過程,該過程將提取,轉換&,然後從SQLServer的多個實例加載100多個表到並行的Oracle日常實例基礎。我知道我可以在Java中創建多個線程來完成這個任務,但是如果它們全部在同一臺機器上運行,這種方法將無法擴展。另一種方法是獲得一堆ec2實例&開始爲不同的ec2實例上的每個實例傳輸表。但是,通過這種方法,我必須通過添加/刪除池中的機器來照顧「彈性」。ETL過程使用Apache Spark將數據從一個Db傳輸到另一個Db

不知何故,我想我可以使用「亞馬遜EMR上的Apache Spark」來實現這一點,但是在過去我只使用Spark來處理HDFS/Hive上的數據,所以不確定是否將數據從一個Db傳輸到另一個Db Db是Spark的一個很好的用例 - 或者 - 它是什麼?

回答

0

從你最後一個問題開始: 「不知道從一個DB將數據傳輸到另一個數據庫是一個很好的用例星火」

是,JDBC的火花連接器的限制之內。有一些限制,例如更新中缺少支持,以及讀取表時的並行性(要求按數字列分割表)。

考慮到IO成本和RDBMS的整體性能,以FIFO模式運行作業似乎不是一個好主意。您可以使用需要羣集資源1/x的配置來提交每個作業,因此x表將被並行處理。

+0

如果我爲SQL Server的每個Db實例啓動一個作業(Spark程序),並且在該程序中爲這100個表中的每一個創建一個線程?每個線程都會更新給定的表。當這些線程同時運行時,Spark會在不同的機器上分配負載嗎? – DilTeam

+0

Spark數據源可以很好地讀取數據源,在RDBMS中通常不是這種情況。如果spark會分配執行結果,那麼簡短答案是YES,但您應該瞭解connector/spark如何執行並行性,以執行您自己的優化,這可以在一個Spark應用程序中完成。 –

相關問題