在 spark 上使用集群和在本地使用并行操作有啥区别?
Posted
技术标签:
【中文标题】在 spark 上使用集群和在本地使用并行操作有啥区别?【英文标题】:What is the difference between working with clusters on spark and parallel operations on local?在 spark 上使用集群和在本地使用并行操作有什么区别? 【发布时间】:2022-01-10 02:13:59 【问题描述】:我研究大数据已经有一段时间了。我使用,实际上是在尝试使用 PySpark :)。 但在某些时候我真的很困惑。例如,我知道 spark 取决于它的 RDD 选项自动进行并行化。那么除了使用本地并行化之外,我们为什么还要使用集群呢?或者我们是否对真正的大数据使用集群模式(我不是在谈论部署模式,我只说 2 或 3 或 4 个从站)?实际上我想象这样的并行化,例如我的计算机有 12 个内核,所以我认为这 12 个内核是单独的计算机,所以就像我有 12 台计算机一样。因此,因为这种想法,我似乎没有必要在 emr 一个主节点和 2 个从节点中使用集群。当我有 2 个奴隶时,他们也会继续并行化。例如,我有 2 个从站,每个从站都有 12 个核心,就像我的计算机一样,那么在这种情况下我有 24 个核心吗?如果它很复杂并且标题错误或不足,我可以编辑。提前致谢。
【问题讨论】:
【参考方案1】: 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 等云服务,您可以使用一些超可靠的按需实例(昂贵的)以及一些可以随时离线的超便宜的 Spot 实例来运行您的工作。 一种常见的模式是有一个主节点和 2 个按需运行的核心节点,无论如何都会运行。然后用现货市场的 20 个核心节点作为补充,这些节点有可能离线反论点
顺便说一句,更多的机器可能意味着更多的问题也有一些原因
-
单节点集群更易于管理
理论上,如果所有分区都位于同一台机器上,那么在分区之间混洗数据应该会更快
如果您使用 12 个内核,我认为使用单节点 spark 比尝试设置机器集群要好得多
【讨论】:
感谢您的回答。信息量很大。【参考方案2】:一台计算机不仅仅是它拥有的内核数量。它还有其他资源,例如 RAM 和磁盘。
在处理大数据时,通常数据量非常大,单台机器的 RAM 无法容纳,这就是我们使用机器集群的原因,因此它们之间有足够的 RAM 来容纳数据集记忆。
此外,如果您的数据被复制到所有这些机器的磁盘上,您可以受益于让多台机器并行读取它们的数据子集,这样您就不必在开始任何计算之前等待磁盘 I/O .这也有助于将计算结果持久化回磁盘,因为每台机器都可以并行写入数据。
最后,更多的机器确实意味着更多的 CPU,这意味着比仅从一个工作人员那里获得更多的并行计算。
【讨论】:
感谢您的回答。信息量很大。以上是关于在 spark 上使用集群和在本地使用并行操作有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章