これは古典的な移行の問題です。これには複数の解決策があります。 (スパークデータフレーム、スパークSQLと呼ばれる)
Spark SQL and Spark Cassandra Connector:
スパークJDBCは、APIを使用すると、任意のJDBCソースから読み取ることができます。あなたはそれを分割することによって塊で読むことができます。そうでなければ、あなたはメモリから出ます。セグメンテーションは移行を並行させます。その後、Cassandra Spark ConnectorによってCassandraにデータを書き込みます。これは、私の仕事ではるかに簡単で効率的な方法です。
Java Agents:
Javaエージェントは、プレーンJDBCまたは他のライブラリに基づいて作成し、Datastaxドライバを使用してCassandraに書き込むことができます。スパークプログラムは、マルチマシン - マルチスレッド方法で実行され、何かが自動的に間違っている場合に回復します。しかし、このようなエージェントを手動で作成すると、エージェントは単一のマシン上でのみ実行され、マルチスレッドもコード化する必要があります。
Kafka Connectors
:Kafkaはメッセージブローカーです。間接的に使用して移行することができます。 Kafkaには、異なるデータベースに読み書きできるコネクタがあります。 JDBCコネクタを使用すると、PostGresとCassandraコネクタから読み込み、Cassandraに書き込むことができます。セットアップは簡単ではありませんが、「コーディングは必要ありません」という利点があります。
ETL Systems:
一部のETLシステムではCassandraがサポートされていますが、何も試していません。
私は、Sparkカサンドラを使用していくつかの利点を見て、移行のためにSQLをスパーク、そのうちのいくつかは以下のとおりです。
- コードは簡潔でした。スパークノードがダウンしているか、スレッド/ワーカーが失敗し、ジョブである場合には、スパークマスターUIに難40行
- マルチマシン(再びマルチ各マシン上でスレッド)
- ジョブの進捗状況および統計
- フォールトtolerance-ました他のノードで自動的に起動 - 非常に長時間実行されているジョブに適しています
スパークがわからない場合、書き込みエージェントは4GBのデータで問題ありません。