我们已经有了spark-shell
和spark-sql
,为什么还要使用Thriftserver
呢?
每一个spark-shell / spark-sql都是一个Spark Application。
Thriftserver不管启动多少个客户端(beeline / code),都只会产生一个Spark Application
启动thriftserver
需要把MySQL JDBC驱动通过jars
参数加入进来。
1 | cd $SPARK_HOME/ |
查看进程
1 | jps -m |
我们看到有两个SparkSubmit进程,21522那个进程就是刚才启动的那个,class是HiveThriftServer2
。
以spark-shell方式启动的class是SparkSQLCLIDriver
。
thriftserver端口
默认端口为10000
,可以修改为其他端口。
在启动时增加hiveconf
参数,比如把端口号设置为14000
。
1 | --hiveconf hive.server2.thrift.port = 14000 |
beeline访问thriftserver
需要设置jdbc uri: jdbc:hive2://localhost:10000
1 | bin/beeline -u jdbc:hive2://localhost:10000 -n simon |
查看emp
表的内容。
1 | 0: jdbc:hive2://localhost:10000> SELECT * FROM emp; |
通过程序访问thriftserver
添加依赖
1 | <!-- Thriftserver 支持 --> |
SparkSQLThriftServerApp
1 | package gy.finolo.spark |
运行结果
1 | empno: 7369, ename: SMITH, salary: 800.0 |
注意
- 通过程序访问thriftserver前,得保证thriftserver已经启动,不然运行程序时,会遇到如下错误:
1 | Exception in thread "main" java.sql.SQLException: Could not open client transport with JDBC Uri: |
- 我安装的Hive版本是
hive-1.1.0-cdh5.7.0
,但我在pom.xml里依赖的jar版本不对时,可能遇到如下异常。
1 | Exception in thread "main" java.sql.SQLException: Could not open client transport with JDBC Uri: |