大数据技术学习——Spark
1 一句话介绍
Spark是基于内存的分布式计算框架。
2 基本概念
- RDD:弹性分布式数据集,Spark核心数据抽象类,本质是只读分区的集合。
- 窄依赖:父RDD的一个分区仅去到子RDD的一个分区,不会shuffle。
- 宽依赖:父RDD的一个分区去到子RDD的多个分区,会shuffle。
- DataFrame:概念上等同于关系型数据库表结构的分布式数据集。相比RDD,存储的是Row对象,包含数据结构信息,提供更高级的API,以支持SQL操作。
- DataSet:整合了RDD及DataFrame优点的分布式数据集。与DataFrame拥有同样的成员函数,只是每一行存储的数据类型不同,DataSet存储的是强类型值。
RDD、DataFrame及DataSet的存储结构的差异大致如下:
结构化数据建议使用DataFrame或DataSet存储,非结构化数据建议使用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执行环境。
- DAGScheduler:DAG调度器,负责将DAG划分成Job,进而划分成Stage并以taskset的形式提交给TaskScheduler。
- TaskScheduler:任务调度器,调度task到具体的Executor上执行。
- Executor:任务执行进程,运行在各个worker节点上。
- Cluster Manager:集群资源管理中间件,支持Spark自带的Standalone、Yarn等管理器。
4 Spark执行流程
4.1 Spark on Yarn
Spark实现了资源管理器的插拔式管理。Spark on Yarn部署模式下,资源管理由Yarn承担,Executor进程运行在Yarn集群上。根据Spark应用的提交方式的不同分为yarn-client和yarn-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。该集群由Driver、Master、Worker以及Executor进程组成;Master与Worker位于相应的节点上,通过RPC通信;Driver可运行在Client中,或集群某个Worker节点上。
5 Spark内存管理
Spark Executor进程可以使用两种内存:
- JVM堆内存:Executor作为一个JAVA进程,进程内并发任务共享堆内内存。由参数executor-memory指定。
- JVM堆外内存:即操作系统管理的内存。Spark Executor进程可直接在运行节点上开辟内存空间。堆外内存又分成两类:
- 给JVM、YARN自身资源管理使用,由参数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是独立于Hive的SQL语句翻译层,仅仅依赖于Hive MetaStore。其功能类似于Hive的Driver组件,即SQL生命周期管理功能。一个完整的SparkSQL任务的执行,包含四个部分:
- 由SparkSQL将SQL翻译成RDD计算任务。
- 从Hive MetaStore组件读取元数据。
- 从HDFS上读取数据。
- 任务提交到Yarn上,运行Spark应用。
8 Spark访问
- spark-submit:打包好的spark应用通过该命令提交到Yarn上去运行,拥有独立的application id,程序中可以封装spark sql语句。
- spark-sql:本质上是通过spark-submit调用sparksql的api,每个spark-sql单独启动一个application。默认是local模式,需要加“--master yarn-client”提交到yarn上运行。
- spark thrift JDBCServer:常驻在Yarn集群上的一个container, 便于交互式执行sql命令访问hive数据库,相当于数据库的服务端。客户端spark beeline通过连接thriftserver访问数据库,不管执行多少条sql都共用一个application id。JDBCServer可以启用多条。
9 参考
- https://www.cnblogs.com/lay2017/p/10054559.html
- https://blog.csdn.net/zhyooo123/article/details/82703723
- https://blog.51cto.com/u_14048416/2338730
- 内存:https://www.jianshu.com/p/10e91ace3378
- https://baijiahao.baidu.com/s?id=1717418951751369950&wfr=spider&for=pc
- https://bbs.huaweicloud.com/blogs/178387
- Hive&Hive on Spark&SparkSQL解析:https://www.jianshu.com/p/6e7c8a4b5c37
- 点赞
- 收藏
- 关注作者
评论(0)