【问题标题】:Spark vs Hadoop with this simple example?Spark vs Hadoop 这个简单的例子?
【发布时间】:2019-09-29 14:35:32
【问题描述】:

在 google 上的任何地方,Spark 和 Hadoop MapReduce 之间的主要区别都体现在处理方法上:Spark 可以在内存中完成,而 Hadoop MapReduce 必须从磁盘读取和写入。看来我明白了,但我想用一个例子来确认一下。

考虑这个字数示例:

 val text = sc.textFile("mytextfile.txt") 
 val counts = text.flatMap(line => line.split(" ")).map(word => (word,1)).reduceByKey(_+_) 
 counts.collect

我的理解:

在 Spark 的情况下,一旦行被“”分割,输出将存储在内存中。与函数 map 和 reduce 类似。我相信跨分区进行处理时也是如此。

在 MapReduce 的情况下,每个中间结果(如 split/map/reduce 之后的单词)是否会保存在磁盘上,即 HDFS 上,这使得它比 Spark 慢?有没有办法让我们记住它们?分区结果也是这样吗?

【问题讨论】:

    标签: apache-spark hadoop mapreduce


    【解决方案1】:

    是的,你是对的。

    SPARK 中间 RDD(弹性分布式数据集)结果保存在内存中,因此延迟更低,作业吞吐量更高。 RDD 有分区,像 MR 这样的数据块。 SPARK 还提供迭代处理,这也是需要考虑的关键点。

    MR 当然有一个组合器来减轻一点痛苦。

    但使用 Scala 或 pyspark,SPARK 也更容易使用。

    我不会再担心 MR - 一般来说。

    这是关于 SPARK BTW 的精彩读物:https://medium.com/@goyalsaurabh66/spark-basics-rdds-stages-tasks-and-dag-8da0f52f0454

    【讨论】:

    • 在示例上下文中我关于 map reduce 的问题怎么样?它会在 HDFS 等磁盘上保留每个中间结果(如 split/map/reduce 之后的单词)吗?
    • 本地文件系统,而不是 HDFS。 @艾米莉
    • 实际上我要问的是——在 hadoop mapreduce 下,这段代码 sn-p text.flatMap(line => line.split(" ")) 会将结果存储在磁盘上,而 spark 会将结果保存在内存中。那是对的吗 ?我想知道当 MR 知道必须在下一行处理它时,为什么 MR 会将结果保存在磁盘上?
    • 是的。 Doug Cutting 当时做出了这样的设计选择,因为它比 Spark DAG 更容易实现,而且磁盘比内存便宜。当然,现在 SSD 被大量使用了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 2017-08-13
    • 2015-04-15
    • 2019-04-07
    相关资源
    最近更新 更多