架构师 0 期 | 大数据相关技术
Spark为什么比MapReduce更快?
DAG切分的多阶段计算过程更快速
使用内存存储中间计算结果更高效
RDD的编程模型更简单
区别
MapReduce是面向过程的。计算分2个阶段
Map阶段
Reduce阶段
思考的是:每个阶段输入和输出是什么
Spark可以理解为面向对象的大数据计算
Spark直接对数据进行编程,将数据集合抽象成一个RDD对象,在这个RDD上处理,得到一个新的RDD,继续计算,直到最后结果。
思考的是:一个RDD对象怎么操作,转化成另一个RDD对象。
RDD
RDD是Spark的核心概念,弹性分布式数据集(Resilient Distributed Datasets)
作为Spark编程模型的RDD
作为数据分片的RDD
Spark计算阶段
可以分割成更多的计算阶段(stage),这些计算阶段组成一个有向无环图DAG
Spark的任务调度器可以根据DAG的依赖关系执行
Spark作业管理
RDD函数
转化函数,调用完得到的还是RDD
action函数,比如:count(),返回RDD中元素的个数。 saveAsTextFile(path),将RDD数据存储到path路径下
Spark的DAGScheduler在遇到shuffle的时候,生成一个计算阶段,在遇到action函数时,会生成一个作业(job)
RDD里每个数据分片,Spark都会创建一个计算任务去处理,所以一个计算阶段会包含很多计算任务(task)
Spark的执行过程
Spark支持 Standalone、Yarn、Mesos、Kubernetes 等多种部署方案。
原理都一样,只是不同组件角色的命名不同,核心功能和流程差不多。
Spark启动在自己的JVM进程里,即Driver进程。 调用SparkContext初始化执行配置和输入数据。SparkContext启动DAGScheduler构造执行的DAG图,切分成最小的执行单位,也就是计算任务(task)
Driver 向 Cluster Manager(集群管理器) 请求计算资源,用于DAG的分布式计算。 Cluster Manager 收到请求后, 将 Driver 的主机地址等信息通知给集群的所有计算节点 Worker。
Worker 收到信息后,根据 Driver 通信并注册,然后根据自己的空闲资源向 Driver 通报自己可以领用的任务数。Driver根据DAG图向注册的 Worker分配任务。
Worker 收到任务后,启动 Executor 进程开始执行任务。 Execute 先检查自己是否有 Driver 的执行代码,如果没有,则从 Driver 下载,通过反射加载后开始执行。
Spark的生态体系
版权声明: 本文为 InfoQ 作者【刁架构】的原创文章。
原文链接:【http://xie.infoq.cn/article/34b0253e083d31881ff1e2db0】。文章转载请联系作者。
评论