【发布时间】: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