Spark简单介绍
1.Spark是什么?
定义:Apache Spark是用于大规模数据处理的统一分析引擎。
RDD是一种分布式内存抽象,其使得程序员能够在大规模集群中做内存运算,并且有一定的容错方式。而这也是整个Spark的核心数据结构,Spark整个平台都围绕着RDD进行
统一分析引擎?
spark是一款分布式内存计算的统一分析引擎,其特点是对任意类型的数据进行自定义计算。spark可以计算:结构化,非结构化等各种类型的数据结构,同时也支持使用PYTHON,JAVA,SCALA,R以及SQL语言去开发应用程序计算数据。spark的适用面非常广泛,被称之为统一的(适用面广)的分析引擎(数据处理)
2.Spark VS Hadoop(MapReduce)
尽管spark相对于Hadoop而言具有较大优势,但spark并不能完全替代hadoop
1)在计算层面,spark相比较MR(MapReduce)有巨大的性能优势,但至今仍有许多计算工具基于MR架构,比如非常成熟的Hive
2)spark仅做计算,而Hadoop生态圈不仅有计算(MR)也有存储(HDFS)和资源管理调度(YARN),HDFS和YARN仍是许多大数据体系的核心架构
3.spark四大特点
1)速度快
由于Apache Spark支持内存计算,并且通过DAG(有向无环图)执行引擎支持无环数据流,所以官方宣传其在内存中的运算速度要比Hadoop的MapReduce快100倍,在硬盘中要快十倍。
Spark处理数据与MapReduce处理数据相比,有如下两个不同点
其一:spark处理数据时,可以将中间处理结果数据存储到内存中
其二:spark提供了非常丰富的算子(API),可以做到复杂任务在一个spark程序中完成
2)易于使用
spark的版本已经更新到spark3.2.0,支持了包括java,scala,python,r以及sql语言在内的多种语言,为了兼容spark2.x企业级应用场景,spark仍然持续更新spark2版本
3)通用性强
在spark的基础上,spark还提供了包括spark sql,spark streaming,mllib和graphx在内的多个工具库,我们可以在一个应用中无缝地使用这些工具库
4)运行方式
spark支持多种运行方式,包括在hadoop和mesos上,也支持standalone的独立运行方式,同时也可以运行在云kubernetes(spark2.3开始支持)上
4.Spark框架模块
整个Spark框架模块包括:Spark Core,Spark SQL,Spark Streaming,Spark GraphX,Spark MLlib,而后四项的能力都是建立在核心引擎之上
Spark Core:Spark的核心,Spark核心功能均由Spark Core模块提供,是Spark运行的基础。Spark Core以RDD为数据抽象,提供Python,Java,Scala,R语言的API,可以编程进行海量离线数据批处理计算。
Spark SQL:基于SparkCore之上,提供结构化处理模块,SparkSQL支持以SQL语言对数据进行处理,SparkSQL本身针对离线计算场景,同时基于SparkSQL,Spark提供了StructuredStreaming模块,可以以SparkSQL为基础,进行数据的流式计算
SparkStreaming:以SparkCore为基础,提供数据的流式计算功能
MLlib:以SparkCore为基础,进行机器学习计算,内置了大量的机器学习库和API算法等,方便用户以分布式计算的模块进行机器学习计算
GraphX:以SparkCore为基础,进行图计算,提供了大量的图计算API,方便用于以分布式计算模式进行图计算
5.Spark的运行模式
Spark提供多种运行模式,包括:
1)本地模式(单机Local)
本地模式就是以一个独立的进程,通过其内部的多个线程来模拟整个Spark运行时环境
2)Standalone模式(集群)
Spark中的各个角色以独立进程的形式存在,并组成Spark集群环境
3)Hadoop YARN模式(集群)
Spark中的各个角色运行在YARN的容器内部,并组成Spark集群
4)Kubernetes(集群)
Spark中的各个角色运行在Kubernetes容器内部,并组成Spark集群环境
5)云服务模式(运行在云平台上)
6.Spark的架构角色
YARN角色回顾
YARN主要有4类角色,从2个层面去看:
资源管理层面:
集群资源管理者(Master):ResourceManager
单机资源管理者(Worker):NodeManager
任务计算层面:
单任务管理者(Master):ApplicationMaster
单任务执行者(Worker):Task(容器内计算框架的工作角色)
Spark运行角色
资源管理层面:
集群资源管理者(Master):Master
单机资源管理者(Worker):Worker
任务计算层面:
单任务管理者(Driver):Driver
单任务执行者(Executor):Executor(容器内计算框架的工作角色)
注:正常情况下Executor是干活的角色,不过在特殊场景下(Local模式),Driver可以既管理又干活