01 走进 Spark
1、Spark 介绍
(1)Spark 是用于大规模数据处理的对立剖析引擎;
(2)运行速度快:Spark 应用先进的 DAG 执行引擎,以反对循环数据流与内存计算,基于内存的执行速度可比 Haddop MapReduce 快上百倍,基于磁盘的执行速度也能快十倍;
(3)易用性:Spark 反对应用 Scala、Java、Python 和 R 语言进行编程,简洁的 API 设计有助于用户轻松构建并行程序,并且能够通过 Spark Shell 进行交互式编程;
(4)通用性:Spark 提供了残缺而弱小的技术栈,包含 SQL 查问、流式计算、机器学习和图算法组件,这些组件能够无缝整合在同一利用中,足以应答简单的计算;
(5)运行模式多样:Spark 可运行于独立的集群模式中,或者运行于 Hadoop 中,也可运行 Amazon EC2 等云环境中,并且能够拜访 HDFS、Cassandra、HBase、Hive 等多种数据源。
2、Spark 生态系统
Spark 生态圈即 BDAS(伯克利数据分析栈)蕴含了 Spark Core、Spark SQL、Spark Streaming、MLLib 和 GraphX 等组件,这些组件别离解决 Spark Core 提供内存计算框架、SparkStreaming 的实时处理利用、Spark SQL 的即时查问、MLlib 或 MLbase 的机器学习和 GraphX 的图解决,它们都是由 AMP 实验室提供,可能无缝的集成并提供一站式解决平台。
3、Spark 实用的利用场景
(1)简单的批量解决(Batch Data Processing), 偏重点在于解决海量数据的能力,至于处理速度可承受,通常的工夫可能在于数十分钟到数小时。另外随着 Spark 的 AQE 和 Runtime Filter Joins 等性能的退出,Spark 性能也有了更大的晋升;
(2)基于历史数据的交互式查问(Interactive Query),通常的工夫在数十秒到数十分钟之间;
(3)基于实时数据流的数据处理(Streaming Data Processing),通常在数百毫秒到数秒之间。
02 Spark 架构
1、架构组件组成
(1)Application: 建设在 Spark 上的用户程序,包含 Driver 代码和运行在集群各节点 Executor 中的代码;
(2)Driver: 驱动程序,Application 中的 main 函数并创立 SparkContext;
(3)Cluster Manager: 在集群(Standalone、Mesos、YARN)上获取资源的内部服务;(4)Worker Node: 集群中任何能够运行 Application 代码的节点;
(5)Executor: 某个 Application 运行在 Worker 节点上的一个过程;
(6)Task: 被送到某个 Executor 上的工作单元;
(7)Job: 蕴含多个 Task 组成的并行计算,往往由 Spark Action 算子触发生成,一个 Application 中往往产生多个 Job;
(8)Stage: 每个 Job 会被拆分成多组 Task,作为一个 TaskSet,其名称为 Stage。
2、组件之间的交互
(1)在驱动程序中,通过 SparkContext 主导利用的执行;
(2)SparkContext 能够连贯不同类型的 Cluster Manager(Standalone、YARN、Mesos),连贯后,能够取得集群节点上的 Executor 信息,管制集群和监控 Worker;
(3)Worker 负责管制计算节点,一个 Worker 节点默认一个 Executor,可通过 SPARK_WORKER_INSTANCES 调整;
(4)Executor 是 Application 运行在 Worker Node 上的一个过程;
(5)每个 Task 解决一个 RDD 分区;
3、运行流程
(1)构建 Spark Application 的运行环境,启动 SparkContext;
(2)SparkContext 向资源管理器(Standalone、Mesos、Yarn)申请运行 Executor 资源,并启动 StandaloneExecutorBackend(建设 Executor 线程池);
(3)Executor 向 SparkContext 申请 Task;
(4)SparkContext 将应用程序分发给 Executor。SparkContext 构建成 DAG 图,将 DAG 图分解成 Stage、将 Taskset 发送给 Task Scheduler,最初由 Task Scheduler 将 Task 发送给 Executor 运行;
(5)Task 在 Executor 上运行,运行完开释所有资源。
03 Spark 在 KaiwuDB 中的定制化
1、KWSpark 介绍
KWSpark 是为了满足用户在 KaiwuDB 上进行高性能 OLAP 剖析的需要而推出的产品,它借助 KaiwuDB 分布式数据库的计算和存储能力,再加上 Apache Spark 的大数据疾速并发解决能力,帮忙用户实现在大数据量下的 HTAP 查问。
它具备以下特点:
①多种数据读写形式反对;
②直连 KaiwuDB 节点底层存储接口;
③反对过滤算子、聚合算子下推到 KaiwuDB;
④反对 KaiwuDB 地区亲和个性;
⑤反对平安认证。
2、KWSpark 架构
在实现建设 KaiwuDB 分布式集群的根底上,KWSpark 通过拜访某一 KaiwuDB 节点上所存在的元数据信息,来获取整个集群各节点信息,而后应用 rpc 来间接连贯各个节点的存储接口,减速数据获取,并依附序列化工具的高传输效率,进步 Spark 与 KaiwuDB 的数据交换性能。
3、KWSpark- 数据读写
KWSpark 反对两种读写 KaiwuDB 的形式,一种是 JDBC 形式,一种是 Spark 数据源形式,Spark 数据源形式通过定制化实现针对 KaiwuDB 的数据源,进而反对 KaiwuDB 的读写。
4、KWSpark- 数据读写
KWSpark 反对 KaiwuDB 行引擎和列引擎。KWSpark 对 KaiwuDB 的行存引擎和列存引擎进行了反对,行存引擎适宜事务场景,列存引擎适宜 AP 场景,而且列式存储具备更高的压缩比。对于 Spark 来说,个别用来做 OLAP 剖析场景比拟多,可选用列存引擎性能更优,然而也可选用行引擎来进行数据操作。
5、KWSpark- 计算下推 KWSpark 反对列裁剪、谓词下推和聚合下推,将算子间接下推至 KaiwuDB 的存储层进行数据计算,充分利用分布式计算资源,缩小大量数据在网络中的传输,晋升 Spark 的计算性能。
6、KWSpark- 主键分区过滤
KWSpark 在实现 query 语句的解析后,依据过滤条件中的主键过滤信息以及表的 range 元数据中的主键范畴数据,过滤掉不合乎查问条件的 range,缩小 Spark 与 KaiwuDB 节点之间的 rpc 通信次数,缩小 Spark 的 Task 工作数,晋升查问性能。
7、KWSpark- 地区亲和
为了充沛反对 KaiwuDB 个性,KWSpark 对地区亲和个性进行反对,它具备就近查问,减小网络数据传输间隔,晋升查问性能的劣势。举例说明:当 KaiwuDB 集群散布在两个数据中心,一个 beijing 核心,一个 shanghai 核心,其中数据分为 beijing 和 shanghai 两个正本存在,当在 beijing 的 Spark 集群查问数据时,开启地区亲和个性,那么将会优先从 beijing 核心节点上获取数据,缩小网络数据传输间隔,晋升查问性能。
8、KWSpark- 用户权限管制 KWSpark 可启用 ssl 证书,用来管制用户对 KaiwuDB 零碎表操作权限, 进而管制用户对于数据的读写操作权限管制。
(1)KaiwuDB 平安模式下,超级管理员,对系统表权限较高,KWSpark 应用该用户证书可失常执行
(2)KaiwuDB 平安模式下,普通用户必须进行相应表权限赋予,KWSpark 才可失常运行
(3)KaiwuDB 非平安模式下,KWSpark 无需用户权限即可失常运行
9、KWSpark- 版本兼容
(1)Spark 2.4.x
(2)Spark 3.0.x
(3)Spark 3.1.x