大数据技术之Spark :我快呀~

打印 上一主题 下一主题

主题 913|帖子 913|积分 2739

在 MapReduce 为海量数据的计算服务多年后,随着时代的发展和 Spark 等新技术的出现,它的劣势也慢慢的凸显出来了:

  • 实行速度慢
  • 编程复杂度过高
先看第一点
2000 年代诞生的 MapReduce ,因为计算资源有限,以是 MapReduce 在计算完成后会将效果写回HDFS中,也就是落盘
以上面800个数据块为例子,MapReduce 会有800次的 Map 计算效果落盘以及多个 Reduce 计算效果聚合(这个举动有一个专业的术语: Shuffle,这里不具体阐明)。
按照现在的思维,大家肯定以为效果应该写在内存中,但实际情况就像上面所说:计算资源有限。为了让大家有所概念,这里看下2000年的内存报价。

以是在那个时间,大家并不会以为慢,也不会以为有什么问题。
再看第二点(编程复杂度过高)
虽说 Pig、Hive 已经对 MapReduce 编程进行封装低落了海量数据计算的难度,但是在构造一些复杂计算需求时依然需要进行 MapReduce 编程。
由于 MapReduce 的计算模子只有 Map 和 Reduce 两个阶段,在实现复杂计算需求时就要编写多个 Mapper 和 Reducer 的实现。不仅如此,还要和谐这些 MapReduce 使命次序,甚至要操持一个和谐体系。如此一来,就增长整个体系的复杂度。
Spark 的诞生有用的解决了这两个问题。
Spark 是什么?
Spark 和 MapReduce 一样,都是一个计算引擎,都是为相识决海量数据计算。两者的工作流程大要类似,都是分而治之,都是移动计算只不过 Spark 利用内存存储计算效果使得使命实行更高效,提供的编程模子使得编程更简朴
Spark 的高效通过文字很难体现,后面会专门写一篇相关的文章。
大家可以通过下面的代码直观的感受一下 Spark 编程的简易水平。
  1. val textFile = sc.textFile("hdfs://...")
  2. val counts = textFile.flatMap(line => line.split(" "))
  3.                  .map(word => (word, 1))
  4.                  .reduceByKey(_ + _)
  5. counts.saveAsTextFile("hdfs://...")
复制代码
这段和 MapReduce 的 WordCount 程序到达同样的目标,但是只用了三行代码(相识函数式编程应该不难明白)。
以是,Spark 出现后早就没有人去用 MapReduce 了。但这并不影响 MapReduce 的职位,究竟它的操持思想影响了很多技术,例如Spark。
和 MapReduce 相比,Spark 确实有很多概念比较晦涩难明,例如 RDD、DAG、Stage。另有在学习的过程中对 Spark 的一些形貌产生的疑问,例如“为什么说 Spark 是内存计算?计算不都基于内存?”,以及随之而来的“Spark 的高效到底体现在那里?”、“同一个 Stage 的多个算子是最终由几个使命实行?”等等。最后,只能通过一遍遍的的教程和源码来解答心中的疑问。
由于文章篇幅的原因,如果你和我一样有同样的疑问,请关注我,欢迎大家一起交流。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

西河刘卡车医

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表