1.Spark基础概念

chenxin
35
2024-10-05

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,即弹性分布式数据集,是一种分布式内存抽象。

img

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对比

img

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的代码是简单的,但概念较多。

img

从上图可以看出,即使没有学过Spark的语法,也是很容易读懂代码的含义。

Generality

img

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。

img

数据源

Spark可以从多种数据源获取数据,如Hadoop的hdfs,Hbase,Mysql,Kafka。

img

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共有四类角色:
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)

动物装饰