当前位置: 首页 > article >正文

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

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

  1. 执行速度慢
  2. 编程复杂度过高

先看第一点

2000 年代诞生的 MapReduce ,因为计算资源有限,所以 MapReduce 在计算完成后会将结果写回HDFS中,也就是落盘

以上面800个数据块为例子,MapReduce 会有800次的 Map 计算结果落盘以及多个 Reduce 计算结果聚合(这个行为有一个专业的术语: Shuffle,这里不具体说明)。

按照现在的思维,大家肯定认为结果应该写在内存中,但实际情况就像上面所说:计算资源有限。为了让大家有所概念,这里看下2000年的内存报价。

2000年内存报价

所以在那个时候,大家并不会觉得慢,也不会认为有什么问题。

再看第二点(编程复杂度过高)

虽说 Pig、Hive 已经对 MapReduce 编程进行封装降低了海量数据计算的难度,但是在构造一些复杂计算需求时依然需要进行 MapReduce 编程。

由于 MapReduce 的计算模型只有 Map 和 Reduce 两个阶段,在实现复杂计算需求时就要编写多个 Mapper 和 Reducer 的实现。不仅如此,还要协调这些 MapReduce 任务顺序,甚至要设计一个协调系统。如此一来,就增加整个系统的复杂度。

Spark 的诞生有效的解决了这两个问题。

Spark 是什么?

Spark 和 MapReduce 一样,都是一个计算引擎,都是为了解决海量数据计算。两者的工作流程大体类似,都是分而治之,都是移动计算只不过 Spark 利用内存存储计算结果使得任务执行更高效,提供的编程模型使得编程更简单

Spark 的高效通过文字很难体现,后面会专门写一篇相关的文章。

大家可以通过下面的代码直观的感受一下 Spark 编程的简易程度。

val textFile = sc.textFile("hdfs://...")
val counts = textFile.flatMap(line => line.split(" "))
                 .map(word => (word, 1))
                 .reduceByKey(_ + _)
counts.saveAsTextFile("hdfs://...")

这段和 MapReduce 的 WordCount 程序达到同样的目的,但是只用了三行代码(了解函数式编程应该不难理解)。

所以,Spark 出现后早就没有人去用 MapReduce 了。但这并不影响 MapReduce 的地位,毕竟它的设计思想影响了很多技术,例如Spark。

和 MapReduce 相比,Spark 确实有很多概念比较晦涩难懂,例如 RDD、DAG、Stage。还有在学习的过程中对 Spark 的一些描述产生的疑问,例如“为什么说 Spark 是内存计算?计算不都基于内存?”,以及随之而来的“Spark 的高效到底体现在哪里?”、“同一个 Stage 的多个算子是最终由几个任务执行?”等等。最后,只能通过一遍遍的的教程和源码来解答心中的疑问。

由于文章篇幅的原因,如果你和我一样有同样的疑问,请关注我,欢迎大家一起交流。


http://www.kler.cn/a/412413.html

相关文章:

  • 【金蝶双线指标】以看资金进出操作为主,兼顾波段跟踪和短线低吸
  • element ui select绑定的值是对象的属性时,显示异常.
  • 2024APMCM亚太杯数学建模C题【宠物行业】原创论文分享
  • java:aqs实现自定义锁
  • js版本之ES5特性简述【String、Function、JSON、其他】(二)
  • vue的理解
  • 笔记本外接4k显示器只有30Hz刷新率
  • Vue-常用指令
  • 实战OpenCV之物体跟踪
  • 网络安全基础之笔记二(传输层安全)
  • vue2日历组件
  • java技术层面用调用jar包的class文件的技术
  • 时间序列预测——周期性解藕框架(PDF)
  • uniapp 地图移入的快,高亮显示两个
  • 建造者模式Builder——优雅的使用姿势
  • 241123_基于MindSpore学习Bert
  • 设备网络状态巡检系统需求文档
  • 实时数据开发 | checkpoints监控和调优
  • 【DVWA】File Upload任意文件上传实战
  • 运维面试题.云计算面试题
  • Scala身份证上的秘密以及Map的遍历
  • arcgis for js FeatureLayer和GeoJSON一个矢量点同时渲染图形和文本
  • Android按键点击事件三种实现方法
  • 88页精品PPT | 某电信集团大数据平台建设方案技术交流
  • JAVA-IO
  • 【iOS】UICollectionView的学习