如果数据适合单个机器,那么使用Spark是否有意义?

blu*_*sky 5 parallel-processing scala apache-spark

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

由于数据适合单个机器,我应该使用Scala并行集合吗?

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

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

om-*_*nom 11

很难提供一些非显而易见的指令,比如你有你的数据并且没有达到80%的内存和......,然后使用本地模式.说到这一点,有一些要点,即使你的数据适合一个人的机器内存,一般来说,这可能会让你使用spark:

  1. 真正密集的CPU处理,从我的头脑,它可能是复杂的文本解析
  2. 稳定性 - 假设您有多个处理阶段,并且在单台机器出现故障时您不希望丢失结果.特别重要的是,如果你有经常性的计算,而不是一次性的查询(这样,你花费在桌子上花费的时间可能会得到回报)
  3. 流 - 你以流方式从某个地方获取数据,虽然它的快照适合单机,但你必须以某种方式编排它

在你的特殊情况下

因此,由于所有数据都与CPU相近,因此Spark不会带来任何显着的性能提升

当然不是,Spark不是巫术魔术,不知何故可以让你的数据更接近CPU,但它可以帮助你在机器之间扩展,从而缩小CPU(点#1)

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

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

  1. 考虑#2和#3,你需要它们吗?如果是的话,去火花或其他东西
  2. 如果不是,请以愚蠢的方式实施处理(并行集合)
  3. 简介并看一看.您的处理是否受CPU限制?你可以加快它,没有很多调整?如果不是,请去火花.

我为什么要使用Spark的列表中还有[厚颜无耻]第4点).这是炒作 - Spark是一种非常性感的技术,很容易"销售"给你的开发者(它是大数据的最前沿)和公司(你的老板,如果你正在建立自己的产品,你的客户如果你正在为别人建造产品).