2016-12-30 8 views
0

2つのインデックスを持つ7つのノード弾性検索クラスタがあり、どちらもネストされたオブジェクトマッピングを持っています。私はかなりの遅れを挿入に入れてインデックス2(スパークストリーミングを通して)です。バッチあたり〜8-12s(〜100kレコード)を要するバルク挿入を使用しています。マッピングインデックス2弾性検索:大きなデータセットでのパフォーマンスが遅い

Node Configuration: 
RAM: 64 GB 
Core: 48 
HDD : 1 TB 
JVM allocated Memory: 32 GB 

Marvel Node Status: 
CPU Usages: ~10-20% 
JVM Memory: ~60-75% 
Load Average : ~3-35 
Indexing Rate: ~10k/s 
Search Rate: ~2k/s 

Index1 (Replication 1): 
Status: green 
Documents: 84.4b 
Data: 9.3TB 
Total Shards: 400 (Could it be the reason of low performance) 

Index2 (Replication 1): 
Status: green 
Documents: 1.4b 
Data: 35.8GB 
Total Shards: 10 
Unassigned Shards: 0 

Spark streaming configuration: 
executors: 2 
Executor core per executor: 8 
Number of partition: 16 
batch size: 10s 
Event per batch: ~1k-200k 
Elastic Bulk insert count: 100k 

{ 
    "settings": { 
    "index": { 
     "number_of_shards": 5, 
     "number_of_replicas": 1 
    } 
    }, 
    "mappings": { 
    "parent_list": { 
     "_all": { 
     "enabled": false 
     }, 
     "properties": { 
     "parents": { 
      "type": "nested", 
      "properties": { 
      "parent_id": { 
       "type": "integer", 
       "doc_values": false 
      }, 
      "childs": { 
       "type": "nested", 
       "properties": { 
       "child_id": { 
        "type": "integer", 
        "doc_values": false 
       }, 
       "timestamp": { 
        "type": "long", 
        "doc_values": false 
       }, 
       "is_deleted": { 
        "type": "boolean", 
        "doc_values": false 
       } 
       } 
      } 
      } 
     }, 
     "other_ID": { 
      "type": "string", 
      "index": "not_analyzed", 
      "doc_values": false 
     } 
     } 
    } 
    } 
} 

マイクエリ:is_deleted偽と少なくとも一つの子を持つ親のIDによって

  1. 取得回数。
  2. is_deleted falseで子IDでカウントを取得します。
  3. 私は伸縮性のより高いパフォーマンスを期待していたが、それは私のシステムのボトルネックになる_id

により文書を取得します。 誰かがパフォーマンスチューニングを提案できますか?このクラスタ構成でElasticからより多くの挿入率を達成できますか?

+0

100kの文書を便利見つけ、他の質問は、たくさんのように聞こえる。それを下げてやり直すことはできますか? –

+0

私は10kでも試しましたが、あまり改善していません。 –

+0

@AndreiStefan Index1には400の断片があります。パフォーマンスが低いのはなぜですか?予想されるインサート率はどのくらいでしょうか? –

答えて

0

あなたの問題はおそらくハードウェアレベルの設定ではありません。ノードごとの2-3の最大破片の量> 0 下部(400 ridicusly危険である)

変化リフレッシュレート -

PUT /_cluster/settings 
{ 
    "transient" : { 
     "indices.store.throttle.type" : "none" 
    } 
} 

レプリカターンオフをthrotling無効

トライ-1指数化

PUT /{INDICE}/_settings 
{ 
    "index" : { 
     "refresh_interval" : "-1" 
    } 
} 

負荷分散サーバ間のバルク要求時(ノード)

ソケット

て使用永続たっ100kの文書一括要求に関するあなたはネットワークのボトルネック

に実行していないことを確認し、それは各ドキュメントのサイズに依存し、甘いspootは約常に4であります-5k。どうして?バルクAPIはすぐにデータを挿入しないため、最初にキャッシュしてからディスクにダンプします。キャッシュを実行すると、大きなバッチが送信され、スローされた問題に遭遇します。

永続的な接続を使用している場合は、バルクAPIのサイズについて心配する必要はありません。ソケットを開いて1つのドキュメントのバッチを送信するだけで、それはblukで実行するほど速くなります。 (それはあなたの50msごとに往復節約HELO毎回を処理する必要がdoesntのよう)

私はこれは少し遅れている知っているが、うまくいけば、誰かがそれがsomepointにない大量のバッチで

関連する問題