Spark 在 KaiwuDB 中的应用与实践

时间:2020-12-31 00:52:07

一、走进 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 实验室提供,能够无缝的集成并提供一站式解决平台。

Spark 在 KaiwuDB 中的应用与实践 

3、 Spark 适用的应用场景

(1)复杂的批量处理(Batch Data Processing),偏重点在于处理海量数据的能力,至于处理速度可接受,通常的时间可能在于数十分钟到数小时。另外随着 Spark 的 AQE 和 Runtime Filter Joins等功能的加入,Spark 性能也有了更大的提升;

(2)基于历史数据的交互式查询(Interactive Query),通常的时间在数十秒到数十分钟之间;

(3)基于实时数据流的数据处理(Streaming Data Processing),通常在数百毫秒到数秒之间。

Spark 在 KaiwuDB 中的应用与实践 

二、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 分区;

Spark 在 KaiwuDB 中的应用与实践

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 上运行,运行完释放所有资源。

Spark 在 KaiwuDB 中的应用与实践

三、Spark 在 KaiwuDB 中的定制化

1、KWSpark 介绍

KWSpark 是为了满足用户在 KaiwuDB 上进行高性能 OLAP 分析的需求而推出的产品,它借助 KaiwuDB 分布式数据库的计算和存储能力,再加上 Apache Spark 的大数据快速并发处理能力,帮助用户实现在大数据量下的 HTAP 查询。它具备以下特点:
①多种数据读写方式支持;
②直连 KaiwuDB 节点底层存储接口;
③支持过滤算子、聚合算子下推到 KaiwuDB;
④支持 KaiwuDB 地区亲和特性;
⑤支持安全认证。

2、KWSpark 架构 

在完成建立 KaiwuDB 分布式集群的基础上,KWSpark 通过访问某一 KaiwuDB 节点上所存在的元数据信息,来获取整个集群各节点信息,然后使用 rpc 来直接连接各个节点的存储接口,加速数据获取,并依靠序列化工具的高传输效率,提高 Spark 与 KaiwuDB 的数据交换性能。

Spark 在 KaiwuDB 中的应用与实践


3、KWSpark-数据读写

KWSpark 支持两种读写 KaiwuDB的方式,一种是 JDBC 方式,一种是 Spark 数据源方式,Spark 数据源方式通过定制化实现针对 KaiwuDB 的数据源,进而支持 KaiwuDB 的读写。

4、KWSpark-数据读写

KWSpark 支持 KaiwuDB 行引擎和列引擎。 KWSpark 对 KaiwuDB 的行存引擎和列存引擎进行了支持,行存引擎适合事务场景,列存引擎适合 AP 场景,而且列式存储具有更高的压缩比。 对于 Spark 来说,一般用来做 OLAP 分析场景比较多,可选用列存引擎性能更优,但是也可选用行引擎来进行数据操作。

Spark 在 KaiwuDB 中的应用与实践Spark 在 KaiwuDB 中的应用与实践 

5、KWSpark-计算下推

KWSpark 支持列裁剪、谓词下推和聚合下推,将算子直接下推至 KaiwuDB 的存储层进行数据计算,充分利用分布式计算资源,减少大量数据在网络中的传输,提升 Spark 的计算性能。

Spark 在 KaiwuDB 中的应用与实践


6、KWSpark-主键分区过滤

KWSpark 在完成 query 语句的解析后,根据过滤条件中的主键过滤信息以及表的 range 元数据中的主键范围数据,过滤掉不符合查询条件的 range,减少 Spark 与 KaiwuDB 节点之间的 rpc 通信次数,减少 Spark 的 Task 任务数,提升查询性能。

Spark 在 KaiwuDB 中的应用与实践

7、KWSpark-地区亲和

为了充分支持 KaiwuDB 特性,KWSpark 对地区亲和特性进行支持,它具有就近查询,减小网络数据传输距离,提升查询性能的优势。

举例说明:当 KaiwuDB 集群分布在两个数据中心,一个 beijing 中心,一个 shanghai 中心,其中数据分为 beijing 和 shanghai 两个副本存在,当在 beijing 的 Spark 集群查询数据时,开启地区亲和特性,那么将会优先从 beijing 中心节点上获取数据,减少网络数据传输距离,提升查询性能。

Spark 在 KaiwuDB 中的应用与实践


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

END