💨Spark介绍
💨大数据处理引擎
🚩批试计算:Map Reduce 、 Spark 、HIVE
🚩流式计算:Flink
🚩OLAP系统:presto、ClickHouse、Impala、DORIS
💨Spark概念
是一种"One Stack to rule them all"的大数据计算框架,期望使用一个技术堆栈就完美地解决大数据领域的各种计算任务。Apache官方,对Spark的定义就是:通用的大数据快速处理引擎。
🎈spark能干什么
Spark使用Spark RDD、Spark SQL、 Spark Streaming,MLlib,GraphX成功解决了大数据领城中,离线批处理、交互式查询、实时流计算、机器学习与图计算等最重要的任务和问题。
🎈spark包含的常见计算框架
🚩Spark,是一种通用的大数据计算框架,I正如传统大数据技术Hadoop的MapReduce、Hive引擎,以及Storm流式实时计算引擎等🚩Spark包含了大数据领城常见的各种计算框架:比如 Spark Core用于离线计算, Spark SQL用于交互式查询, Spark Streaming用于实时流式计算,Spark MILlib用于机器学习, Spark GraphX用于图计算。
💨Spark的特点
🚩统一引擎,支持多种分布式场景🚩多语言支持🚩可读写丰富数据源🚩丰富灵活的API/算子🚩支持K8S/YARN/Mesos资源调度
spark将每个任务构建成DAG进行计算,内部的计算过程通过弹性式分布式数据集RDD在内存在进行计算,相比于hadoop的mapreduce效率提升了100倍。
spark 提供了大量的算子,开发只需调用相关api进行实现无法关注底层的实现原理。
spark 生态圈丰富,迭代更新快,成为大数据领域必备的计算引擎。
自我思考
spark 计算速度快,易于使用,支持多种的资源管理模式,社区支持。迭代更新快,成为大数据领域必备的计算引擎。
💨SparkCore
🍳SparkCore结构如下
🎈基础配置🚩SparkConf配置信息🚩Spark Context (spark上下文)🚩Spark RPC (过程调用)🚩ListenerBus (事件总线)🚩MetricsSystem (度量系统)🚩SparkEnv (环境变量)🎈 存储系统🚩内存🚩磁盘🎈计算层🚩内存管理🚩任务管理🚩Task管理🚩Shuffle管理🎈调度原理🚩DAG调度🚩Task调度
💨RDD
是弹性分布式数据集,是一种容错的、可以被并行操作的元素集合,是Spark对所有数据处理的一种基本抽象。可以通过一系列的算子对rdd进行操作,主要分为Transformation和Action两种操作。
Transformation(转换):是对已有的RDD进行换行生成新的RDD,对于转换过程采用惰性计算机制,不会立即计算出结果。常用的方法有map,filter,flatmap等。Action(执行):对已有对RDD对数据执行计算产生结果,并将结果返回Driver或者写入到外部存储中。常用到方法有reduce,collect,saveAsTextFile等。
🎈如何创建RDD?
✔内置RDD
ShuffleRDD/HadoopRDDJDBCRDD/KafkaRDD/ UnionRDD/MapPartitionsRDD/...
✔自定义RDD
class CustomRDD(...) extends RDD {}实现五要素对应的函数
🎈RDD算子
✔Transform算子:生成一个新的RDD✔Action算子:触发Job提交
🎈RDD依赖
描述父子RDD之间的依赖关系
🚩 窄依赖:父RDD的每个parition至多对应一个子RDD分区。🚩 宽依赖:父RDD的每个partition都可能对应多个子RDD分区。
🎈RDD迭代过程
🚩sparkContext创建RDD对象,计算RDD间的依赖关系,并组成一个DAG有向无环图。🚩DAGScheduler将DAG划分为多个stage,并将stage对应的TaskSet提交到集群的管理中心,stage的划分依据是RDD中的宽窄依赖,spark遇见宽依赖就会划分为一个stage,每个stage中包含来一个或多个task任务,避免多个stage之间消息传递产生的系统开销。 🚩taskScheduler 通过集群管理中心为每一个task申请资源并将task提交到worker的节点上进行执行。🚩worker上的executor执行具体的任务。
💨SparkSQL
🎈概述
前身:shark
🚩shark: 执行计划优化完全依赖于Hive,不方便添加新的优化策略; Spark是线程级并行,而MapReduce是进程级并行。 Spark在兼容Hive的实现上存在线程安全问题,导致Shark 不得不使用另外一套独立维护的打了补丁的Hive源码分支; 🚩Spark SQL: 作为Spark生态的一员继续发展,而不再受限于Hive, 只是兼容Hive;Hive on Spark作为Hive的底层引擎之一 Hive可以采用Map-Reduce、Tez、Spark等引擎
spark sql提供了基于sql的数据处理方法,使得分布式的数据集处理变的更加简单,这也是spark 广泛使用的重要原因。
🎈特点
🚩数据兼容:不仅兼容Hive,还可以从RDD、parquet文件、 Json文件获取数据、 支持从RDBMS获取数据🚩性能优化:采用内存列式存储、自定义列化器等方式提升性能;🚩组件扩展: SQL的语法解析器、分析器、优化器都可以重新定义和扩展🚩兼容: Hive兼容层面仅依赖HiveQL解析、Hive元数据。 从HQL被解析成抽象语法树(AST) 起,就全部由Spark SQL接管了,Spark SQL执行计划生成和优化都 由Catalyst (函数式关系查询优化框架)负责🚩支持:数据既可以来自RDD,也可以是Hive、HDFS、 Cassandra等外部数据源, 还可以是JSON格式的数 据;
🎈Catalyst优化器
spark sql大致框架如下
🚩API
层简单的说就是Spark
会通过一些API
接受SQL
语句
🚩
收到SQL
语句以后, 将其交给Catalyst
,Catalyst
负责解析SQL
, 生成执行计划等
🚩
Catalyst
的输出应该是RDD
的执行计划
🚩
最终交由集群运行
🎈自适应查询执行框架(AQE)
AQE 可以理解成是Spark Catalyst 之上的一层,它可以在运行时修改 Spark plan。AQE 完全基于精确的运行时统计信息进行优化,引入了 Query Stages 的概念 ,并且以 Query Stage 为粒度,进行运行时的优化
Spark SQL实际上并不能完全替代Hive,因为Hive是一种基于HDFS的数据仓库,并且提供了基于SQL模型的,针对存储了大数据的数据仓库,进行分布式交互查询的查询引擎。