Spark vs Hadoop 这个简单的例子?
Spark vs Hadoop with this simple example?
在 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 慢?我们没有办法将它们保存在内存中吗?分区结果也是如此?
是的,你是对的。
SPARK 中间 RDD(弹性分布式数据集)结果保存在内存中,因此延迟低得多,作业吞吐量更高。 RDDs 有分区,像 MR 一样的数据块。 SPARK 还提供迭代处理,这也是需要考虑的重点。
MR 确实有一个组合器,当然可以减轻一点痛苦。
但是 SPARK 使用 Scala 或 pyspark 也更容易使用。
我不会再担心 MR - 总的来说。
这是一篇关于 SPARK BTW 的精彩读物:https://medium.com/@goyalsaurabh66/spark-basics-rdds-stages-tasks-and-dag-8da0f52f0454
在 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 慢?我们没有办法将它们保存在内存中吗?分区结果也是如此?
是的,你是对的。
SPARK 中间 RDD(弹性分布式数据集)结果保存在内存中,因此延迟低得多,作业吞吐量更高。 RDDs 有分区,像 MR 一样的数据块。 SPARK 还提供迭代处理,这也是需要考虑的重点。
MR 确实有一个组合器,当然可以减轻一点痛苦。
但是 SPARK 使用 Scala 或 pyspark 也更容易使用。
我不会再担心 MR - 总的来说。
这是一篇关于 SPARK BTW 的精彩读物:https://medium.com/@goyalsaurabh66/spark-basics-rdds-stages-tasks-and-dag-8da0f52f0454