【问题标题】:Elasticsearch cluster size/architectureElasticsearch 集群大小/架构
【发布时间】:2018-06-13 21:14:35
【问题描述】:

我一直在尝试设置一个 elasticsearch 集群来处理来自一些 3D 打印机的一些日志数据。 我们每天为 20 台机器生成超过 850K 的文档。他们每个人都有自己的索引。

现在我们有 16 个月的数据,在每个 elasticsearch 索引中索引了大约 410M 记录。 我们正在使用 spark 处理来自 CSV 文件的数据,并写入一个包含 3 台机器的 elasticsearch 集群,每台机器都有 16GB 的 RAM 和 16 个 CPU 内核。 但是每次我们达到大约 10-14M 文档/索引时,我们都会遇到网络错误。

Job aborted due to stage failure: Task 173 in stage 9.0 failed 4 times, most recent failure: Lost task 173.3 in stage 9.0 (TID 17160, wn21-xxxxxxx.ax.internal.cloudapp.net, executor 3): org.elasticsearch.hadoop.rest.EsHadoopNoNodesLeftException: Connection error (check network and/or proxy settings)- all nodes failed; tried [[X.X.X.X:9200]]

我确定这不是网络错误,只是 elasticsearch 无法处理更多索引请求。

为了解决这个问题,我尝试调整许多 elasticsearch 参数,例如:refresh_interval 以加快索引速度并消除错误,但没有任何效果。在监控集群之后,我们认为我们应该扩大规模。

我们还尝试调整 elasticsearch spark 连接器,但没有结果。

所以我正在寻找一种选择集群大小的正确方法?是否有关于如何选择集群大小的指南?任何亮点都会有所帮助。

注意:我们主要对索引数据感兴趣,因为我们只有一两个查询可以在数据上运行以获取一些指标。

【问题讨论】:

    标签: apache-spark elasticsearch elasticsearch-5


    【解决方案1】:

    我会首先尝试按月(甚至一天)拆分索引,然后在索引模式中进行搜索。示例:sensor_data_2018.01、sensor_data_2018.02、sensor_data_2018.03等。并使用sensor_data_*的索引模式进行搜索

    会影响您需要的集群大小的一些因素是:

    • 有多少文档
    • 每个文档的平均大小
    • 每秒有多少条消息被编入索引
    • 磁盘 IO 速度

    我认为您的集群应该足以处理这么多的数据。我们有一个包含 3 个节点(每个节点 8CPU / 61GB RAM)、约 670 个索引、约 30 亿个文档、约 3TB 数据的集群,并且只有在索引速度超过 30,000 个文档/秒时才会出现索引问题。即使这样,也只有少数文档的索引会失败,并且可以在短暂延迟后成功重试。我们的实现也非常繁重,需要最少的实际搜索。

    我会检查弹性搜索服务器日志,看看是否能找到更详细的错误消息。可能寻找 RejectedExecutionException 的。当您开始收到故障时,还要检查cluster healthnode stats,这可能会更清楚地了解正在发生的事情。如果可能,在开始发生故障时实施重试和退避,以给 ES 时间赶上负载。

    希望能有所帮助!

    【讨论】:

      【解决方案2】:

      这是一个网络错误,表示数据节点...丢失。可能是崩溃了,你可以查看 elasticsearch 日志看看发生了什么。

      使用 elasticsearch4Hadoop 最重要的是要了解工作是如何并行化的:

      • 1 个 Spark 分区由 1 个 elasticsearch 分片

      重要的是分片,这是您使用 elasticsearch 负载平衡工作的方式。此外,refresh_interval 必须 > 30 秒,并且,您应该在索引时禁用复制,这是非常基本的配置调整,我相信您可以在文档中找到很多关于此的建议。

      使用 Spark,您可以在 Web UI(端口 4040)上检查工作是如何划分为任务和分区的,这很有帮助。此外,您还可以监控 Spark 和 ES 之间的网络带宽,以及 es 节点统计信息。

      【讨论】:

      • 在我的 spark UI 上,我平均有 250 个任务(这意味着 250 个分区),如果没有发生错误,则需要 45 分钟才能将其写入 els。
      • 多少个 Spark worker ?多少个核心,多少个 ES 分片?
      • 10 个具有 40 个核心的 spark 工作人员(每个工作人员 4 个)。 ELS 索引有 5 个分片
      • 所以这意味着你可以同时拥有 400 个任务,这将写入 5 个分片。一个好的架构是拥有相同数量的 Spark 工作节点和弹性搜索数据节点。并将 ES 分片分布在所有数据节点上。
      猜你喜欢
      • 2019-04-03
      • 1970-01-01
      • 1970-01-01
      • 2020-04-27
      • 2015-11-21
      • 2016-06-28
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多