一、走进 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),通常在数百毫秒到数秒之间。
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 上的一个进程;
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 上运行,运行完释放所有资源。
1、KWSpark 介绍
KWSpark 是为了满足用户在 KaiwuDB 上进行高性能 OLAP 分析的需求而推出的产品,它借助 KaiwuDB 分布式数据库的计算和存储能力,再加上 Apache Spark 的大数据快速并发处理能力,帮助用户实现在大数据量下的 HTAP 查询。它具备以下特点:
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-版本兼容