2016-12-22 9 views
2

私はMongodbに3Mレコードを持っているユースケースを持っています。Mongodb map reduce対Apache Spark map reduce

いくつかの条件に基づいてデータを集計する必要があります。

私はMongoDBのマップは、ApacheスパークマップがスパークするためにMongoDBのを接続することにより、機能を減らす使う機能クエリ
  • を減らす使用すること

    • を達成するために二つの方法を見つけました。

    私は上記の方法を使用して私のユースケースをうまく実行し、両方のパフォーマンスが似ています。

    私のクエリはですか?

    んのMongoDBとApacheスパークが同じ地図(減らすスパークまたはネイティブのMongoDBマップを使用してM.R)どのメソッドアルゴリズムとを減らす使用

    、より効率的でしょうか?

  • 答えて

    4

    んのMongoDBとApacheスパークが同じ地図、より効率的である(M.Rが軽減スパークまたはネイティブのMongoDBマップを使用して)メソッドアルゴリズムとを減らすでしょうか?

    広義にはmap-reduceアルゴリズムであり、実装は賢明ですが(つまり、JavaScriptとJava Jar)

    2つのユースケースの適合性を判断することについては、他の面から検討する必要があります。 特に、の場合は、どちらもパフォーマンスが似ていることがわかりました。のは、以下の探検してみましょう:

    は、あなたが側MongoDBクラスタに沿ってApache Sparkクラスタを維持するためのリソース(時間、お金、サーバ)と専門知識を持っていると仮定すると、その後、別の処理フレームワーク(スパーク)およびデータストレージ(MongoDBの)を有する理想的です。 MongoDBサーバーでのデータベース照会のためのCPU/RAMリソース、およびSparkノードの集中的なCPUリソースのみのETLのメンテナンス。その後、処理の結果をMongoDBに書き戻します。

    を使用している場合は、Aggregation Pipeline(secondary) indexesを使用して、スパークの必要なデータ範囲のみをETLで処理できます。 Sparkノードに不要なデータを引き込むのではなく、処理オーバーヘッド、ハードウェア要件、ネットワーク待ち時間が増えます。

    あなたは次のリソースが役立つことがあります。

    、その後、MongoDBの中でそれを保ちます。ほとんどの集約オペレーションでは、Aggregation Pipelineは、MongoDBのmap-reduceよりも優れたパフォーマンスとコヒーレントなインターフェイスを提供します。 map-reduceを集約パイプラインに変換できる場合は、そうすることをお勧めします。余分な最適化のヒントについては、Aggregation Pipeline Optimisationも参照してください。ご利用の場合は、リアルタイム処理を必要としない場合

    、あなたはMongoDB Replica Setdelayedまたはhiddenノードを構成することができます。集約/マップ削減処理のための専用サーバー/インスタンスとして機能します。処理ノードとデータストレージノードを分離する。 Replica Set Architecturesも参照してください。

    関連する問題