Spark SQL----分布式SQL引擎
- 一、运行Thrift JDBC/ODBC服务器
- 二、运行Spark SQL CLI
- 2.1 Spark SQL命令行选项
- 2.2 hiverc文件
- 2.3 路径的说明
- 2.4 支持的注释类型
- 2.5 Spark SQL CLI交互式Shell命令
- 2.6 例子
Spark SQL还可以使用JDBC/ODBC或命令行接口充当分布式查询引擎。在这种模式下,最终用户或应用程序可以直接与Spark SQL交互以运行SQL查询,而无需编写任何代码。
一、运行Thrift JDBC/ODBC服务器
这里实现的Thrift JDBC/ODBC服务器对应于内置Hive中的HiveServer2。你可以使用Spark或兼容的Hive附带的beeline脚本测试JDBC服务器。启动JDBC/ODBC服务,在Spark目录下执行如下命令:
./sbin/start-thriftserver.sh
此脚本接受所有bin/spark-submit命令行选项,以及指定Hive属性的–hiveconf选项。你可以执行./sbin/start-thriftserver.sh --help获取所有可用选项的完整列表。默认情况下,服务器在localhost:10000上侦听。你可以通过以下任一环境变量来覆盖此行为:
export HIVE_SERVER2_THRIFT_PORT=<listening-port>
export HIVE_SERVER2_THRIFT_BIND_HOST=<listening-host>
./sbin/start-thriftserver.sh \--master <master-uri> \...
或者系统属性:
./sbin/start-thriftserver.sh \--hiveconf hive.server2.thrift.port=<listening-port> \--hiveconf hive.server2.thrift.bind.host=<listening-host> \--master <master-uri>...
现在你可以使用beeline测试Thrift JDBC/ODBC服务器:
./bin/beeline
在beeline中连接JDBC/ODBC服务器:
beeline> !connect jdbc:hive2://localhost:10000
Beeline会要求您输入用户名和密码。在非安全模式下,只需输入机器上的用户名和空白密码。对于安全模式,请遵循beeline文档中给出的说明。Hive的配置是通过将hive-site.xml, core-site.xml 和hdfs-site.xml文件放在conf/中完成的。你也可以使用Hive附带的beeline脚本。Thrift JDBC服务器还支持通过HTTP传输发送thrift RPC消息。使用以下设置将HTTP模式作为系统属性或在conf/中的hive-site.xml文件中启用:
hive.server2.transport.mode - Set this to value: http
hive.server2.thrift.http.port - HTTP port number to listen on; default is 10001
hive.server2.http.endpoint - HTTP endpoint; default is cliservice
要进行测试,使用beeline以http模式连接到JDBC/ODBC服务器:
beeline> !connect jdbc:hive2://<host>:<port>/<database>?hive.server2.transport.mode=http;hive.server2.thrift.http.path=<http_endpoint>
如果关闭会话并执行CTAS,则必须在hive-site.xml中将“fs.%s.impl.disable.cache”设置为true。请参阅[SPARK-21067]中的更多详细信息。
二、运行Spark SQL CLI
Spark SQL CLI是一个方便的交互式命令工具,用于运行Hive metastore服务和执行命令行输入的SQL查询。注意,Spark SQL CLI不能与Thrift JDBC服务器通信。启动Spark SQL命令行,在Spark目录下执行如下命令:
./bin/spark-sql
Hive的配置是通过将hive-site.xml, core-site.xml 和hdfs-site.xml文件放在conf/中完成的。
2.1 Spark SQL命令行选项
你可以运行./bin/spark-sql --help获取所有可用选项的完整列表。
CLI options:-d,--define <key=value> Variable substitution to apply to Hivecommands. e.g. -d A=B or --define A=B--database <databasename> Specify the database to use-e <quoted-query-string> SQL from command line-f <filename> SQL from files-H,--help Print help information--hiveconf <property=value> Use value for given property--hivevar <key=value> Variable substitution to apply to Hivecommands. e.g. --hivevar A=B-i <filename> Initialization SQL file-S,--silent Silent mode in interactive shell-v,--verbose Verbose mode (echo executed SQL to theconsole)
2.2 hiverc文件
当不使用-i命令调用时,Spark SQL命令行将尝试加载$HIVE_HOME/bin/.hiverc和$HOME/.hiverc作为初始化文件。
2.3 路径的说明
Spark SQL CLI支持从初始化脚本文件(-i)或普通SQL文件(-f)运行SQL,如果路径url没有scheme组件,则将路径作为本地文件处理。例如: /path/to/spark-sql-cli.sql 等于 file:///path/to/spark-sql-cli.sql。用户也可以使用Hadoop支持的文件系统,如s3://<mys3bucket>/path/to/spark-sql-cli.sql 或者hdfs://<namenode>:<port>/path/to/spark-sql-cli.sql。
2.4 支持的注释类型
Comment | Example |
---|---|
simple comment | – This is a simple comment. SELECT 1; |
bracketed comment | /* This is a bracketed comment. */ SELECT 1; |
nested bracketed comment | /* This is a /* nested bracketed comment*/ .*/ SELECT 1; |
2.5 Spark SQL CLI交互式Shell命令
当不带-e或-f选项运行./bin/spark-sql时,它将进入交互式shell模式。使用;(分号)终止命令。注意:
- 仅当;位于行尾且未被\;转义时CLI使用;终止命令。
- ;是终止命令的唯一方法。如果用户输入SELECT 1并按enter键,控制台将等待输入。
- 如果用户在一行中输入多个命令,例如SELECT 1; SELECT 2;,命令SELECT 1和SELECT 2将分别执行。
- 如果;出现在SQL语句中(不是行尾),那么它没有特殊含义:
-- This is a ; comment
SELECT ';' as a;
这只是一个注释行,后面跟着一个返回字符串文字的SQL查询。
/* This is a comment contains ;
*/ SELECT 1;
但是,如果’;‘是行尾,则终止SQL语句。上面的示例将终止为/* This is a comment contains 和 / SELECT 1,Spark将分开提交这两个命令并抛出解析器错误(unclosed bracketed comment and Syntax error at or near '/’)。
Command | Description |
---|---|
quit or exit | 退出交互式shell。 |
!<command> | 在Spark SQL CLI shell中执行shell命令。 |
dfs <HDFS dfs command> | 在Spark SQL CLI shell中执行HDFS dfs命令。 |
<query string> | 执行Spark SQL查询并将结果打印到标准输出。 |
source <filepath> | 在CLI中执行脚本文件。 |
2.6 例子
从命令行运行查询的示例:
./bin/spark-sql -e 'SELECT COL FROM TBL'
设置Hive配置变量示例:
./bin/spark-sql -e 'SELECT COL FROM TBL' --hiveconf hive.exec.scratchdir=/home/my/hive_scratch
设置Hive配置变量并在SQL查询中使用的示例:
./bin/spark-sql -e 'SELECT ${hiveconf:aaa}' --hiveconf aaa=bbb --hiveconf hive.exec.scratchdir=/home/my/hive_scratch
spark-sql> SELECT ${aaa};
bbb
设置Hive变量替换的示例:
./bin/spark-sql --hivevar aaa=bbb --define ccc=ddd
spark-sql> SELECT ${aaa}, ${ccc};
bbb ddd
使用静默模式从查询中将数据转储到文件的示例:
./bin/spark-sql -S -e 'SELECT COL FROM TBL' > result.txt
以非交互方式运行脚本的示例:
./bin/spark-sql -f /path/to/spark-sql-script.sql
在进入交互模式之前运行初始化脚本的示例:
./bin/spark-sql -i /path/to/spark-sql-init.sql
进入交互模式的例子:
./bin/spark-sql
spark-sql> SELECT 1;
1
spark-sql> -- This is a simple comment.
spark-sql> SELECT 1;
1
通过escape ;注释进入交互模式的例子:
./bin/spark-sql
spark-sql>/* This is a comment contains \\;> It won't be terminated by \\; */> SELECT 1;
1