Spark基础概念
Spark核心是用Scala语言开发的,Scala语言编译后会生成Java字节码,是一种运行在JVM上的语言。
无论是用Scala开发的Spark核心还是用其他语言(如Java或Python)编写的Spark应用,最终都依赖于JVM来执行。
Java和Scala可以直接运行在JVM上,而Python和R则通过一种叫Py4J的机制与JVM进行通信。Py4J允许Python代码与JVM中的Spark核心组件进行交互,因此Spark既可以用Python编写代码,也需要JVM来运行其核心。
Spark官方概念
Apache Spark 是用于大规模数据处理的统一分析引擎。
在提出Spark的论文中,同样提出了RDD的概念,RDD,即弹性分布式数据集,是一种分布式内存抽象。
Spark可以计算多种各类的数据,包括结构化数据,半结构化数据,非结构化等类型。
同时Spark也支持多种语言,如Java,Python,Scala,R以及SQL语言来开发应用程序来计算数据。
因此,Spark被称为统一分析引擎。
Spark发展历程
- 2009年起源于加州伯克利分校
- 2010Spark开源
- 2013年Spark被捐献给Apache
- 2014年称为Apache顶级项目
- 2016年发布Spark2.0
- 2019年发布Spark3.0
Spark与Hadoop中的MapReduce对比
Spark在计算方面相比MapReduce有巨大的性能优势,因为Spark是基于内存进行计算,相较于MapReduce会少很多IO开销。
但Spark只做计算,并不是说替代了Hadoop,充其量只能说Spark在计算方面可以代替MapReduce。
Spark一般是与Hadoop配合使用。
Spark四大特点
Speed
Apache Spark支持内存计算,通过DAG(有向无环图)执行引擎支持无环数据流,官方宣称在内存中比Hadoop的MapReduce快100倍,
在硬盘中比MapReduec快10倍。
在处理方式上,Spark可以将中间处理结果存储到内存中,并且Spark提供了丰富的算子(API),可以由Spark程序中完成复杂任务,而MapReduce却只有Map和Reduce两个算子。
Easy of Use
Spark支持多种语言,如Java,Python,Scala。
Spark的代码是简单的,但概念较多。
从上图可以看出,即使没有学过Spark的语法,也是很容易读懂代码的含义。
Generality
Spark的核心Spark Core支持多种语言编写。
除了Spark Core,Spark还提供了Spark Sql,Spark Streaming,MLlib和Graphx在内的多个工具库。
Spark Sql:处理结构化数据。
Spark Streaming:处理流式数据。
MLlib:处理机器学习计算。
GraphX:处理图计算。
可以看到,Spark不仅支持多种变成语言,而且也能处理多种类型的数据,通用性强。
Runs EveryWhere
运行方式
Spark可以运行在Hadoop的yarn资源管理框架上,也可以运行在Mesos资源管理框架上,并且也支持Standalone的独立运行模式,
也可以运行在云Kubernetes。
数据源
Spark可以从多种数据源获取数据,如Hadoop的hdfs,Hbase,Mysql,Kafka。
Spark框架模块
- Spark Core:Spark最底层的模块,所有其它模块均建立Spark Core之上。提供Spark的核心功能,Spark Core以RDD为数据抽象,提供多种语言api。
- SparkSql:处理结构化数据模块,针对离线数据处理。
- SparkStreaming:基于Spark Sql在线流式数据处理。
- MLlib:机器学习计算。
- GrahpX:图计算。
大数据处理类型
- 批量数据处理:时间跨度数十分钟到数小时。
- 历史数据的交互式查询:时间跨度在数10秒到数分钟之间。
- 实时数据流的数据处理:时间跨度在数百毫秒到数秒。
Spark运行模式
- 本地模式(单机):一个独立的进程,通过在内部多个线程模拟Spark的运行环境。
- Standalone模式:Spark的各个角色以独立的进程形式存在,并组成Spark集群环境。
- Hadoop YARN模式:Spark各个角色运行在Hadoop YARN的容器中,并组成Spark集群环境。
- Kubernetes模式: Spark各个角色运行在Kubernetes的容器中,并组成Spark集群环境。
- 云服务模式,如阿里云,谷歌云等等。
其中Hadoop YARN模式和kubernetes模式都是运行在容器内部的。
Spark架构角色
Spark架构角色与Hadoop Yarn的架构角色非常类似。
Spark共有四类角色:
- Master:管理整个集群的资源,相当于Yarn的ResourceManager
- Worker:管理单个服务器的资源,相当于Yarn的NodeManager
- Driver:管理单个Spark任务在运行的时候的工作,类似ApplicationMaster
- Excuter:单个任务运行的时候的一堆工作者,类似于Yarn容器内运行的Task
四个角色可以从两个方面划分,
从资源管理划分 - Master
- Worker
从任务执行划分 - Driver
- Executer
但当本地模式下,Driver可以即管理又干活。
Spark基础总结
解决了什么?
海量数据的离线处理和实时流计算等等。
有哪些模块?
- SparkCore
- SparkSql
- SparkStreaming
- 等等
有哪些特点?
- 速度快
- 使用简单
- 通用性强
- 多种模式运行
运行模式
- 本地
- 集群(StandAlone,YARN,K8S)
- 云平台
运行角色(对比Yarn)
-
Master:集群资源管理(ResourceManager)
-
Worker:单机资源管理(NodeManager)
-
Driver:单任务管理(ApplicationMaster)
-
Executer:单任务执行(Task)