1.Spark SQL 概述
(1)为什么需要SQL
1)事实上的标准
2)简单易学
Hive:类似于sql的Hive QL语言 sql==>mapreduce
特点:基于mapreduce
改进:基于tez spark
Spark:分布式的基于内存的计算框架
hive on spark ==> shark(hive on spark)
优点:基于spark、基于内存的列式存储、与hive能够兼容
缺点:hive ql的解析、逻辑执行计划生成、执行计划的优化是依赖于hive的,仅仅只是把物理执行计划从mapreduce作业变成了spark作业
2.SQL on Hadoop常用框架
(1)Hive
1)sql==>mapreduce
2)metastore:元数据
3)sql:database、table、view
4)由facebook开源
(2)impala
1)cloudera公司:cdh(建议在生产上使用的hadoop系列版本)、cm(具有图形界面)
2)sql:自己的守护进程执行的,非mr,基于内存的
3)metastore:元数据
(3)presto
1)facebook开源,京东用的很多
(4)drill
1)sql
2)访问hdfs rdbms json hbase mangodb s3 hive
(5)Spark SQL
1)sql
2)dataframe dataset api
3)hdfs rdbms json hbase mangodb s3 hive 外部数据源
3.Spark SQL概述(处理结构化数据)
1)不仅仅有访问或者操作SQL的功能,还提供了其他的非常丰富的操作:外部数据源,优化
2)能够访问hive jison parquet等文件的数据
3)SQL只是Spark SQL的一个功能
4)Spark SQL提供了SQL的API DataFrame和Dataset的API
4. hive to spark SQL
1.SQLContext/HiveContext/SparkSession的使用
(1)SQLContext 在Spark1.0中使用
(2)HiveContext 在Spark1.0中使用
1)to use a HiveContext,you do not need to have an hive setup
(3)SparkSession 在Spark2.0中使用
2. Spark-shell/spark-sql的使用
(1)Spark速度比Hive快很多
(2)Spark-shell和Spark-sql用法差不多
执行过程:
1)解析成逻辑计划
2)Spark自身会进行一次计划优化
3)生成物理执行计划,交给Spark执行
(3)过程:
1)hive-site.xml配置文件(添加,放到spark下的conf中)
2)--jars传递mysql驱动包
3. thriftserver/beeline的使用
(1)首先启动服务(要使用--jars传mysql驱动)
(2)启动beeline beeline -u jdbc:hive2://localhost:10000 -n hadoop 连接到thriftserver
4.thriftserver和普通的spark-shell/spark-sql有什么区别?
(1)spark-shell/spark-sql都是对应的一个spark application
(2)thriftserver,不管启动多少个客户端(beeline/code),永远都是一个spark application
解决了一个数据共享问题,多个客户端可以共享数据;(客户端是指通过JDBC方式连接)
5.jdbc方式编程访问
在使用JDBC开发时,一定要记得先启动thriftserver