#Spark# #大数据# #Hadoop# #streaming# #分布式计算#
Spark:基于内存的高速集群计算框架。对mapreduce进行优化,在内存中进行迭代运算。可以使用Java,Python,Scala等多种语言开发。Scala:交互式语言,可直接用于Spark编程。
适用:实时性高,数据量不是特别大。多次操作特定数据集。
不适用:异步细粒度更新。
![94365061c8e2609757ad784d43817dea.png](https://i-blog.csdnimg.cn/blog_migrate/d15087c5f9b235fd311a68cf6706a133.jpeg)
1.1 功能、作用
RDD:Resilient Distributed Datasets,弹性分布式数据集。要求数据稳定。变换操作。
Spark SQL:使用DataFrame可以操作RDD、JSON、Hive、MySQL等。是Hive、Pig的替代品。
Spark Streaming:流计算框架。将流数据按时间(0.5s~2s)划分为RDD进行批处理运算(Spark)。与Storm相比,延迟稍高(storm 100ms),吞吐量高(是storm的2~5倍,100个节点的4核集群Spark处理速度6GB/s)。是Storm的替代品。
GraphX:图计算框架。将大图划分为小图RDD进行批处理运算(Spark)。
1.2 特点
1、速度快
spark比mapreduce在内存中快100倍,比mapreduce在磁盘中快10倍。
2、易用性
可以快速开发一个spark应用程序,通过java、scala、python、R、sql不同语言开发代码程序
3、通用性
spark框架是一个生态系统,可以通过不同子项目sparksql、sparkStreaming、Mlib、Graphx应用到不同的应用场景。
4、兼容性
spark任务就是一个计算程序,哪里可以给当前这个程序提供对应的计算资源,我们就可以把程序提交到哪里去。
yarn
spark程序可以提交到yarn中去运行,整个任务的资源分配由resourcemanager去负责
standalone
它是spark自带的集群模式,整个任务的资源分配由Master去负责
mesos
它是一个apache开源类似于yarn的资源管理平台
1.3 架构
![39cd1084b246c2e7fc8a38200b8669b1.png](https://i-blog.csdnimg.cn/blog_migrate/5d198f582b2182d41150fc8c2c781d81.jpeg)
Spark Core是Spark的核心计算引擎,提供了任务调度、内存管理、错误恢复、与存储系统交互等模块。其中的弹性分布式数据集(RDD),是计算时的主要编程抽象,基于RDD对数据进行创建、操作与计算。
Spark SQL用于对结构化数据进行处理,它提供了DataFrame的抽象,作为分布式平台数据查询引擎,可以在此组件上构建大数据仓库。DataFrame是一个分布式数据集,在概念上类似于传统数据库的表结构,数据被组织成命名的列,DataFrame的数据源可以是结构化的数据文件,也可以是Hive中的表或外部数据库,也还可以以是现有的RDD。Spark SQL是用来操作结构化数据的程序包,支持多种数据源(Hive表、Parquet、JSON),可以基于Spark SQL进行数据的查询,为数据计算提供数据入口。
Spark Streaming是对实时数据进行流式计算的组件,比如处理服务器日志或者消费消息队列。
Mllib作为Spark组件中机器学习的程序库,具有包括分类、回归、聚类、协同过滤等算法。
GraphX是用来操作图的程序库、可以并行进行图计算,并支持常用的图算法。
Cluster Manager:在standalone模式中即为Master主节点,控制整个集群,监控worker。在YARN模式中为资源管理器
Worker节点:从节点,负责控制计算节点,启动Executor或者Driver。
Driver: 运行Application 的main()函数
Executor:执行器,是为某个Application运行在worker node上的一个进程。
详细说明:
Application: Appliction都是指用户编写的Spark应用程序,其中包括一个Driver功能的代码和分布在集群中多个节点上运行的Executor代码
Driver: Spark中的Driver即运行上述Application的main函数并创建SparkContext,创建SparkContext的目的是为了准备Spark应用程序的运行环境,在Spark中有SparkContext负责与ClusterManager通信,进行资源申请、任务的分配和监控等,当Executor部分运行完毕后,Driver同时负责将SparkContext关闭,通常用SparkContext代表Driver
Executor: 某个Application运行在worker节点上的一个进程, 该进程负责运行某些Task, 并且负责将数据存到内存或磁盘上,每个Application都有各自独立的一批Executor, 在Spark on Yarn模式下,其进程名称为CoarseGrainedExecutor Backend。一个CoarseGrainedExecutor Backend有且仅有一个Executor对象, 负责将Task包装成taskRunner,并从线程池中抽取一个空闲线程运行Task, 这个每一个oarseGrainedExecutor Backend能并行运行Task的数量取决与分配给它的cpu个数。
![0da604bdaa1286a6de85ff8db3b6d328.png](https://i-blog.csdnimg.cn/blog_migrate/583f740d488414e4559e7e9597d742b2.jpeg)
Cluter Manager:指的是在集群上获取资源的外部服务。目前有三种类型
Standalon : spark原生的资源管理,由Master负责资源的分配
Apache Mesos:与hadoop MR兼容性良好的一种资源调度框架
Hadoop Yarn: 主要是指Yarn中的ResourceManager
Worker: 集群中任何可以运行Application代码的节点,在Standalone模式中指的是通过slave文件配置的Worker节点,在Spark on Yarn模式下就是NoteManager节点
Task: 被送到某个Executor上的工作单元,但hadoopMR中的MapTask和ReduceTask概念一样,是运行Application的基本单位,多个Task组成一个Stage,而Task的调度和管理等是由TaskScheduler负责
Job: 包含多个Task组成的并行计算,往往由Spark Action触发生成, 一个Application中往往会产生多个Job
Stage: 每个Job会被拆分成多组Task, 作为一个TaskSet, 其名称为Stage,Stage的划分和调度是有DAGScheduler来负责的,Stage有非最终的Stage(Shuffle Map Stage)和最终的Stage(Result Stage)两种,Stage的边界就是发生shuffle的地方
DAGScheduler: 根据Job构建基于Stage的DAG(Directed Acyclic Graph有向无环图),并提交Stage给TASkScheduler。 其划分Stage的依据是RDD之间的依赖的关系找出开销最小的调度方法,如下图