【问题标题】:Elasticsearch Shard distribution size differs enormouslyElasticsearch Shard 分布大小差异很大
【发布时间】:2021-10-11 16:42:26
【问题描述】:

我需要在 elasticsearch 中加载 12 亿个文档。截至今天,我们在集群中有 6 个节点。为了在 6 个节点之间平均分配分片,我提到分片的数量为 42。我使用 spark 加载索引需要将近 3 天。分片分布看起来很糟糕。

节点 6 中只有两个分片,而节点 2 几乎有 10 个分片。尺寸分布也不均匀。在同一节点内,有些分片为 114.6GB,而有些分片仅为 870MB。

我也试图找出解决方案。我可以包括 index.routing.allocation.total_shards_per_node: 7 同时创建索引并使其均匀分布。如果没有足够的可用资源,是否会强制节点中指定数量的分片,使节点崩溃?

我想均匀地调整碎片的大小。我的索引大小是 900 gb apprx。我希望每个分片至少为 20 GB。我可以在创建索引时使用以下设置吗? max_primary_shard_size: 25gb 是否只能通过 ilm 策略设置最大分片大小,我是否需要为此设置翻转策略?我对ilm不太熟悉。对不起,如果这没有意义。

我尝试优化索引的主要原因是,当我查询弹性搜索时,我的应用程序出现超时错误。我知道我可以增加我的应用程序中的超时时间并进行一些查询优化,但首先我想优化我的索引并使我的应用程序尽可能快。

我只加载一次索引,并且在一次加载后不向它写入任何文档。对于我每 15 天加载一次的附加数据,我创建一个不同的索引并在两个索引上使用别名来查询。除了分片,如果有任何优化我的索引的建议,我将非常感激。加载数据需要我 3 天的时间,因此很难进行实验。

【问题讨论】:

    标签: elasticsearch optimization bigdata real-time sharding


    【解决方案1】:

    您是否在索引方法中使用自定义路由值?这可能解释了分片大小的差异。 如果您还没有这样做,请在执行批量索引时禁用副本和刷新,因为这会加快速度

    最后你 20gig 的分片大小可能有点低,我建议将该大小加倍,目标是

    【讨论】:

    • 我在创建索引时没有使用任何自定义路由值。我只是在我的设置中使用了以下属性:"index": {"number_of_shards": 42} 据我所知,如果我们不提及路由值,elasticsearch 本身不应该在分片之间平均分配文档。我在这里错过了什么吗?
    • 应该,是的,这就是我询问路由的原因。没有关于摄取过程的更多细节,我们只是猜测
    猜你喜欢
    • 2019-09-25
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    相关资源
    最近更新 更多