写点什么

架构师 0 期 | 大数据相关技术

用户头像
刁架构
关注
发布于: 2020 年 09 月 24 日
架构师 0 期 | 大数据相关技术

Spark为什么比MapReduce更快?

  1. DAG切分的多阶段计算过程更快速

  2. 使用内存存储中间计算结果更高效

  3. RDD的编程模型更简单

区别

  1. MapReduce是面向过程的。计算分2个阶段

  2. Map阶段

  3. Reduce阶段

  4. 思考的是:每个阶段输入和输出是什么

  5. Spark可以理解为面向对象的大数据计算

  6. Spark直接对数据进行编程,将数据集合抽象成一个RDD对象,在这个RDD上处理,得到一个新的RDD,继续计算,直到最后结果。

  7. 思考的是:一个RDD对象怎么操作,转化成另一个RDD对象。

RDD

RDD是Spark的核心概念,弹性分布式数据集(Resilient Distributed Datasets)

  1. 作为Spark编程模型的RDD

  2. 作为数据分片的RDD

Spark计算阶段

可以分割成更多的计算阶段(stage),这些计算阶段组成一个有向无环图DAG

Spark的任务调度器可以根据DAG的依赖关系执行



Spark作业管理

  1. RDD函数

  2. 转化函数,调用完得到的还是RDD

  3. action函数,比如:count(),返回RDD中元素的个数。 saveAsTextFile(path),将RDD数据存储到path路径下

  4. Spark的DAGScheduler在遇到shuffle的时候,生成一个计算阶段,在遇到action函数时,会生成一个作业(job)

  5. RDD里每个数据分片,Spark都会创建一个计算任务去处理,所以一个计算阶段会包含很多计算任务(task)



Spark的执行过程

Spark支持 Standalone、Yarn、Mesos、Kubernetes 等多种部署方案。

原理都一样,只是不同组件角色的命名不同,核心功能和流程差不多。





  1. Spark启动在自己的JVM进程里,即Driver进程。 调用SparkContext初始化执行配置和输入数据。SparkContext启动DAGScheduler构造执行的DAG图,切分成最小的执行单位,也就是计算任务(task)

  2. Driver 向 Cluster Manager(集群管理器) 请求计算资源,用于DAG的分布式计算。 Cluster Manager 收到请求后, 将 Driver 的主机地址等信息通知给集群的所有计算节点 Worker。

  3. Worker 收到信息后,根据 Driver 通信并注册,然后根据自己的空闲资源向 Driver 通报自己可以领用的任务数。Driver根据DAG图向注册的 Worker分配任务。

  4. Worker 收到任务后,启动 Executor 进程开始执行任务。 Execute 先检查自己是否有 Driver 的执行代码,如果没有,则从 Driver 下载,通过反射加载后开始执行。

Spark的生态体系



发布于: 2020 年 09 月 24 日阅读数: 42
用户头像

刁架构

关注

叫我刁架构 2017.10.25 加入

预备备网红首席架构师,移动端开发者,边缘设计支持者。

评论

发布
暂无评论
架构师 0 期 | 大数据相关技术