大数据开发:Spark SQL数据处理模块

2021-08-03 18:17:23 浏览数 (1)

Spark SQL作为Spark当中的结构化数据处理模块,在数据价值挖掘的环节上,备受重用。自Spark SQL出现之后,坊间甚至时有传言,Spark SQL将取代Hive,足见业内对其的推崇。今天的大数据开发学习分享,我们就来讲讲Spark SQL数据处理模块。

Spark SQL简介

Spark SQL,整体来说,还是具备比较多的优势的,比如数据兼容、组件扩展、性能优化——

数据兼容:可从Hive表、外部数据库(JDBC)、RDD、Parquet 文件、JSON 文件获取数据,可通过 Scala 方法或 SQL 方式操作这些数据,并把结果转回 RDD。

组件扩展:SQL 语法解析器、分析器、优化器均可重新定义。

性能优化:内存列存储、动态字节码生成等优化技术,内存缓存数据。

多语言支持:Scala、Java、Python、R。

Spark SQL原理及组成

Catalyst 优化:

优化处理查询语句的整个过程,包括解析、绑定、优化、物理计划等,主要由关系代数(relation algebra)、表达式(expression)以及查询优化(query optimization)组成。

Spark SQL 内核:

处理数据的输入输出,从不同数据源(结构化数据 Parquet 文件 JSON 文件、Hive 表、外部数据库、已有 RDD)获取数据,执行查询(expression of queries),并将查询结果输出成 DataFrame。

Hive 支持:

对 Hive 数据的处理,主要包括 HiveQL、MetaStore、SerDes、UDFs 等。

Spark SQL执行流程

SqlParser 对 SQL 语句解析,生成 Unresolved 逻辑计划(未提取 Schema 信息);

Catalyst 分析器结合数据字典(catalog)进行绑定,生成 Analyzed 逻辑计划,过程中 Schema Catalog 要提取 Schema 信息;

Catalyst 优化器对 Analyzed 逻辑计划优化,按照优化规则得到 Optimized 逻辑计划;

与 Spark Planner 交互,应用策略(strategy)到 plan,使用 Spark Planner 将逻辑计划转换成物理计划,然后调用 next 函数,生成可执行物理计划。

Spark SQL性能

内存列式缓存:内存列式(in-memory columnar format)缓存(再次执行时无需重复读取),仅扫描需要的列,并自动调整压缩比使内存使用率和 GC 压力最小化。

动态代码和字节码生成技术:提升重复表达式求值查询的速率。

Tungsten 优化:

由 Spark 自己管理内存而不是 JVM,避免了 JVM GC 带来的性能损失。

内存中 Java 对象被存储成 Spark 自己的二进制格式,直接在二进制格式上计算,省去序列化和反序列化时间;此格式更紧凑,节省内存空间。

关于大数据开发学习,Spark SQL数据处理模块,以上就为大家做了简单的介绍了。Spark框架在大数据生态当中的重要地位,决定了我们在学习当中也应当付出相应程度的努力,由浅入深,逐步深入。

0 人点赞