Spark SQL:不仅是数据仓库的引擎,而且也是数据挖掘的引擎,更为重要的事Spark SQL是数据科学计算和分析引擎。
Hive+Spark SQL+DataFrame组成了目前国内的大数据主流技术组合:
Hive:负责低成本的数据仓库存储
Spark SQL:负责高速的计算
DataFrame:负责复杂的数据挖掘
DataFrame与RDD的差异:
RDD是以Record为单位的,Spark SQL在优化的时候无法了解Record内部细节,所以无法进行更深度的优化,这极大限制了SparkSQL的性能提升。
DataFrame是以列为单位的,包含每个Record的元数据信息,也就是说DataFrame在优化时基于列内部的优化,而不像RDD一样,只能基于行来进行优化。
Spark使用方式:
1、通过Spark-shell
2、使用Spark-sql命令终端
3、Spark的Web UI
DataFrame基本操作实战:
1、可以从外部文件构建DataFrame
2、在DataFrame上进行比较常用的操作
3、多个DataFrame之间的操作
4、DataFrame的持久化操作
Spark SQL操作多种数据源:
Spark SQL可加载Parquet、Json、文件文本等各种数据源格式的数据;Spark SQL可以操作各种数据库,eg:Hive、Json数据集、Hbase、MySQL、MongoDB等。
1、数据加载:在SQLContext中通过parquetFile、jsonFile、load、jdbc等方法分别加载Parquet、json、文本文件或数据库的数据来创建DataFrame。
2、保存:在DataFrame中通过saveAsParquetFile、saveAsTable、save把DataFrame中的数据保存到Parquet、json、文本文件或数据库中。
Parquet列式存储:
列式存储指数据是按列存储的,每一列数据单独存放,列式存储以流的方式在列中存储所有数据,主要适合批量数据处理和即席查询。
Apache Thrift:可伸缩的跨语言服务开发框架。最初有Facebook用做系统内各语言之前的RPC通信。
Apache Thrift采用接口描述语言定义并创建服务,支持可扩展的垮语言服务开发,所包含的代码审查引擎可以在多种语言中使用,eg:java、C++、Python、PHP、Ruby、Perl、C#等,其传输数据采用二进制格式,相对XML和JSON体积更小,对于高并发、大数据量和多语言的环境更有优势。
Thrift工作机制:
可以实现从Web的角度访问SparkSql,以下是非常经典的SparkSQL企业应用实现架构:
JDBC/ODBC -> Thrift Server -> Spark SQL -> Hive数据仓库
Thrift Server在JDBC/ODBC 和 Spark SQL之间架设了一座桥梁,通过JDBC/ODBC接口访问Thrift Server,Thrift Server 访问Spark SQL,对用户而言,类似通过JDBC/ODBC访问Oracle数据库,用户通过JDBC/ODBC 的接口访问Thrift Server,相当于直接访问操作Hive数据仓库中的数据。