spark是什么?
spark是基于内存计算的通用大数据并行计算框架,是一个快速、通用可扩展的大数据分析引擎。它给出了大一统的软件开发栈,适用于不同场合的分布式场景,如批处理、迭代算法、交互式查询、流处理、机器学习和图计算。
spark组件
图1 spark软件栈
SparkSQL:提供了类sql方式操作结构化半结构化数据。
SparkStreaming:提供了近乎实时的流式数据处理,与storm相比有更高的吞吐量。
SparkMl:提供了常见的机器学习算法库,包括分类、回归、聚类、协同工过滤等,还提供模型评估、数据处理等额外功能,使得机器学习能够更加方便的在分布式大数据环境下,快速的对数据进行处理形成模型后提供在线服务。
Graphx:用来操作图的程序库,可以进行并行的图计算。支持各种常见的图算法,包括page rank、Triangle Counting等。
spark架构
图2整体架构图
Spark采用了分布式架构的master-slave模型,
Master节点对应图中的Cluster Manager节点。Sl控制整个集群、监控work节点负责资源管理和调度,支持spark本身的standlone、Apache Mesos、hadoop yarn等集中模式,
Work node节点,从节点,在yarn中可以称之为NodeManager,负责控制计算节点,启动Executor进程负责从节点应用的执行。Task是其中分配到计算节点的计算单元
Driver:执行用户的业务逻辑启动其中的main函数,创建sparkContext,sc是整个应用的上下文,控制应用的生命周期。
具体的执行过程为:
用户在某个spark client提交应用以cluster或者client模式运行,若是以client方式提交任务,则提交节点为driver,若是以cluster模式,Cluster Manager会分配某个Work节点为driver来启动应用。
driver会向master或者资源管理器按照任务设置的cpu和内存信息等申请执行的资源,并启动executor,之后在执行程序过程中会形成RDD Graph,其中又包含两阶段调度,首先是RDD Graph由DAGSchedule转化成不同stage dag 提交给TaskScheduler,由TaskScheduler把 taskSet提交给executor执行。
spark的主要应用
主要是用与数据处理和数据科学应用,数据处理主要是数据工程师用来数据的查询分析、实时流数据处理等,数据科学主要是算法工程师对数据进行训练建模预测。在国内外大企业中spark集群得到广泛使用。