apache-spark - Spark vs Hadoop 这个简单的例子?
问题描述
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(弹性分布式数据集)结果保存在内存中,因此延迟更低,作业吞吐量更高。RDD 有分区,像 MR 这样的数据块。SPARK 还提供迭代处理,这也是需要考虑的关键点。
MR 当然有一个组合器来减轻一点痛苦。
但使用 Scala 或 pyspark,SPARK 也更容易使用。
我不会再担心 MR - 一般来说。
这是关于 SPARK BTW 的精彩读物:https ://medium.com/@goyalsaurabh66/spark-basics-rdds-stages-tasks-and-dag-8da0f52f0454
推荐阅读
- ruby-on-rails - Prawn::Errors::CannotFit Rails Make new line table
- javascript - AMP 中是否可以将 amp-user-notification 存储在 cookie 中?
- postgresql - 增加 postgreSQL 启动时的恢复时间
- javascript - jQuery绑定上下拖动
- xslt - XSLT 2.0 / XPATH - 测试节点时选择
- angular - Angular CLI Service Worker TypeScript
- checkstyle - Checkstyle 3.0 版本中忽略 IllegalTokenText 警告
- android-studio - Gradle works with Android Studio but cmd script fails
- python - 如何在 virtualenv 中导入 Anaconda 环境 .yml?
- c# - 无论如何将命令绑定到 XAML / WPF / MVVM 中的用户控件中的按钮的所有实例