​Spark,一个奇迹王朝的诞生!

JavaEdge

共 2333字,需浏览 5分钟

 · 2022-04-20

👇推荐大家关注一个公众号👇

点击上方 "JavaEdge"关注, 星标或置顶一起成长
后台回复“面试”有惊喜礼包!

                              这是一个纷杂而无规则的世界,越想忘掉的事情,越难忘记。

     

   正文   

UC Berkeley的AMP Lab研发出Spark,凭借着更快的执行速度和更友好的编程接口,诞生后仅两年就迅速剥夺了MapReduce市场份额,成为主流大数据计算框架。



在Spark前,其实MapReduce性能也还行,且其编程的复杂度:

  • Hive、Mahout封装了常用的MapReduce编程

  • MapReduce也已大大简化了分布式编程

但Spark问世后,人们才越发不满MapReduce。原来大数据计算速度还能快这么多,编程这么简单。且Spark支持Yarn和HDFS,迁移成本小,越来越多公司用Spark代替MapReduce。



1 Spark 的优势

相比MapReduce,有更快执行速度,更简单易用的编程模型。


使用Scala语言在Spark上编写WordCount程序的核心代码仅三行:

对输入数据RDD执行:

  • 每行文本,用空格拆成单词

  • 转换每个单词,word => (word, 1),生成的结构

  • 统计相同K,即对V求和,(_ + _)

RDD,Resilient Distributed Datasets,弹性数据集,是Spark为开发者提供的编程模型,也是Spark自身的核心元素。



2 Spark编程模型 - RDD

大数据计算就是在大规模的数据集上进行一系列的数据计算处理。


2.1 MapReduce编程模型

对输入数据,将计算过程分为Map、Reduce阶段,是面向过程的大数据计算。

关键在于:

  • 将计算逻辑用Map和Reduce两个阶段实现

  • map、reduce的输入和输出是什么


2.2 Spark编程模型

直接针对数据编程,将大规模数据集合抽象成一个RDD对象,然后在这个RDD上进行各种计算处理,得到一个新RDD,继续计算处理,直到得到最后的结果数据。

面向对象的大数据计算。关键在于RDD对象需经过何种操作,转换成另一个RDD对象。

所以WordCount第2行代码其实执行了3次RDD转换,每次都得到一个新RDD,因为新RDD可继续调用RDD的转换函数,所以连写成一行,等价于:



2.3 RDD上定义的函数

2.3.1 转换(transformation)函数

返回值是RDD:

  • 计算map(func)

  • 过滤filter(func)

  • 合并数据集union(otherDataset)

  • 根据Key聚合reduceByKey(func, [numPartitions])

  • 连接数据集join(otherDataset, [numPartitions])

  • 分组groupByKey([numPartitions])

  • ...

2.3.2 执行(action)函数

不再返回RDD




3 Spark核心元素 - RDD

类似MapReduce,Spark也是对大数据进行分片计算。Spark分布式计算的数据分片、任务调度都以RDD为单位,每个RDD分片都会分配到一个执行进程去处理。


3.1 RDD上的转换操作

3.1.1 产生的RDD不会出现新分片

如map、filter等,即一个RDD数据分片,经过map或filter后,结果还在当前分片。比如用map函数对每个数据加1,得到的还是这样一组数据,只是值不同。


Spark并非按代码写的操作顺序去生成RDD,如

rdd2 = rdd1.map(func)

这样的代码不会在物理上生成一个新RDD。物理上,Spark只有在产生新RDD分片时,才会真去生成一个RDD,即惰性计算


3.1.2 产生的RDD则会产生新分片

如reduceByKey,来自不同分片的相同Key必须聚合在一起进行操作,这样就会产生新的RDD分片。实际执行过程中,是否会产生新的RDD分片,并不是根据转换函数名就能判断出来的,具体我们下一期再讨论。

Spark程序中的RDD和Spark执行过程中生成的物理RDD不是一一对应,RDD在Spark是个灵活概念。



4 Spark生态

  • 支持SQL语句的Spark SQL

  • 流计算的Spark Streaming

  • 机器学习的MLlib

  • 图计算的GraphX



5 总结

思考下,Spark 为何能成功呢?为何称其为一个奇迹呢?真正的产品大师,不会去天天问用户想要什么,而是分析和观察用户做事方式,想到更好的产品解决方案

但若无深度的思考,就是异想天开和自以为是。大众提出的需求虽然也无法触及问题的核心,但好歹有共识,所以混子产品做出的东西虽然平庸,但不至于令人厌恶。


所以不要说“你的需求是啥?”“我这有个方案你看下?”。直向曲中求,复杂问题,越直接了当,越得不到答案。迂回曲折提问题,一起思考问题背后规律,才能逐渐发现本质。既能达成共识,不会有违常识,又可能产生洞见,使产品设计呈现闪光点。



欢迎加入后端交流群,关注本公众号添加我本人微信,邀请进群



最近在准备面试BAT,特地整理了一份面试资料,覆盖Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。在这里,我为大家准备了一份2021年最新最全的互联网大厂Java面试经验总结。

想获取史上最简单的Java大厂面试题学习资料
关注如下公众号,后台回复面试」即可白嫖!

往期推荐



精心整理Java大厂面试必读书籍(强烈推荐)

你真的思考过自己写的代码为啥这么垃圾吗?

我是如何一步步让公司的MySQL支撑亿级流量的?

凭借对Condition接口的理解,拿到25K的offer!


嘿,你在看吗?
浏览 23
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报