Spark:概述、体系架构、三种模式部署

目录

1、概述

1.1、spark是什么

1.2、spark特点

1.3、spark软件栈

1.3.1、Spark Core

1.3.2、Spark Streaming

1.3.3、Spark SQL

1.3.4、Spark MLlib

1.3.4、GraphX

2、体系架构

2.1、驱动器节点

2.2、执行器节点

2.3、集群管理器

2.4、Spark编程模型

3、安装部署


1、概述

1.1、spark是什么

Spark是一个用来实现快速而通用的集群计算的平台。Spark 是基于内存计算的大数据并行计算框架。除了扩展了广泛使用的 MapReduce 计算模型,而且高效地支持更多计算模式,包括交互式查询和流处理。Spark 适用于各种各样原先需要多种不同的分布式平台的场景,包括批处理、迭代算法、交互式查询、流处理。通过,Spark 使我们可以简单而低耗地把各种处理流程整合在一起。

 Spark 的用例分为两类:数据科学应用和数据处理应用

1.2、spark特点

1)快

与 Hadoop 的 MapReduce 相比,Spark 基于内存的运算要快 100 倍以上,基于硬盘的运算也要快 10 倍以上。Spark 实现了高效的 DAG 执行引擎,可以通过基于内存来高效处理数据流。计算的中间结果是存在于内存中的。

2)易用

Spark 支持 Java、Python、R 和 Scala 的 API,还支持超过 80 种高级算法

3)通用

Spark 提供了统一的解决方案。Spark 可以用于批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算(GraphX)。这些不同类型的处理都可以在同一个应用中使用。

4)兼容性

Spark 可以使用 Hadoop 的 YARN 和 Apache Mesos 作为它的资源管理和调度器器,并且可以处理所有 Hadoop 支持的数据,包括 HDFS、HBase 和 Cassandra 等;Spark 也可以不依赖于第三方的资源管理和调度器,它实现了 Standalone 作为其内置的资源管理和调度框架

1.3、spark软件栈

大一统的软件栈,各个组件关系密切并且可以相互调用,这种设计有几个好处:
1、软件栈中所有的程序库和高级组件都可以从下层的改进中获益。
2、运行整个软件栈的代价变小了。不需要运行 5 到 10 套独立的软件系统了,一个机构只需要运行一套软件系统即可。系统的部署、维护、测试、支持等大大缩减。
3、能够构建出无缝整合不同处理模型的应用。

1.3.1、Spark Core

实现了 Spark 的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。Spark Core 中还包含了对弹性分布式数据集(resilient distributed dataset,简称RDD)的 API 定义。RDD表示分布在多个计算节点上可以并行操作的元素集合,是spark主要的编程抽象

主要功能

1)SparkContext
spark应用的执行与输出都是通过SparkContext来完成的,在正式提交应用之前,首先需要初始化SparkContext。SparkContext隐藏了 络通信、分布式部署、消息通信、存储能力、计算能力、缓存、测量系统、文件服务、web服务等内容。
SparkContext内置的DAGScheduler负责创建逻辑任务,将DAG中的RDD划分成不同步stage,提交stage等功能。内置的TaskScheduler负责资源的申请、任务的提交以及请求集群对任务的调度等任务

2)存储体系
spark优先考虑使用各节点的内存作为存储,当内存不足时才会考虑使用磁盘,这极大地减少了磁盘I/O,提升了任务执行的效率,使得spark适用于实时计算、流式计算等场景

3)计算引擎
计算引擎由SparkContext中的DAGScheduler、RDD以及具体节点上的Executor负责执行的Map和Reduce任务组成。DAGScheduler和RDD虽然位于SparkContext内部,但是在任务正式提交与执行时会将任务中的RDD组织成DAG,并对stage进行划分,决定了任务执行阶段任务的数量、迭代计算、shuffle等过程

4)部署模式
由于单节点不足以提供足够的存储以及计算能力,所以在SparkContext的TaskScheduler组件中提供了对standalone不是模式的实现和yarn等分布式资源管理系统的支持

1.3.2、Spark Streaming

是Spark用来对实时结构化数据进行流式计算的组件。提供了用来操作数据流的 API,并且与 Spark Core 中的 RDD API 高度对应。比如生产环境中的 页服务器日志、 路服务中用户提交的状态更新组成的消息队列都是数据流

Spark Streaming支付kafka等和简单的tcp套接字等多种数据输入源。输入流接收器(Receiver)负责接入数据,是接入数据流的接口规范。DStream是Spark Streaming中所有数据流的抽象,DStream本质上由一系列连续的RDD组成

1.3.3、Spark SQL

是 Spark 用来操作结构化数据的程序包。通过 Spark SQL,我们可以使用 SQL 或者HQL来查询数据。Spark SQL 支持多种数据源,比 如 Hive 表、Parquet 以及 JSON 等。还支持将SQL和传统RDD编程的数据操作方式相结合

Spark SQL的过程可以总结为:首先使用SQL语句解析器(SQLParser)将SQL转换为语法树,并且使用规则执行器(RuleExecutor)将一系列规则应用到语法树,最终生成物理执行计划并执行。规则执行器还包括语法分析器(Analyzer)和优化器(Optimizer)

1.3.4、Spark MLlib

提供常见的机器学习(ML)功能的程序库。包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据导入等额外的支持功能。

1.3.4、GraphX

用来操作图的程序库,可以进行并行的图计算

2、体系架构

Spark集群采用的是主/从架构,由一个驱动器节点和多个工作节点组成

驱动器节点负责中央协调,调度各个分布式工作节点;驱动器节点可以和大量的执行器节点进行通信,执行器节点负责工作,它们都作为独立的Java进程运行。驱动器节点和所有的执行器节点一起被称为一个Spark应用

Spark应用通过叫做集群管理器的外部服务在集群中的机器上启动。Spark自带的集群管理器被称为独立集群管理器,Spark也可以运行在YARN上

2.1、驱动器节点

Spark驱动器是执行程序中main()方法的进程。当启动spark shell时就启动了一个spark驱动器程序。SparkContext是spark应用程序的总控

驱动器程序主要有两个职责:

1)将用户程序转为任务:Spark隐式地创建了一个由操作组成的逻辑上的有向无环图(DAG)。当驱动器程序运行时,它会把这个逻辑图转为物理执行计划。Spark会对逻辑执行计划作出一些优化,比如将连续的映射转为流水线化执行,将多个操作合并到一个步骤中,也就是DAG图被分解成stage,而每个stage由多个任务task组成。这些task会被打包送到集群管理器中,task是spark中最小的工作单元,最后资源管理器将task发送给执行器运行

2)为执行器节点调度任务

执行器进程启动后,会向驱动器进程注册自己。驱动器程序会根据当前执行器节点集合,尝试把所有任务基于数据所在位置分配给合适的执行器进程

2.2、执行器节点

执行器有两大作用

1)负责运行组成spark应用的task,并将结果返回给驱动器进程

2)通过自身的块管理器为用户程序中要求缓存的RDD提供内存式存储。Block Manager类似于KV系统(内存和磁盘共同作为存储设备),当需要多轮迭代时,可以将中间过程的数据先放到这个存储系统上,下次需要时直接读该存储上的数据,而不需要读写到HDFS文件系统中

2.3、集群管理器

Spark 设计为可以高效地在一个计算节点到数千个计算节点之间伸缩计算。为了实现这样的要求,同时获得最大灵活性,Spark 支持在各种集群管理器(cluster manager)上运行,包括 Hadoop YARN、Apache Mesos,以及 Spark 自带的一个简易调度器,叫作独立调度器。

2.4、Spark编程模型

1)用户使用SparkContext提供的API编程驱动应用程序。此外SQLContext、HiveContext及StreamingContext对SparkContext进行封装,并提供了SQL、Hive及流式计算相关的API

2)使用SparkContext提交的用户应用程序,首先会使用BlockManager和BroadcastManager将任务的Hadoop配置进行广播。然后由DAGScheduler将任务转换为RDD并组织成DAG,DAG还被划分为不同的Stage,Stage由多个task组成。最后由TaskScheduler借助netty(1.6之前为ActorSystem)将任务提交给集群管理器

3)集群管理器给任务分配资源,即将具体task分配到worker上,worker创建Executor来处理任务的运行

3、安装部署

1)确保安装了scala(2.11.8)

2)解压缩spark(2.1.2)并配置环境变量,至此本地模式已经安装好了,可通过spark-shell进入本地模式

有关spark节点的启动和关闭位于sbin下,且start-all.sh与hadoop中的重名,所以尽量分步启动各项服务,先start-master.sh,再start-slaves.sh

3)修改$SPARK_HOME/conf/slaves文件,配置执行器节点

4)修改$SPARK_HOME/conf/spark-env.sh,该文件可通过模板复制过来

  • maste的rweb端口:8080
  • master通信端口:7077
  • Spark应用web端口:4040

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年6月25日
下一篇 2019年6月25日

相关推荐