分布式文件存储(HDFS/Cassandra/S3 等)是不是必须让 spark 在集群模式下运行?如果是,为啥?
Posted
技术标签:
【中文标题】分布式文件存储(HDFS/Cassandra/S3 等)是不是必须让 spark 在集群模式下运行?如果是,为啥?【英文标题】:Is distributed file storage(HDFS/Cassandra/S3 etc.) mandatory for spark to run in clustered mode? if yes, why?分布式文件存储(HDFS/Cassandra/S3 等)是否必须让 spark 在集群模式下运行?如果是,为什么? 【发布时间】:2021-03-25 07:16:22 【问题描述】:spark 在集群模式下运行是否必须使用分布式文件存储(HDFS/Cassandra/S3 等)?如果是,为什么?
Spark 是用于计算海量数据的分布式数据处理引擎。假设我有大量数据存储在 mysql 中,我想对其进行处理。 Spark 从 mysql 读取数据并在集群节点本身上执行内存(或磁盘)计算。我仍然无法理解为什么需要分布式文件存储才能在集群模式下运行 spark?
【问题讨论】:
如果你想要分布式 SQL 处理,你可以尝试 Presto 而不是 Spark 【参考方案1】:分布式文件存储(HDFS/Cassandra/S3 等)是否必须让 Spark 在集群模式下运行?
差不多
如果是,为什么?
因为 spark 工作人员从共享表中获取输入,在它们之间分配计算,然后由 spark 驱动程序编排以将其数据写回另一个共享表。
如果您尝试仅使用 mysql,您可能能够使用本地文件系统 ("file://) 作为集群 FS。但是,如果任何 RDD 或 spark 中的阶段查询确实尝试使用共享文件系统作为提交工作的一种方式,输出不会从工作人员(将写入其本地文件系统)和火花驱动程序(只能读取其本地文件系统)传播
【讨论】:
你的意思是,为了进行计算,spark需要将一些中间结果存储在一些存储中,以便集群中的其他节点可以从共享文件系统中读取。否则,spark 需要将此中间数据发送到可能需要它的所有节点,这将需要大量网络 IO 并会减慢处理速度。我的理解正确吗? 从阅读 RDD 论文开始:usenix.org/conference/nsdi12/technical-sessions/presentation/…。节点执行所有缓存数据并将其传递给“shuffle”,但经典文件系统 I/O 确实需要一个共享的分布式 FS。纯 MySQL IO?你得试试看 感谢分享这篇论文。我读了它,很抱歉我的回复晚了。让我和你分享一下我目前的情况。我有一些数据存储在 cassandra 表中。我的 spark 工作会从cassandra读取数据..对其执行一些计算,然后将数据存储回cassandra(在不同的表中)......我的spark作业将在一个单独的集群上运行..现在在这种情况下......我是否真的需要HDFS/S3等分布式FS吗?根据您分享的论文中提到的详细信息,我无法弄清楚在这种情况下需要分布式 FS 的原因 您应该能够直接使用 cassandra - 但您需要检查以确保。在 Apache cassandra 或 Apache spark 用户组上询问最新的答案。 SO 对年龄的回答很糟糕,因为随着世界的变化,没有人会更新它们以上是关于分布式文件存储(HDFS/Cassandra/S3 等)是不是必须让 spark 在集群模式下运行?如果是,为啥?的主要内容,如果未能解决你的问题,请参考以下文章