在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,一旦行被“”分隔,输出将存储在内存中。与功能映射和减少类似。我相信在跨分区进行处理时也是如此。
对于MapReduce,是否会将每个中间结果(如split / map / reduce之后的单词)保留在磁盘上,即HDFS,这使其比Spark慢一些?我们无法将它们保存在内存中吗?分区结果也一样吗?
答案 0 :(得分:0)
是的,你是对的。
SPARK中间RDD(弹性分布式数据集)结果保存在内存中,因此延迟大大降低,而工作吞吐量则更高。 RDD具有分区,像MR这样的数据块。 SPARK还提供了迭代处理,这也是要考虑的重点。
MR确实有一个合并器,可以稍微减轻疼痛。
但是,借助Scala或pyspark,SPARK的使用也容易得多。
我不再担心MR了。
以下是SPARK BTW上的精彩读物:https://medium.com/@goyalsaurabh66/spark-basics-rdds-stages-tasks-and-dag-8da0f52f0454