在谷歌上,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更慢?我们没有办法把它们保存在内存中吗?分区结果也是这样吗?
发布于 2019-05-12 12:07:47
是的,你是对的。
SPARK中间RDD (弹性分布式数据集)结果保存在内存中,因此延迟更低,作业吞吐量更高。RDDs有分区,像SPARK先生这样的数据块也提供迭代处理,这也是需要考虑的一个关键点。
当然,MR确实有一个Combiner,可以稍微减轻一些痛苦。
但使用Scala或pyspark时,SPARK也更容易使用。
我不会再担心MR了--总的来说。
这里有一篇关于SPARK BTW的优秀读物:https://medium.com/@goyalsaurabh66/spark-basics-rdds-stages-tasks-and-dag-8da0f52f0454
https://stackoverflow.com/questions/56098691
复制相似问题