我正在设置一个火花星团。我在相同的实例上有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节点
我的应用程序大量使用spark for join,ml等,但我们正在寻找搜索功能。搜索我们绝对不需要实时,最多30分钟的刷新间隔对我们来说甚至是好的。
同时,除了es索引之外,spark集群还有其他长期运行的任务。
解决方案不一定是上述之一,如果有人建议我开放实验。一旦结束,其他开发者也会很方便。
此外,我正在尝试使用es hadoop,es-spark项目,但如果我做3个专用节点,我认为摄取很慢,就像60万条记录/分钟一样。
答案 0 :(得分:0)
这里的最佳方法主要取决于您的网络带宽,以及在我看来它是否是您操作的瓶颈。
我只会检查我的网络链接是否已经饱和
iftop -i any
或类似的,并检查是否是这种情况。如果您看到数据速率接近网络的物理容量,那么您可以尝试在运行ES的相同计算机上运行hdfs + spark,以节省网络往返并加快速度。
如果网络不是这里的瓶颈,我会研究下一步部署Spark和HDFS的方式。 您是否使用了所有可用的RAM(Java Xmx设置得足够高?,Spark内存限制?如果通过Yarn部署Spark,会增加内存限制吗?)
此外,你应该检查ES或Spark是否是这里的瓶颈,很可能是ES。也许你可以产生额外的ES实例,3个ES节点供给6个火花工人似乎非常不理想。 如果有的话,我可能会尝试反转这个比例,更少的Spark执行器和更多的ES容量。在提供数据时,ES可能比HDFS写入时慢得多(尽管这实际上取决于两者的配置......这只是一个有根据的猜测:))。很可能更多的ES节点和更少的Spark工作人员将是更好的方法。
简而言之: