在 spark 上使用集群和在本地并行操作有什么区别?

What is the difference between working with clusters on spark and parallel operations on local?

最近一直在研究大数据。我使用,实际上是在尝试使用 PySpark:)。 但在某些时候我真的很困惑。例如,据我所知,spark 取决于其 RDD 选项自动进行并行化。那么,除了使用这种本地并行化之外,为什么我们还要使用集群呢?或者我们是否对真正的大数据使用集群模式(我不是在谈论部署模式,我只说 2 或 3 或 4 个从属)?实际上,我想象这样的并行化,例如我的计算机有 12 个内核,所以我认为这 12 个内核是单独的计算机,所以我有 12 台计算机。因此,因为这个想法,我似乎没有必要在 emr 中使用一个集群,例如一个主节点和 2 个从节点。当我有 2 个奴隶时,并行化也会继续进行。例如,我有 2 个奴隶,每个奴隶有 12 个核心,就像我的电脑一样,在这种情况下我有 24 个核心吗?如果它很复杂并且标题错误或不足我可以编辑。提前致谢。

一台计算机不仅仅是它拥有的内核数量。它还具有其他资源,例如 RAM 和磁盘。

处理大数据时,通常数据量太大以至于单台机器的 RAM 无法容纳,这就是我们使用机器集群的原因,这样它们之间就有足够的 RAM 来容纳内存中的数据集。

此外,如果您的数据被复制到所有这些机器的磁盘,您可以受益于让多台机器并行读取它们的数据子集,这样您就不必等待磁盘 I/O在开始任何计算之前。这也有助于将计算结果保存回磁盘,因为每台机器都可以并行写入数据。

最后,更多的机器确实意味着更多 CPU 这意味着比仅从一个工人那里获得的并行计算更多。

  • 确实CPU决定了spark中并行化的单位
  • Spark 可以同时处理每个 CPU 1 个任务
  • 所以无论你有一台 12 核的机器还是 12 台每台 1 核的机器,你都可以同时处理 12 个 spark 任务。

拥有多台机器比拥有一台大型机器更好的原因有几个。但是您可能不会注意到它,直到您开始扩展到 12 核以上

1。可扩展性

  • 水平扩展(添加更多机器)比垂直扩展(获得更大的机器)更容易。
  • 拿你的 12 核机器来说 - 假设你愉快地使用 12 核一年,然后意识到你的工作变得更大了,你现在想用 24 核来完成它。很高兴能够再购买一台 12 核机器并将 2 台机器串在一起,而不必购买全新的 24 核机器。
  • 当你向上扩展时,这个化合物。如果你有一个 2000 核心的集群并且你想要 10 个以上的核心,你宁愿添加一台 10 核心的机器而不是购买一台新的 2010 核心机器(如果它们存在的话)
  • RAM等其他资源也是如此

2。云定价

  • 使用 EMR 等云服务,您可以 运行 使用一些超可靠的按需实例(昂贵的)以及一些可以随时脱机的超便宜的现货实例来完成您的工作。
  • 一个常见的模式是按需拥有一个主节点和 2 个核心节点,无论如何都会 运行。然后用来自现货市场的 20 个核心节点补充这一点,这些节点有可能被下线

反驳论点

顺便说一句,还有一些原因可以解释为什么更多的机器可能意味着更多的问题

  1. 单节点集群更易于管理
  2. 理论上,如果您的所有分区都位于同一台机器上,则在分区之间随机移动数据应该会更快

如果您使用 12 个内核,我认为使用单个节点 spark 比尝试设置机器集群要好得多