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上用作批处理框架的当前挑战是什么?
有什么想法吗?
对于迭代算法,Spark比mapreduce快一个数量级,因为它可以将中间数据缓存在本地JVM中,从而获得显着的加速.
Spark 1.1主要包括一个新的shuffle实现(基于排序的shuffle而不是基于hash的shuffle),一个新的网络模块(基于netty而不是使用块管理器来发送shuffle数据),一个新的外部shuffle服务使Spark执行最快的PetaByte排序(在具有46TB RAM的190个节点上)和TeraByte排序打破了Hadoop的旧记录.
Spark可以轻松处理比集群的聚合内存大一个数量级的数据集.所以,我的想法是Spark正朝着正确的方向前进,最终会变得更好.
作为参考,此博客文章解释了数据库如何执行PB级排序.
我假设当您说 Hadoop 时,您指的是 HDFS。
与 Hadoop MR 相比,使用 Spark 有很多好处。
性能: Spark 至少与 Hadoop MR 一样快。对于迭代算法(需要对同一数据集执行多次迭代)可以快几个数量级。Map-reduce 将每个阶段的输出写入 HDFS。
1.1. Spark 可以缓存(取决于可用内存)这个中间结果,从而减少由于磁盘 IO 造成的延迟。
1.2. Spark 操作是惰性的。这意味着 Spark 可以在开始处理数据之前执行某些优化,因为它可以重新排序操作,因为它们还没有执行。
1.3. Spark 保留操作的谱系,并在发生故障时基于此谱系重新创建部分失败状态。
统一生态系统: Spark 为各类分析提供了统一的编程模型——批处理(spark-core)、交互(REPL)、流式(spark-streaming)、机器学习(mllib)、图处理(graphx)、SQL查询(SparkSQL) )
更丰富、更简单的 API: Spark 的 API 更丰富、更简单。更丰富,因为它支持更多的操作(例如,groupBy、filter ...)。由于这些功能结构的表现力,所以更简单。Spark 的 API 支持 Java、Scala 和 Python(对于大多数 API)。有对 R 的实验支持。
多数据存储支持: 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 的常见误解。
Spark 只是一个内存集群计算框架。然而,事实并非如此。当您的数据可以放入内存时,Spark 表现出色,因为内存访问延迟更低。但是,即使您的数据集不完全适合内存,您也可以使其工作。
您需要学习 Scala 才能使用 Spark。Spark 是用 Scala 编写的,运行在 JVM 上。但是 Spark 也支持Java 和 Python 中的大多数常见 API。因此,您无需了解 Scala 即可轻松开始使用 Spark。
Spark 无法扩展。Spark 仅适用于小型数据集 (GB),无法扩展到大量机器或 TB 数据。这也不是真的。已成功用于对PB 级数据进行排序
最后,如果您在 Hadoop MR 中没有遗留代码库,那么采用 Spark 是非常有意义的,原因很简单,所有主要的 Hadoop 供应商都有充分的理由转向 Spark。
Apache Spark 在内存中运行,使其比 MapReduce 快得多。Spark 最初是伯克利大学的一个研究项目。
Mapreduce 广泛使用磁盘(用于外部排序、随机播放等)。
由于 hadoop 作业的输入大小为 TB 级。Spark内存需求将会比传统的hadoop更多。
所以基本上,对于较小的作业和集群中具有大量内存的情况,火花会获胜。对于大多数集群来说,实际情况并非如此。
有关 Spark 的更多详细信息,请参阅spark.apache.org
| 归档时间: |
|
| 查看次数: |
7505 次 |
| 最近记录: |