目录
一、Spark SQL介绍
二、Spark和Hive的整合
三、Spark的thriftserve2/beeline/jdbc
四、shell方式使用SQL
一、Spark SQL介绍
官网:http://spark.apache.org/sql/
学习文档:http://spark.apache.org/docs/latest/sql-programming-guide.html
SQL on Hadoop框架:
1)Spark SQL
2)Hive
3)Impala
4)Phoenix
Spark SQL是用来处理离线数据的,他的编程模型是DF/DS
Spark SQL的特点:
1)集成:可以和各种复杂SQL:spark.sql("")
2)统一的数据访问:连接Hive, Avro, Parquet, ORC, JSON, and JDBC外部数据源统一的方式:spark.read.format("").load("")
3)与Hive的集成:由于共享元数据库的存在,表、UDF都可以共享。impala、Hive、Spark SQL都是共享metastore元数据的
4)jdbc方式:需要启动服务,比如Hive的hiveserver2、mysql。
Spark的SQL框架:
1)Spark分支: Spark SQL
2)Hive:Hive on Spark
交互Spark SQL的方式:SQL、DF/DS
DataFrame 是1.3版本出来的,DataSet1.6出现的。
DataFrame=RDD+schema
DataFrame=Dataset[Row]
DF支持使用Scala, Java, Python, and R进行开发。但是DS只支持Scala and Java. Python暂时不支持,所以使用Python是有局限性的。
二、Spark和Hive的整合
只需要两步:
1)将Hive元数据的配置文件放到Spark/conf下:
cd $SPARK_HOME
cd conf
cp /home/hadoop/app/hive-1.1.0-cdh5.7.0/conf/hive-site.xml .(hive-site.xml中配置了元数据的连接)
2)在Spark中加入mysql的driver驱动包(因为Hive元数据是存储在MySQL上)。有多种方式添加jar包:
1)方式1:加在spark-shell或者spark-submit后:
启动的时候通过--jars加入,但是有的时候并不能传到driver端,所以还需要再使用--driver-class-path:
spark-shell \
--jars /home/hadoop/lib/mysql-connector-java-5.1.43-bin.jar \
--driver-class-path /home/hadoop/lib/mysql-connector-java-5.1.43-bin.jar如果包多的时候使用--package。
2)方式2:cp包进SPARK_HOME/jars
3)方式3:把jar包配置在spark-default.conf下:
多包的时候使用:
spark.executor.extraClassPath=/home/hadoop/wzq_workspace/lib/*
spark.driver.extraClassPath=/home/hadoop/wzq_workspace/lib/*
单个包的时候使用(本人):
spark.executor.extraClassPath=/home/hadoop/lib/mysql-connector-java-5.1.43-bin.jar
spark.driver.extraClassPath=/home/hadoop/lib/mysql-connector-java-5.1.43-bin.jar
注意:
1)Hive底层是HDFS,一定要保证HDFS进程是开启的。
2)mysql的服务需要是开启的。
3)想要使用Spark整合Hive,在编译Spark的时候需要在编译指令中加入-Phive -Phive-thriftserver。
4)因为Spark配置中加入了hive-site.xml,所以默认的文件系统就是 HDFS。
否则就是本地文件系统,create table的时候就会在本地创建/user/hive/warehouse目录 。
SparkSession是Spark SQL程序的入口。在Spark Shell中SparkSession的别名是spark。
三、Spark的thriftserve2/beeline/jdbc
hive有hiveServer2,spark中也有类似的thriftserve2。
位置:spark/sbin
步骤:
1)将${HIVE_HOME}/conf/hive-site.xml 拷贝到${SPARK_HOME}/conf下。
2)添加mysql驱动。
启动thriftserver服务:
sbin$ ./start-thriftserver.sh --jars ~/software/XXX/mysql-connector-java-5.1.27-bin.jar
会提示日志文件的位置,通过`tail -f XX.log`可以查看这个server是否启动成功。
占用的端口是10000。
启动beeline客户端:
bin$ ./beeline -u jdbc:hive2://localhost:10000 -n hadoop #通过过JDBC连接hive
jdbc:hive2://localhost:10000> #成功连接
jdbc:hive2://localhost:10000> show tables;
jdbc:hive2://localhost:10000> select * from emp;
注意:
要在`$SPARK_HOME/bin`下通过`./beeline`启动start-thriftserver.sh对应的客户端,否则启动启动成hive的客户端,因为环境变量中配置了`HIVE_HOME/bin`,也配置了`SPARK_HOME/bin` ,所以要明确位置进行使用。
开启server之后,也可以在windows上的IDEA中使用JDBC进行连接服务。同样不需要写用户名和密码。
观察Spark UI界面:
1)应用的名称是Thrift JDBC/ODBC Server
2)页面上多了一个JDBC/ODBC Server的页签,并且展示SQL的很多信息和SQL的执行计划。
四、shell方式使用SQL
实际上就是访问操作Hive表。
shell方式使用SQL有两种方式:
1)spark-shell进入:
scala> spark.sql("show databases").show(false)
scala> spark.sql("use hive")
scala> spark.sql("show tables").show(false)
scala> spark.sql("select * from test").show(false)
2)spark-sql进入:
bin$ ./spark-sql --jars
spark-sql(default)> show tables;
spark-sql(default)> select * from emp;
spark-sql (default)> show databases; #直接写SQL,用;符号结束
用exit;退出spark-sql
spark-sql 底层调用的也是spark-submit。
原文地址:https://www.cnblogs.com/huomei/p/12093999.html