scala> spark.sql("show tables").show(false)
scala> spark.sql("select * from hive.emp").show(false)
scala> spark.sql("select * from hive.dept").show(false)
scala> spark.sql("select a.empno,a.name,b.dname from hive.emp a join hive.dept b on a.depno = b.deptno").show(false)
spark-sql> select * from hive.emp;
spark-sql> select * from hive.dept;
spark-sql> select a.empno,a.name,b.dname from hive.emp a join hive.dept b on a.depno = b.deptno;
1. 环境准备
2. Spark SQL使用交互式命令行来访问Hive表
2.1 使用spark-shell交互式命令行连接hive
使用Spark SQL的API调用Hive的命令,把结果展示出来
对比之下,Spark SQL对hive表做join查询时执行效率比HiveQL高很多。
2.2 使用spark-sql交互式命令行来连接hive
使用Spark SQL的API调用hive命令,把结果展示出来。这里的命令跟HiveQL一模一样。
Spark的Web UI右上角的显示会随着连接方式的改变而改变。
3. Spark SQL通过JDBC/ODBC连接HiveServer2来访问Hive里面的数据
启动一个Spark ThriftServer,ThriftServer就对应Hive里面的HiveServer2。
从启动日志可以看到,服务端口号为10000
启动成功之后通过Spark Web UI (http://192.168.1.8:4040/jobs)可以看到启动的状态(如果4040被占用,它会启动在4041端口)。此时我们可以通过spark beeline客户端来连接它。
特别注意:如果机器上面既装了spark又装了hive,要区分开启动的是spark的beeline还是hive的beeline。
除此之外,也可以通过IDEA编程,使用JDBC/ODBC来连接Spark ThriftServer。
pom.xml添加hive依赖
SparkSQLClientApp.scala
思考:ThriftServer和spark-shell或者spark-sql的区别在哪? 我们的ThriftServer也是一个Application,ThriftServer启动后服务7*24小时一直运行。其他应用可以以JDBC/ODBC的方式去访问它。这样减少了服务每次启动时带来的资源消耗和时间成本。 工作中我们经常也需要把自己的application封装成一个http服务,服务启动时一次性请求资源,客户端调用服务时一个http请求就可以把结果拿回来,不用去重复申请资源(HUE,Zeeplin都是以这样的一种方式来运行的)。