当前位置: 首页 > 知识库问答 >
问题:

spark集群的性能因添加更多节点而降低

田德馨
2023-03-14

我有一个由1B记录组成的大型数据集,由于Apache spark提供的可扩展性,我想使用它运行分析,但我在这里看到了一个反模式。我向spark集群添加的节点越多,完成时间就越长。数据存储是Cassandra,查询由Zeppelin运行。我尝试过许多不同的查询,但甚至是对<code>数据帧的简单查询。count()的行为如下。

这是齐柏林飞艇笔记本临时表有18M记录

val df = sqlContext
  .read
  .format("org.apache.spark.sql.cassandra")
  .options(Map( "table" -> "temp", "keyspace" -> "mykeyspace"))
  .load().cache()
df.registerTempTable("table")

%sql 
SELECT first(devid),date,count(1) FROM table group by date,rtu order by date

当针对不同数量进行测试时。这些是火花工人节点的结果

+-------------+---------------+
| Spark Nodes |      Time     |
+-------------+---------------+
| 1 node      | 17 min 59 sec |
| 2 nodes     | 12 min 51 sec |
| 3 nodes     | 15 min 49 sec |
| 4 nodes     | 22 min 58 sec |
+-------------+---------------+

增加节点数会降低性能。这不应该发生,因为它违背了使用Spark的目的。

如果你想让我运行任何查询或关于设置的进一步信息,请询问。任何关于为什么会发生这种情况的线索都是非常有用的,我已经在这上面困了两天了。谢谢你的时间。

版本

齐柏林飞艇:0.7.1,火花:2.1.0,卡桑德拉:2.2.9,连接器:数据税:火花卡桑德拉连接器:2.0.1-s_2.11

火花簇规格

6个vCPU,32 GB内存=1个节点

卡珊德拉·齐柏林服务器规格

8个vCPU,52 GB内存

共有1个答案

魏安宁
2023-03-14

需要考虑的一件事是,在某个点上,您可能会用请求压倒Cassandra集群。如果不扩展等式的Cassandra端,您很容易看到收益递减,因为C*最终花费了太多时间拒绝请求

这基本上是人工月谬误。仅仅因为你可以在一个问题上投入更多的工人并不一定意味着项目可以完成得更快。

分别对查询的不同部分进行基准测试对您非常有益。目前,当您设置它时,整个数据集都在读取时缓存,如果您正在对单个请求进行基准测试,这会增加额外的速度。

你应该单独进行基准测试

  • 无需缓存即可从 C* 读取(只需直接从 C* 计数)
  • 缓存
  • 的成本(缓存后计数)
  • 正在运行的随机查询的成本(从缓存运行查询)

然后,您可以找出瓶颈所在并适当扩展。

 类似资料:
  • 有什么工作可以做吗?可能是一种远程通知每个节点将新节点添加到集群的方法吗?

  • 问题内容: 我的问题在这里听起来可能是多余的,但先前问题的解决方案都是临时的。我尝试过的人很少,但还没有运气。 最终,我正在使用hadoop-1.2.1(在ubuntu 14上),最初我有单节点设置,并且在那里成功运行了WordCount程序。然后根据本教程向它添加了另一个节点。它成功启动,没有任何错误,但是现在,当我运行相同的WordCount程序时,它处于还原阶段。我查看了任务跟踪器日志,如下

  • 我已经在Microsoft Windows 2008 R2服务器上安装了DataStax Community Edition的Cassandra。在单节点集群中运行没有问题。问题是当我尝试向集群添加第二个节点时。在对Cassandra.yaml文件进行了我认为合适的更改后,我不能再启动DataStax Cassandra Community Server 2.0.2服务。错误是“本地计算机上的Da

  • 因为每个 Disque 节点都会将自己的配置信息储存在 disque-server 运行的文件夹里面, 而同一个文件夹只能有一份这样的配置信息, 所以如果我们打算同时运行多个节点, 那么就必须在不同的文件夹里面运行 disque-server , 并为每个节点指定不同的端口。 假设我们现在打算运行三个 Disque 节点, 那么首先要做的就是创建三个文件夹, 然后分别在这些文件夹里面运行 disq

  • 我正试图在hadoop中设置多节点集群,如何将0个数据阳极作为活动数据阳极,而我的hdfs显示了0个字节的分配 但是nodemanager后台进程正在datanodes上运行 `

  • 我有3个虚拟机。它们都有docker 1.12,并且在centos7上运行。所有端口都已打开,vm可以在我启动集群时相互ping Docker信息告诉我: 现在,我尝试将节点(其他VM)加入集群。我使用启动管理器后推荐的命令。 但我得到了: Docker信息告诉我: 集群管理器: 如何调试此问题,或者我是否忘记执行某些重要步骤?服务器之间是否需要ssh访问?谢谢 节点上的日志: 有时警告: