MapReduce或Spark在Hadoop上进行批处理?

Ven*_*kam 5 hadoop mapreduce batch-processing apache-spark

我知道MapReduce是一个很好的Hadoop批处理框架.但是,Spark也可以用作Hadoop上的批处理框架,与MapReduce相比,它提供了可扩展性,容错性和高性能.Cloudera,Hortonworks和MapR也开始用YARN支持Spark on Hadoop.

但是,很多公司仍在使用Hadoop上的MapReduce Framework进行批处理而不是Spark.

那么,我试图了解Spark在Hadoop上用作批处理框架的当前挑战是什么?

有什么想法吗?

Ash*_*ith 6

对于迭代算法,Spark比mapreduce快一个数量级,因为它可以将中间数据缓存在本地JVM中,从而获得显着的加速.

Spark 1.1主要包括一个新的shuffle实现(基于排序的shuffle而不是基于hash的shuffle),一个新的网络模块(基于netty而不是使用块管理器来发送shuffle数据),一个新的外部shuffle服务使Spark执行最快的PetaByte排序(在具有46TB RAM的190个节点上)和TeraByte排序打破了Hadoop的旧记录.

Spark可以轻松处理比集群的聚合内存大一个数量级的数据集.所以,我的想法是Spark正朝着正确的方向前进,最终会变得更好.

作为参考,此博客文章解释了数据库如何执行PB级排序.


Sou*_*nta 5

我假设当您说 Hadoop 时,您指的是 HDFS。

与 Hadoop MR 相比,使用 Spark 有很多好处。

  1. 性能: Spark 至少与 Hadoop MR 一样快。对于迭代算法(需要对同一数据集执行多次迭代)可以快几个数量级。Map-reduce 将每个阶段的输出写入 HDFS。

    1.1. Spark 可以缓存(取决于可用内存)这个中间结果,从而减少由于磁盘 IO 造成的延迟。

    1.2. Spark 操作是惰性的。这意味着 Spark 可以在开始处理数据之前执行某些优化,因为它可以重新排序操作,因为它们还没有执行。

    1.3. Spark 保留操作的谱系,并在发生故障时基于此谱系重新创建部分失败状态。

  2. 统一生态系统: Spark 为各类分析提供了统一的编程模型——批处理(spark-core)、交互(REPL)、流式(spark-streaming)、机器学习(mllib)、图处理(graphx)、SQL查询(SparkSQL) )

  3. 更丰富、更简单的 API: Spark 的 API 更丰富、更简单。更丰富,因为它支持更多的操作(例如,groupBy、filter ...)。由于这些功能结构的表现力,所以更简单。Spark 的 API 支持 Java、Scala 和 Python(对于大多数 API)。有对 R 的实验支持。

  4. 多数据存储支持: Spark 支持许多开箱即用的数据存储。您可以使用 Spark 分析普通或分布式文件系统、HDFS、Amazon S3、Apache Cassandra、Apache Hive 和 ElasticSearch 中的数据,仅举几例。我相信很快就会支持许多其他流行的数据存储。这基本上如果你想采用 Spark 你不必移动你的数据。

例如,以下是字数统计代码在 Spark (Scala) 中的样子。

val textFile = sc.textFile("some file on HDFS")
val wordCounts = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)
Run Code Online (Sandbox Code Playgroud)

如果您使用标准的 Hadoop MR,我相信您必须多写几行。

以下是一些关于 Spark 的常见误解。

  1. Spark 只是一个内存集群计算框架。然而,事实并非如此。当您的数据可以放入内存时,Spark 表现出色,因为内存访问延迟更低。但是,即使您的数据集不完全适合内存,您也可以使其工作。

  2. 您需要学习 Scala 才能使用 Spark。Spark 是用 Scala 编写的,运行在 JVM 上。但是 Spark 也支持Java 和 Python 中的大多数常见 API。因此,您无需了解 Scala 即可轻松开始使用 Spark。

  3. Spark 无法扩展。Spark 仅适用于小型数据集 (GB),无法扩展到大量机器或 TB 数据。这也不是真的。已成功用于对PB 级数据进行排序

最后,如果您在 Hadoop MR 中没有遗留代码库,那么采用 Spark 是非常有意义的,原因很简单,所有主要的 Hadoop 供应商都有充分的理由转向 Spark。


Kha*_*efa 0

Apache Spark 在内存中运行,使其比 MapReduce 快得多。Spark 最初是伯克利大学的一个研究项目。

Mapreduce 广泛使用磁盘(用于外部排序、随机播放等)。

由于 hadoop 作业的输入大小为 TB 级。Spark内存需求将会比传统的hadoop更多。

所以基本上,对于较小的作业和集群中具有大量内存的情况,火花会获胜。对于大多数集群来说,实际情况并非如此。

有关 Spark 的更多详细信息,请参阅spark.apache.org