Spark SQL:将sql转换成spark任务
1、Spark SQL:主要处理结构化的数据
通常工业界,需要将非结构化数据转成结构化数据,然后再进一步计算和处理
2、Hive存储数据有几个层次:
table/partition/buckets/hdfs
spark sql可以和hive相结合使用
3、spark streaming中模板称为Dstream
spark sql新的概念:DataFrame,当做一个table-关系表,DataFrame(表)= Schema(表结构) + Data(表数据)
DataFrame:相比RDD多了数据的结构信息,即schema。DataFrame(表)是Spark SQL对结构化数据的抽象。可以将DataFrame看做RDD。
RDD是分布式的 Java对象的集合。DataFrame是分布式的Row对象的集合。
DataFrame优点:除了提供了比RDD更丰富的算子以外,更重要的特点是提升执行效率、减少数据读取以及执行计划的优化
5、DataFrame数据来源:数据源多样
(1)外部数据源(SQLContext):HDFS、网络接口、Mysql。。。
(2)Hive数据源(HiveContext):Hive
两者关系:HiveContext继承于SQLContext,SQLContext支持语法更多,但不支持HQL,HiveContext仅支持HQL
6、DataFrame是分布式table,并不是spark独创,也不装真正的数据,而是转换关系和描述,更像传统数据库中的二维表
7、RDD与DataFrame区别:
RDD是以行为单位(record)读数据
DataFrame包含了每个record的metadata元数据信息,DataFrame可以对其内部进行列优化
8、RDD与DataFrame相同点:懒惰机制
处理数据步骤:
(1)读入:SQLContext、HiveContext
(2)处理:DataFrame
(3)输出:SQLContext、HiveContext
9、DataSet--spark1.6之后推出的新的API,也是一个分布式数据集(在scala中,DataFrame其实是DataSet[Row],这个Row里面包含了多个列信息)
Dataset是数据的分布式集合。Dataset是在Spark 1.6中添加的一个新接口,是DataFrame之上更高一级的抽象。
提供了RDD的优点(强类型化)以及Spark SQL优化后的执行引擎的优点。
一个Dataset 可以从JVM对象构造,然后使用函数转换(map, flatMap,filter等)去操作。
Dataset API 支持Scala和Java。 Python不支持Dataset API。
10、spark sql处理核心:Catalyst工作流程(用tree结构来存储sql、DataFrame)
优化点:
(1)基于规则:经验式、启发式优化思路
对于两张表join的方法选择(broadcastHashJoin、sortMergeJoin)
(2)基于代价(join大小表,外排和内排):代价模型,调整join的顺序
11、数据处理工作流程:
(1)Parser
(2)Analyzer
(3)Optimizer
(4)Physical Planning
12、内存管理:Tungsten Off-heap内存管理
突破JVM内存管理限制,分配堆外内存,使得spark实现了自己独立内存管理,避免JVM资源回收引发的性能问题
13、优化
基于规则优化
基于代价优化(join)