问题导读
1.spark SQL命令可以通过什么窗口直接执行?
2.如何远程访问spark SQL数据?
3.你认为使用spark SQL的方式有哪些?
spark2 sql入口是SparkSession,它封装了SQLcontext和hiveContext。我这里所说的入口,是我们有哪些方式使用spark sql.这里默认已经有spark集群。如果没有可参考下面文章安装。
about云日志分析项目准备6:Hadoop、Spark集群搭建http://www.aboutyun.com/forum.php?mod=viewthread&tid=20620
同样我们跟传统数据库比较,我们可以通过sql命令在数据库直接执行,查询结果。我们也可以通过jdbc或则odbc等嵌入到程序中执行。spark SQL同样也是。
spark sql CLI
我们可以在目录$spark_home/bin看到spark-sql
然后我们启动spark-sql.假如在spark_home目录下,启动命令如下
[mw_shl_code=bash,true]./bin/spark-sql[/mw_shl_code]
如果是在bin目录下,可以执行下面命令
[mw_shl_code=bash,true]./spark-sql[/mw_shl_code]
如下,我们便进入了spark sql。
既然进入了,我们就实际操作下:
spark sql创建表
[mw_shl_code=sql,true]create table test_sparksql(filed1 Integer,filed2 String);[/mw_shl_code]
创建完毕,我们可以查看下创建表
[mw_shl_code=sql,true]show tables;[/mw_shl_code]
JDBC/ODBC thrift 服务
ThriftServer是一个JDBC/ODBC接口,用户可以通过JDBC/ODBC连接ThriftServer来访问SparkSQL的数据。ThriftServer启动时还开启一个侦听器,等待JDBC客户端的连接和提交查询。Thrift Server启动一个SparkSQL应用程序的参数,如果不设置--master的话,将在启动Thrift Server的机器以local方式运行。
首先我们启动thrift服务
[mw_shl_code=bash,true] ./sbin/start-thriftserver.sh --master spark://master:7077[/mw_shl_code]
启动服务,我们想测试下,该如何测试。测试的方式有两种,在代码中设置链接,然后我们各种操作。由于代码存在一定的局限性,如果我们刚开始学习会遇到各种问题。这里采用一种更简单通用的方式,使用beeline连接。
接着我们启动beeline
[mw_shl_code=bash,true] ../bin/beeline[/mw_shl_code]
后面我们就需要连接thrift
[mw_shl_code=bash,true] !connect jdbc:hive2://master:10000[/mw_shl_code]
这时候会让我们输入用户名和密码。
用户名写本机用户名,我这里是aboutyun,密码为空,直接回车即可
这样连接成功。
接着我们创建表
[mw_shl_code=bash,true]create table testThrift(field1 String , field2 Int);[/mw_shl_code]
然后查看表:
Beeline 补充说明:
Beeline 有两种工作模式:内嵌、远程。
内嵌模式中,会运行一个内嵌的Hive(类似于Hive CLI)。
远程模式中,通过Thrift协议连接到一个不同的HiveServer2。从Hive 0.14起,Beeline连接HiveServer2 时,还会将HiveServer2 执行查询的日志信息输出到STDERR。
-- 推荐在生产中使用远程模式,因为更安全,且无需 HDFS/metastore 的访问授权。
注意,在远程模式下,HiveServer2 只接受有效的Thrift 请求 -- 就算是在HTTP模式中,消息体也需要包含Thrift payload。
关于通过代码实现可参考
spark SQL Running the Thrift JDBC/ODBC server
http://www.aboutyun.com/forum.php?mod=viewthread&tid=17882
spark-shell命令
其实还有另外的方式,也是我们经常使用的,也可以作为spark sql的一个入口。在DataFrame中可以注册为临时视图或则持久化表,然后我们查询。这里不在详述,推荐参考
spark2 sql读取json文件的格式要求续:如何查询数据
http://www.aboutyun.com/forum.php?mod=viewthread&tid=23483
spark2之DataFrame如何保存【持久化】为表
http://www.aboutyun.com/forum.php?mod=viewthread&tid=23523
补充:
在beeline里,如果不去链接hive会出现如下错误
[mw_shl_code=bash,true] show databases;
No current connection
没有链接hive[/mw_shl_code]
对于界面退出命令总结:
beeline如何退出:!quit
spark-shell如何退出::quit
spark-sql如何退出:exit;
|