【问题标题】:If data fits on a single machine does it make sense to use Spark?如果数据适合单台机器,那么使用 Spark 是否有意义?
【发布时间】:2014-05-29 02:38:34
【问题描述】:

我有 20GB 的数据需要处理,所有这些数据都适合我的本地计算机。我计划使用 Spark 或 Scala 并行集合来针对这些数据实现一些算法和矩阵乘法。

既然数据适合单台机器,我应该使用 Scala 并行集合吗?

这是真的吗:并行任务的主要瓶颈是将数据送到 CPU 进行处理,所以由于所有数据都尽可能接近 CPU,Spark 不会带来任何显着的性能提升?

即使 Spark 只在一台机器上运行,它也会有设置并行任务的开销,所以这种开销在这种情况下是多余的?

【问题讨论】:

  • 所有这些数据都适合我的本地机器你在说 RAM 吗?
  • @om-nom-nom 是的,我在谈论 RAM
  • 很抱歉重复了这个问题:当您说“我有 20GB 的数据”和“适合我的本地机器”时。 20GB 是一个文件吗?假设您有超过 20GB 的 RAM?或者当它已经加载到 RAM 中时测量 20GB 的数据?
  • @maasg 我的 20GB 测量基于 20GB 是一个文件并且我有超过 20GB 的 RAM?"
  • 20GB 的数据在 RAM 上可能会变得更多,因为对象和数据结构具有开销空间成本。此外,对 RDD 的操作将创建新的 RDD,从而乘以该内存成本因子。很难以通用的方式准确量化,但您需要在 RAM 中存储数倍于数据大小的数据才能对其进行处理。这一切都取决于您的分析管道的深度和复杂性。

标签: scala parallel-processing apache-spark


【解决方案1】:

很难提供一些不明显的说明,例如如果您有数据并且没有达到 80% 的内存并且...,然后使用本地模式。话虽如此,有几点,一般来说,即使你的数据适合一个人的机器内存,也可能会让你使用 spark:

  1. 真的很密集的CPU处理,从我的头顶上看,可能是复杂的文本解析
  2. 稳定性——假设您有许多处理阶段,并且一旦您的单台机器出现故障,您不想丢失结果。 如果您有重复计算,而不是一次性查询,这一点尤其重要(这样一来,您花在将 spark 带到桌面上的时间可能会得到回报)
  3. 流式传输 - 您以流式方式从某处获取数据,虽然它的快照适合单台计算机,但您必须以某种方式对其进行编排

在您的特定情况下

所以由于所有数据都尽可能接近 CPU,Spark 将 没有带来任何显着的性能提升

当然不是,Spark 不是一种巫术魔法,它可以让你的数据更接近 CPU,但它可以帮助你在机器之间进行扩展,从而在 CPU 之间进行扩展(第 1 点)

Spark 将有设置并行任务的开销,即使它 将只在一台机器上运行,所以这个开销是多余的 这种情况?

我可能听起来很明显,但是

  1. 考虑#2 和#3,你需要它们吗?如果是,请使用 spark 或其他方式
  2. 如果不是,请以愚蠢的方式实现您的处理(并行集合)
  3. 配置文件并查看。您的处理是否受 CPU 限制?你能加速它,而不需要很多调整吗?如果没有,去火花。

我为什么要使用 Spark? 列表中还有 [厚颜无耻] 点 4)。这是炒作——Spark 是一种非常性感的技术,很容易“卖”给你的开发人员(它是大数据的前沿)和公司(你的老板,如果你正在构建自己的产品,你的客户)如果您正在为其他人构建产品)。

【讨论】:

  • 对于第 1 点,spark 可以利用多线程这一事实是否意味着 它可以 提高多线程 CPU 的性能?
  • @anthonybell 我认为并行集合在这种情况下的执行效率会更高
猜你喜欢
  • 2021-02-25
  • 2015-07-13
  • 1970-01-01
  • 1970-01-01
  • 2011-03-06
  • 1970-01-01
  • 2011-09-22
  • 2018-03-26
  • 2020-10-23
相关资源
最近更新 更多