0

我正在建立一个火花簇。我在同一实例上有 hdfs 数据节点和 spark 主节点。

当前设置是 1-master(spark 和 hdfs)6-spark worker 和 hdfs 数据节点

所有实例都是相同的,16gig 双核(不幸的是)。

我还有 3 台机器,同样的规格。现在我有三个选择 1. 在这 3 台机器上部署 es 就可以了。集群看起来像 1-master(spark 和 hdfs) 6-spark worker 和 hdfs 数据节点 3-elasticsearch 节点

  1. 在 1 上部署 es master,在所有其他上扩展 spark 和 hdfs 和 es。集群看起来像 1-master(spark 和 hdfs) 1-master elasticsearch 8-spark worker、hdfs 数据节点、es 数据节点

我的应用程序大量使用 spark 进行连接、ml 等,但我们正在寻找搜索功能。搜索我们绝对不需要实时,长达 30 分钟的刷新间隔对我们来说甚至很好。

同时spark集群除了es索引之外还有其他长时间运行的任务。

解决方案不必是上述之一,如果有人建议,我愿意进行实验。一旦结束,其他开发人员也会很方便。

我也在尝试使用 es hadoop、es-spark 项目,但如果我做 3 个专用节点,我觉得摄取非常慢,就像每分钟 60 万条记录。

4

1 回答 1

0

这里的最佳方法主要取决于您的网络带宽以及我认为它是否是您操作的瓶颈。

我会通过say或类似的方式检查我的网络链接是否饱和, iftop -i any并检查是否是这种情况。如果您看到数据速率接近网络的物理容量,那么您可以尝试在运行 ES 的同一台机器上运行 hdfs + spark 以节省网络往返并加快速度。

如果网络不是这里的瓶颈,我会研究下 Spark 和 HDFS 的部署方式。您是否使用了所有可用的 RAM(Java Xmx 设置得足够高?,Spark 内存限制?如果 Spark 是通过 Yarn 部署的,则 Yarn 内存限制?)

此外,您应该检查 ES 或 Spark 是否是这里的瓶颈,很可能是 ES。也许你可以生成额外的 ES 实例,3 个 ES 节点为 6 个 spark 工作人员提供服务似乎非常不理想。如果有的话,我可能会尝试反转这个比率,更少的 Spark 执行器和更多的 ES 容量。ES 提供数据的速度可能比 HDFS 编写数据的速度慢很多(尽管这实际上取决于两者的配置......这里只是一个有根据的猜测:))。很可能更多的 ES 节点和更少的 Spark 工作人员将是这里更好的方法。

简而言之:

  • 添加更多 ES 节点并减少 Spark 工作人员数量
  • 检查您的网络链接是否饱和,如果是,将两者放在同一台机器上(这可能对只有 2 个内核是有害的,但我仍然会试一试......你必须尝试一下)
  • 添加更多 ES 节点是您可以做的两件事中更好的选择:)
于 2016-12-22T17:52:56.227 回答