c语言sscanf函数的用法是什么
252
2022-11-30
浅谈Spark原理(一) 引论
Spark是什么呢?引用《Spark权威指南》中的描述,“Spark是一个集群上运行的统一计算引擎以及一组并行数据处理软件库”。本文暂不讨论Spark提供的数据处理软件库,姑且讨论Spark是一个集群上运行的计算引擎的范畴。从这个层面直观的理解,Spark需要解决两个基本问题:
1、如何将计算分布到集群的多个节点上去进行?
2、如何管理集群多个节点上的计算资源?
下面先对这两个问题做一个比较直观通俗的讨论,然后再讨论Spark是如何解决的。
为了解决第1个问题,那又需要考虑两个问题:
a、需要处理的数据能否分布到各节点上去进行处理?
这个问题具体的说,整个需要计算处理的数据集能否分割为多个数据子集,然后将不同的子集分布到不同的节点上去进行计算?对于这个问题,大部分常见的数据集都是可以分割,例如文本文件、CSV文件、Parquet文件等。只有少部分是不能分割的(待补充例子)。
b、在a的基础上,处理数据的计算逻辑分布到各节点上去进行计算后,能否确保计算结果与单个节点上的计算结果等价?
这个问题借助数学语言描述如下,假设用一个函数f抽象表示所需计算逻辑,需要处理的整个数据集用D表示,再假设数据集D分割为数据子集D1、D2,将D1和D2分布到两个不同的计算节点上。那么这个问题可形式化的表示为:f(D) 是否等同于 f(D1) 与 f(D2) 的简单并集,其中f(D)、f(D1)、f(D2)表示在单个节点上对数据集D、D1、D2做处理后的结果。
对于这个问题,大部分读者都会意识到有些计算等价,有些计算不等价。比如,学校一个年级有甲乙丙三个班,如果需要计算这个年级某课程及格(按通常的理解,达到某一分数即为及格)的学生名单,只需要在各班分别计算及格的学生名单即可;但是如果需要计算这个年级某课程前三名的学生名单,则在计算各班的前三名的学生名单后,还需要再做处理(进一步排名)。对这种类似于计算前三名的处理,可转化为若干步骤的处理,前一个步骤的处理结果(计算各班的前三名),是后一个步骤(计算年级的前三名)的输入,其中前一个步骤(计算各班的前三名)是可以在多个节点上(各班)分别处理的。
为了解决前述第1个基本问题,Spark对需要处理的数据集进行抽象,提出了RDD(Resilient Distributed Dataset,弹性分布式数据集)的概念,同时对计算逻辑进行抽象,提出了Stage(可理解为阶段或步骤)的概念,将整个计算逻辑划分为若干Stage,同一个Stage的计算逻辑可以分布到各节点上分别进行计算。为了解决第2个基本问题,Spark采用常见的主从式架构,每个集群节点上部署一个Worker进程,管理单个节点上的计算资源;整个集群上部署一个Master进程管理所有的Worker。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~