【问题标题】:Spark on EC2 cannot utilize all cores availableEC2 上的 Spark 无法利用所有可用的内核
【发布时间】:2013-05-25 11:36:22
【问题描述】:

我在通过 spark-ec2.sh 脚本设置的 EC2 集群上运行 Spark。我启动的 5 个从属实例总共有 40 个核心,但每个实例无法利用所有核心。

从从属日志中,我可以看到从属似乎是一个接一个地执行任务。我在从属实例上运行 top,cpu 大约是 100% 而不是 800%。

我已开启 spark.mesos.coarse 模式。并且数据被分成40个块。当我在本地以独立模式运行 Spark 时,它可以使用 8 个内核。

我可以做些什么来让 Spark 从站利用所有可用的内核?

【问题讨论】:

  • spark.mesos.coarse 仅在 Mesos 下运行时影响 Spark。你是在 Mesos 下运行 Spark 还是使用 Spark 的独立模式(如果你使用 Spark 0.7+,默认的 EC2 脚本使用独立模式)。
  • 感谢@JoshRosen,及时回复。我使用的是 0.7,所以它应该是独立模式。我想使用 Spark 进行实时查询,响应时间在 1~2 秒内。有可能吗?
  • Spark 绝对能够进行低延迟查询;这是 Shark 和 Spark Streaming 的基础。未充分利用可能是由于您的工作没有足够的并行性或由于局部性限制。你能提供更多关于你的工作的细节吗?另外,考虑在spark-users 邮件列表上发布这个问题。该列表比 StackOverflow 更适合来回调试讨论。

标签: amazon-ec2 mapreduce apache-spark


【解决方案1】:

在创建SparkContext之前尝试设置spark.cores.max 让我们说8

在 Spark 0.9 中:

val conf = new SparkConf() 
   .setMaster("...")
   .set("spark.cores.max", "8")
val sc = new SparkContext(conf)

【讨论】:

  • 从顶部命令我可以看到多个核心正在使用。问题是 cpu 似乎需要一段时间才能完全投入到任务中。我的实时查询大约需要 3~4 秒,但似乎 ec2 虚拟化不会立即将所有 cpu 能力授予进程。
  • 我没有要使用的物理集群,所以,没有。但是当我在本地计算机上执行此操作时,CPU 利用率立即达到 100%
猜你喜欢
  • 1970-01-01
  • 2015-12-29
  • 1970-01-01
  • 2021-04-09
  • 2016-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多