2017-03-17 102 views
1

我有一个运行Elasticsearch的旧集群1.4.4。 我的群集包含约110亿份文档,所有初选的大小约为4TB5.x的Elasticsearch索引大小比1.x大40%

我现在正在升级到Elasticsearch 5.2.2,这当然意味着重新索引我的数据。我目前正在发生一个单独的群集。我从我的源数据库重新索引,因为我在原始索引上禁用了_all_source

我现在重新索引了大约7.5亿个文档,并注意到我的新索引大小已经为350GB。我做了一些数学计算,看起来索引将在完全索引时增长到大约5.5TB。那是1.5TB以上1.4.4指数。我并不期待这一点。相反,我期望减小尺寸,因为我删除了几个属性。这是正常的事情还是我做错了什么? 5.2.2中有不同的默认设置可以促进这种增长吗?

1.4.4索引设置:

{ 
    "index": { 
    "refresh_interval": "30s", 
    "number_of_shards": "20", 
    "creation_date": "1426251049131", 
    "analysis": { 
     "analyzer": { 
     "default": { 
      "filter": [ 
      "icu_folding", 
      "icu_normalizer" 
      ], 
      "type": "custom", 
      "tokenizer": "icu_tokenizer" 
     } 
     } 
    }, 
    "uuid": "WdgnCLyITgmpb4DROegV3Q", 
    "version": { 
     "created": "1040499" 
    }, 
    "number_of_replicas": "1" 
    } 
} 

1.4.4索引映射:

{ 
    "article": { 
    "_source": { 
     "enabled": false 
    }, 
    "_all": { 
     "enabled": false 
    }, 
    "properties": { 
     "date": { 
     "format": "dateOptionalTime", 
     "type": "date", 
     "doc_values": true 
     }, 
     "has_enclosures": { 
     "type": "boolean" 
     }, 
     "feed_subscribers": { 
     "type": "integer", 
     "doc_values": true 
     }, 
     "feed_language": { 
     "index": "not_analyzed", 
     "type": "string" 
     }, 
     "author": { 
     "norms": { 
      "enabled": false 
     }, 
     "analyzer": "keyword", 
     "type": "string" 
     }, 
     "has_pictures": { 
     "type": "boolean" 
     }, 
     "title": { 
     "norms": { 
      "enabled": false 
     }, 
     "type": "string" 
     }, 
     "content": { 
     "norms": { 
      "enabled": false 
     }, 
     "type": "string" 
     }, 
     "has_video": { 
     "type": "boolean" 
     }, 
     "url": { 
     "index": "not_analyzed", 
     "type": "string" 
     }, 
     "feed_canonical": { 
     "type": "boolean" 
     }, 
     "feed_id": { 
     "type": "integer", 
     "doc_values": true 
     } 
    } 
    } 
} 

5.2.2索引设置:

{ 
    "articles": { 
    "settings": { 
     "index": { 
     "refresh_interval": "-1", 
     "number_of_shards": "40", 
     "provided_name": "articles", 
     "creation_date": "1489604158595", 
     "analysis": { 
      "analyzer": { 
      "default": { 
       "filter": [ 
       "icu_folding", 
       "icu_normalizer" 
       ], 
       "type": "custom", 
       "tokenizer": "icu_tokenizer" 
      } 
      } 
     }, 
     "number_of_replicas": "0", 
     "uuid": "LOeOcZb_TMCX6E_86uMyXQ", 
     "version": { 
      "created": "5020299" 
     } 
     } 
    } 
    } 
} 

5.2.2指数映射:

{ 
    "articles": { 
    "mappings": { 
     "article": { 
     "_all": { 
      "enabled": false 
     }, 
     "_source": { 
      "enabled": false 
     }, 
     "properties": { 
      "author": { 
      "type": "text", 
      "norms": false, 
      "analyzer": "keyword" 
      }, 
      "content": { 
      "type": "text", 
      "norms": false 
      }, 
      "date": { 
      "type": "date" 
      }, 
      "feed_canonical": { 
      "type": "boolean" 
      }, 
      "feed_id": { 
      "type": "integer" 
      }, 
      "feed_subscribers": { 
      "type": "integer" 
      }, 
      "title": { 
      "type": "text", 
      "norms": false 
      }, 
      "url": { 
      "type": "keyword" 
      } 
     } 
     } 
    } 
    } 
} 

任何帮助将非常感激,因为这一组充满重建索引需要大约30天...谢谢!

回答

0

我看你已经修改刷新时间间隔,并把副本的数量为0,如果使用旋转磁盘,您可以添加到elasticsearch.yml增加索引速度:

index.merge.scheduler.max_thread_count: 1 

如果你不不关心搜索,你的ES5集群上的以下内容也可以帮助:

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

确保你有交换禁用。在ES5集群中为您的节点分配了多少内存? (由于Elasticsearch的内存寻址限制,您应该使用节点总可用内存的一半,最大值为32 GB)。

此外,这种规模的增加可能是因为Elasticsearch经常不合并其片段,并且会等待平静期来合并它们,从而减少磁盘上的大小。只要重新索引尚未结束,对新索引的总体规模进行判断还有点早。

低于几篇文章可以帮助:

+0

感谢您的建议。索引速度并不是我关心的问题。它做得很好。服务器非常强大,并针对ES进行了优化。你对分段合并的看法是合理的,我确实已经注意到了一些波动,但指数仍然大得多。我怀疑它只会在部分合并的情况下最终收缩。 – Jacket

+0

虽然30天对于您所拥有的大小来说是相当长的一段日子(尽管我不知道集群的大小)。关于磁盘空间,本文将通过以下方式分享一个有趣的体验:https:// blog.discordapp.com/how-discord-indexes-billions-of-messages-e3d5e9be866f#.6zzwqchb6 – Adonis

+0

集群高兴地在3台服务器上运行(现在增加4台),每台服务器都配有64G RAM,4个900GB SSD。源数据在11TB价值的MySQL数据库中,它们是生产数据库运行繁忙的服务,所以显然我不能将它们推到极限。瓶颈不是ES。我唯一关心的是最终的总体指数规模。 – Jacket

1

我的猜测是doc_values。 由于弹性2.0,默认情况下启用了doc_values,这意味着您的5.2映射为比1.4映射更多的字段创建doc_values,并且会消耗磁盘空间。

+0

这是我最初的想法,因为它看起来很常见。但是,如果你看到我的1.4.4索引,那么我已经在新索引中保存的相同字段上显式启用了doc_values。在前一个索引中只有一个布尔字段没有doc_values,但我非常怀疑这种开销来自它。如果确实如此,那么我将重新开始重新编排过程,但我已经3天了......如何确定? – Jacket

+0

我计算了两个非1.4文档值的字段,并且位于5: url,feed_canonical。它可以解释尺寸增长,即使删除了4个布尔属性(它们可能是高度可压缩的,并且不需要太多空间)。 除此之外,了解群集中有多少个节点,有多少个索引,分片大小,是否有任何文档路由等,将会很有用。 – Roman

+0

如果可能对您有用,也许开始第二次摄取过程 - 与第一次摄影过程并行 - 对于“足够好”的文档量(100-200密耳),然后再次估计新大小 – Roman

相关问题