2017-08-16 9 views
2

&を抽出し、SQLServerの複数のインスタンスから100以上のテーブルをOracleの多数のインスタンスに毎日並行してロードするETLプロセスを作成する必要があります。基礎。私はこれを達成するためにJavaで複数のスレッドを作成できることを理解していますが、それらがすべて同じマシン上で実行されている場合、このアプローチは拡張されません。もう1つのアプローチは、ec2インスタンスの束を得ることである可能性があります&別のec2インスタンス上の各インスタンスのテーブルの転送を開始します。しかし、このアプローチでは、プールにマシンを追加/削除することで "弾力性"を守る必要があります。Apache Sparkを使用して1つのDbから別のDbにデータを転送するプロセス

何とか私はこれを達成するために "Amazon EMRのApache Spark"を使うことができると思いますが、これまでSparkを使ってHDFS/Hiveのデータを処理していました。 DbはSparkの良いユースケースですか?そうですか?

答えて

0

あなたの最後の質問最低料金:「別のDBへ1 DBからのデータを転送すると、スパークのために良いユースケースであることを確認していない場合は、」

それは、JDBCスパークコネクタの制限の範囲内、です。更新に欠けているサポートや、テーブルを読むときの並列性(数値列でテーブルを分割する必要がある)などのいくつかの制限があります。

IOコストとRDBMS全体のパフォーマンスを考慮すると、FIFOモードでジョブを実行することは良い考えのようには聞こえません。 1/xのクラスタリソースが必要な構成でジョブのそれぞれを実行依頼することができます。したがって、xテーブルが並行して処理されます。

+0

SQL Serverの各Dbインスタンスに対して1つのジョブ(Sparkプログラム)を開始し、そのプログラム内で100個のテーブルごとにスレッドを作成するとどうなりますか?各スレッドは、指定されたテーブルを更新します。これらのスレッドが同時に実行されている場合、Sparkは異なるマシン間で負荷を分散しますか? – DilTeam

+0

スパーク・スケールは、RDBMSでよく読めるように拡張されたデータ・ソースでうまくいくことがあります。 sparkが実行を配布する場合の短い答えはYESですが、コネクタ/スパークがどのように並列処理を行っているかを理解して、独自の最適化を実行する必要があります。これは1つのスパークアプリケーションで実行できます。 –

関連する問題