大数据技术学习——Spark

举报
slx_share 发表于 2023/02/21 09:57:25 2023/02/21
【摘要】 Spark是基于内存的分布式计算框架。

1       一句话介绍

Spark是基于内存的分布式计算框架。

2       基本概念

  • RDD:弹性分布式数据集,Spark核心数据抽象类,本质是只读分区的集合。
    • 窄依赖:父RDD的一个分区仅去到子RDD的一个分区,不会shuffle
    • 宽依赖:父RDD的一个分区去到子RDD的多个分区,会shuffle
  • DataFrame:概念上等同于关系型数据库表结构的分布式数据集。相比RDD,存储的是Row对象,包含数据结构信息,提供更高级的API,以支持SQL操作。
  • DataSet:整合了RDDDataFrame优点的分布式数据集。与DataFrame拥有同样的成员函数,只是每一行存储的数据类型不同,DataSet存储的是强类型值。

RDDDataFrameDataSet的存储结构的差异大致如下:


结构化数据建议使用DataFrameDataSet存储,非结构化数据建议使用RDD存储。

  • 算子:Spark有两种类型的算子用于定义或计算RDD
    • Transformation:该类型算子并不立即执行,仅用户定义新的RDD。例如Map
    • Action:遇到该类型算子,将立即启动计算。例如collect
  • 应用(Application):应用是作为一个进程的集合运行在集群上。进程仍然是以主-从方式组织。其中Driver进程作为主进程,协调Executor从进程执行任务。
  • Job:一个Action算子对应一个Job
  • Stage:一个RDD宽依赖对应一个Stage
  • Task:可并行计算的子任务。

3       Spark架构


Spark架构与Flink架构类似,是典型的Master-Slave架构。

  • Driver:应用的主进程,运行main()函数创建SparkContext实例。SparkContext实例包含很多核心组件。
    • SparkConf:存储Spark配置信息。
    • SparkEnv:维护Spark执行环境。
    • DAGSchedulerDAG调度器,负责将DAG划分成Job,进而划分成Stage并以taskset的形式提交给TaskScheduler
    • TaskScheduler:任务调度器,调度task到具体的Executor上执行。
  • Executor:任务执行进程,运行在各个worker节点上。
  • Cluster Manager:集群资源管理中间件,支持Spark自带的StandaloneYarn等管理器。

4       Spark执行流程

4.1       Spark on Yarn

Spark实现了资源管理器的插拔式管理。Spark on Yarn部署模式下,资源管理由Yarn承担,Executor进程运行在Yarn集群上。根据Spark应用的提交方式的不同分为yarn-clientyarn-cluster两种模式。

4.1.1       yarn-client模式


  • Driver进程运行在客户端内。Master以及Executor进程运行在Yarn Container上。
  • 适合于交互、测试环境。

4.1.2       yarn-cluster模式


  • Client提交应用后即可关闭,RM在某个NM上启动AM,进而在AM中启动Driver进程。

4.2       Spark Standalone

Standalone模式即使用Spark原生集群管理器部署一套独立的Spark集群,采用最简单的Master-Slave架构模式,Master统一管理所有的Worker。该集群由DriverMasterWorker以及Executor进程组成;MasterWorker位于相应的节点上,通过RPC通信;Driver可运行在Client中,或集群某个Worker节点上。


5       Spark内存管理

Spark Executor进程可以使用两种内存:

  • JVM堆内存:Executor作为一个JAVA进程,进程内并发任务共享堆内内存。由参数executor-memory指定。
  • JVM堆外内存:即操作系统管理的内存。Spark Executor进程可直接在运行节点上开辟内存空间。堆外内存又分成两类:
    • JVMYARN自身资源管理使用,由参数yarn.executor.memoryOverhead指定。
    • Spark Core计算使用,默认关闭,参数memory.offHeap.enabled可配置开启,参数spark.memory.offHeap.size指定内存大小。

6       内存调优

num-executors:设置spark作业需要的executor数量

executor-memory:设置executor进程需要的内存

executor-cores:设置executor进程需要的CPU核数,决定并行执行task的能力

driver-memory:设置driver进程需要的内存,一般默认1G即可

7       SparkSQL

SparkSQL是独立于HiveSQL语句翻译层,仅仅依赖于Hive MetaStore。其功能类似于HiveDriver组件,即SQL生命周期管理功能。一个完整的SparkSQL任务的执行,包含四个部分:

  1. SparkSQLSQL翻译成RDD计算任务。
  2. Hive MetaStore组件读取元数据。
  3. HDFS上读取数据。
  4. 任务提交到Yarn上,运行Spark应用。

8       Spark访问

  • spark-submit:打包好的spark应用通过该命令提交到Yarn上去运行,拥有独立的application id,程序中可以封装spark sql语句。
  • spark-sql:本质上是通过spark-submit调用sparksqlapi,每个spark-sql单独启动一个application。默认是local模式,需要加“--master yarn-client”提交到yarn上运行。
  • spark thrift JDBCServer:常驻在Yarn集群上的一个container, 便于交互式执行sql命令访问hive数据库,相当于数据库的服务端。客户端spark beeline通过连接thriftserver访问数据库,不管执行多少条sql都共用一个application idJDBCServer可以启用多条。

9       参考

 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。