在哪些工作负载中使用 MapReduce 而不是 SQL 是有意义的,反之亦然?

Posted

技术标签:

【中文标题】在哪些工作负载中使用 MapReduce 而不是 SQL 是有意义的,反之亦然?【英文标题】:What are some workloads where it makes sense to use MapReduce over SQL and vice versa? 【发布时间】:2021-03-21 05:49:10 【问题描述】:

似乎所有用 SQL 表达的查询都可以转换为 MapReduce 作业。这实质上就是 Spark SQL 所做的。 SparkSQL 接收 SQL,将其转换为 MapReduce 作业,然后在 Spark 的运行时执行 MapReduce 作业。

所有可以通过 SQL 回答的问题都可以通过 MapReduce 作业来回答。所有 MapReduce 作业也可以编写为 SQL(可能带有自定义用户定义的函数)吗?在 SQL 上使用 MapReduce 什么时候有意义,反之亦然?

【问题讨论】:

【参考方案1】:

当您拥有结构化数据(例如,具有明确定义的列和通常的数据类型的表)时,SQL 非常有用。使用具有该结构的 SQL,您可以选择列、连接它们等。

使用 MapReduce,您可以做到这一点(Spark SQL 将帮助您做到这一点),但您还可以做得更多。一个典型的例子是一个字数统计应用程序,它计算文本文件中的字数。文本文件没有任何可用于使用 SQL 查询它们的预定义结构。考虑到这类应用程序通常使用 Spark 核心(即 RDD)而不是 Spark SQL 进行编码,因为 Spark SQL 还需要一个结构。

另一个可能更实际的用例是使用 MapReduce 处理大量日志文件(同样,日志文件没有 SQL 所需的关系结构)。

【讨论】:

【参考方案2】:

SQL 和 MapReduce 也各有优势。对于数据分析,他们不需要学习如何编写 MapReduce 程序。而从开发者的角度来看,编写 MapReduce 程序留有足够的空间来调整程序,比如为倾斜的数据添加随机前缀。 并且从长远来看,随着 SQL 解释器的发展,使用 SQL over MapReduce/Spark RDD。

【讨论】:

以上是关于在哪些工作负载中使用 MapReduce 而不是 SQL 是有意义的,反之亦然?的主要内容,如果未能解决你的问题,请参考以下文章

如何比较Hive对MR工作绩效的影响?

MapReduce

vs2019怎么看安装了哪些负荷

什么是网络负载均衡,在网络中都有哪些应用

Hadoop MapReduce vs MPI(vs Spark vs Mahout vs Mesos) - 何时使用一个而不是另一个?

如何查看Linux的CPU负载