本文为自己翻译的译文,原文地址:https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients
这个页面描述了HiveServer2支持的不同客户端。其它的HiveServer2文档包含:
Version
Introduced in Hive version 0.11. See HIVE-2935.
Beeline – Command Line Shell Beeline-命令行shell
HiveServer2 支持一个命令行shellBeeline。它是一种基于SQLline CLI 的JDBC客户端(http://sqlline.sourceforge.net/)。SQLLine的细节文档连接,它同样也适用于Beeline。
同时支持嵌入模式和远程模式。在嵌入模式中,它运行一个嵌入的Hive(类似旧的Hive CLI)然而远程模式是通过Thrift连接一个分离的HiveServer2进程。从Hive 0.1.4版本开始,Beeline已经被HiveServer2使用,它也会为它执行的查询从HiveServer2打印日志信息到STDERR。远程HiveServer2模式是Hive产品使用的推荐模式,它更加安全并且不需要直接为用户对HDFS/metastore进行赋权。
在远程模式中HiveServer2只接受认证的Thrift 连接请求甚至在HTTP模式中也一样,信息主体班号Thrift payload
Beeline 样例
% bin/beeline Hive version 0.11.0-SNAPSHOT by Apache beeline> !connect jdbc:hive2://localhost:10000 scott tiger !connect jdbc:hive2://localhost:10000 scott tiger Connecting to jdbc:hive2://localhost:10000 Connected to: Hive (version 0.10.0) Driver: Hive (version 0.10.0-SNAPSHOT) Transaction isolation: TRANSACTION_REPEATABLE_READ 0: jdbc:hive2://localhost:10000> show tables; show tables; +-------------------+ | tab_name | +-------------------+ | primitives | | src | | src1 | | src_json | | src_sequencefile | | src_thrift | | srcbucket | | srcbucket2 | | srcpart | +-------------------+ 9 rows selected (1.079 seconds)
你也可以在命令行上指定连接参数。这意味着你能够从你的UNIX Shell history中发现连接时使用的命令。
% beeline -u jdbc:hive2://localhost:10000/default -n scott -w password_file Hive version 0.11.0-SNAPSHOT by Apache Connecting to jdbc:hive2://localhost:10000/default
Beeline with NoSASL connection
如果你喜欢通过NOSASL模式建立连接,你必须明确的指定认证模式。:
% bin/beeline beeline> !connect jdbc:hive2://<host>:<port>/<db>;auth=noSasl hiveuser pass
Beeline Commands
Command |
Description |
---|---|
!<SQLLine command> |
SQLLine命令清单请访问http://sqlline.sourceforge.net/ 样例:使用 |
!delimiter | 设置在Beeline中写查询的界定符。允许使用多字符界定符,但是引号,斜杠和--是不允许的。默认是分号; 用例: Version: 3.0.0 (HIVE-10865) |
Beeline Hive Commands
当使用HiveJDBC驱动时Hvie 自带的命令(和Hive CLI 命令行)也能在Beeline中运行,.
使用分号";"来结束命令,脚本中可以用"--"作为前缀来标识命令。
命令 |
描述 |
---|---|
reset |
重设配置为默认值。 |
set <key>=<value> |
为特定的配置变量(key)设置值。 |
set |
打印一个被用户或者Hive重写的配置变量清单。 |
set -v |
打印所有的Hadoop和Hive的配置变量。 |
add FILE[S] <filepath> <filepath>* |
增加一个或者多个文件,jar包或者压缩包到分布式缓存的资源列表中。查阅Hive Resources获取更多信息。 |
add FILE[S] <ivyurl> <ivyurl>* add JAR[S] <ivyurl> <ivyurl>* add ARCHIVE[S] <ivyurl> <ivyurl>* |
自Hive 1.2.0起,增加一个或者多个文件,jar包或者压缩包到分布式缓存的资源列表中使用类似ivy://group:module:version?query_string的lvy URL。查阅Hive Resources获取更多信息。 |
list FILE[S] |
列出已经增加到分布式缓存的资源。查阅Hive Resources获取更多信息(As of Hive 0.14.0: HIVE-7592)。 |
list FILE[S] <filepath>* |
检查是否给定的资源已经被添加到分布式缓存中。查阅Hive Resources获取更多信息。 |
delete FILE[S] <filepath>* |
移除分布式缓存中的一些资源。 |
delete FILE[S] <ivyurl> <ivyurl>* delete JAR[S] <ivyurl> <ivyurl>* delete ARCHIVE[S] <ivyurl> <ivyurl>* |
自Hive 1.2.0起,移除通过<ivyurl> 添加到分布式缓存中的资源。查阅Hive Resources获取更多信息。 |
reload | 从Hive 0.14.0起,通过配置参数hive.reloadable.aux.jars.path(不需要重启HiveServer2)指定路径使HiveServer2 感知到任意jar包的变化。这里的变化包括增加,删除,或者更新jar包。 |
dfs <dfs command> |
通过Hive shell执行一个dfs命令。 |
<query string> |
执行一个Hive查询语句并且输出标准输出。 |
Beeline 命令行选项
Beeline CLI支持以下这些命令行选项:
选项 |
描述 |
---|---|
-u <database URL> |
用于JDBC URL连接。 用例: |
-r |
重新连接到最近使用过的URL(如果用户有预先使过的用的,用!connect生成URL,用 用例: Version: 2.1.0 (HIVE-13670) |
-n <username> |
连接时使用的用户名。 用例: |
-p <password> |
连接时使用的密码。 用例: 可选的密码模式: 从Hive 2.2.0开始参数-p选项是可选的。 用例 : beeline -p [valid_password] 如果密码不是在-p之后提供的,Beeline将在初始化连接时提示输入密码。当密码提供后Beeline会用它来初始化连接而不提示。 |
-d <driver class> |
配置使用的驱动类 用例: |
-e <query> |
应该执行的查询。查询语句两端用单引号和双引号。这个选项被使用多次。 用例: 支持运行复杂的SQL语句,在一个语句中通过使用分号分隔。 (HIVE-9877) |
-f <file> | 需要被执行的脚本文件。 用例: Version: 0.12.0 (HIVE-4268) |
-i (or) --init <file or files> | 初始化需要的初始文件。 用例: 单个文件: Version: 0.14.0 (HIVE-6561) 多个文件: Version: 2.1.0 (HIVE-11336) |
-w (or) --password-file <password file> | 从文件中读取密码。 Version: 1.2.0 (HIVE-7175) |
-a (or) --authType <auth type> | jdbc的认证类型是一个身份认证属性。 Version: 0.13.0 (HIVE-5155) |
--property-file <file> | 读取配置属性的文件 用例: Version: 2.2.0 (HIVE-13964) |
--hiveconf property=value | 为给定的配置属性赋值。 在hive.conf.restricted.list列表中的属性不能通过hiveconf的方式重置。 (see Restricted List and Whitelist). 用例: Version: 0.13.0 (HIVE-6173) |
--hivevar name=value | Hive的变量名和变量值。这是一个Hive指定的设置,在这变量能够在会话级别被设置和被Hive命令和查询引用。 用例: |
--color=[true/false] | 控制颜色是否被用来展示。默认是false 用例: (不支持分隔的值输出方式。See HIVE-9770) |
--showHeader=[true/false] | 展示列名是否在查询结果中。默认是true。 用例: |
--headerInterval=ROWS | 当输出为表格时,重新显示列头时他们之间的间隔,用行数计算。默认值为100 用例: (不支持分隔的值输出方式。See HIVE-9770) |
--fastConnect=[true/false] | 连接时,跳过为HiveQL语法的tab键自动补全功能而构建所有表和列的清单,默认为true不构建该列表。 用例: |
--autoCommit=[true/false] | 允许或者禁止自动事务执行。默认是false 用例: |
--verbose=[true/false] | 展示冗长的报错信息和调试信息(true)或者不展示(false),默认是false 用例: |
--showWarnings=[true/false] | Default is false.连接时,在执行任意HiveQL命令后展示警告信息。默认是false。 用例: |
--showDbInPrompt=[true/false] | 在提示符里面展示当前数据库名字。默认是false。 用例: Version: 2.2.0 (HIVE-14123) |
--showNestedErrs=[true/false] | 展示内部错误,默认是false。 用例: |
--numberFormat=[pattern] | 用一个小数格式的模板来格式化数字。 用例: |
--force=[true/false] | 出错后继续运行脚本(true),或者不运行(false)。默认是false。 用例: |
--maxWidth=MAXWIDTH | 当输出格式是表格时,在截断数据前展示的最大宽度。默认是查询时的终端的当前宽度,然后回到80。 用例: |
--maxColumnWidth=MAXCOLWIDTH | 当输出是表格时,最大列宽,Hive 2.2.0以后默认是50,之前的版本是15。 用例: |
--silent=[true/false] | 是(true)否(false)减少展示的信息量。它也会停止展示HiveServer2(Hive 0.14及之后的版本)的查询和命令(Hive 1.2.0及之后的版本)日志信息,默认是false。 用例: |
--autosave=[true/false] | 自动保存参数选择(true)或者不保存(false)。默认是false。 用例: |
--outputformat=[table/vertical/csv/tsv/dsv/csv2/tsv2] | 结果展示的模式。默认是表格。查阅下方的Separated-Value Output Formats获取更多信息和推荐选项。 用例: 版本号: dsv/csv2/tsv2 added in 0.14.0 (HIVE-8615) |
--truncateTable=[true/false] | 如果是true,那么当表格超出终端显示宽度时,截断表格的列在终端上展示。 版本号: 0.14.0 (HIVE-6928) |
--delimiterForDSV= DELIMITER | 用于输出格式中划分值的界定符。默认是‘|’ 版本号: 0.14.0 (HIVE-7390) |
--isolation=LEVEL | 设置事务隔离级别为TRANSACTION_READ_COMMITTED或者TRANSACTION_SERIALIZABLE. 用例: |
--nullemptystring=[true/false] | 使用历史的打印空字符null的形式(true)还是使用当前打印空值的方式(false),默认是false。 用例: Version: 0.13.0 (HIVE-4485) |
--incremental=[true/false] |
从Hive 2.3版本往后默认是true,在它之前是默认为false。当设置为false时,为了最佳的展示列宽,完整的结果集会在展示之前被收集然后缓存起来。当设置为true时,结果集一旦被抓取到就会立即展示, 为了在展示列的填充额外消耗更少的延迟和内存。当你在客户端遭遇一个内存溢出时,推荐设置 |
--incrementalBufferRows=NUMROWS | 当打印行到标准输出时,保存在缓存中的行数,默认是1000。只有当 用例: Version: 2.3.0 (HIVE-14170) |
--maxHistoryRows=NUMROWS | 存储Beeline 历史记录的最大行数。 Version: 2.3.0 (HIVE-15166) |
--delimiter=; | 设置Beeline的查询语句分隔符。允许用多个字符的分隔符,但是引号,斜杠和--是不允许的,默认是分号; 用例: Version: 3.0.0 (HIVE-10865) |
--convertBinaryArrayToString=[true/false] | 展示二进制列数据为字符串或者位矩阵。
用例:
Version: 3.0.0 (HIVE-14786) |
--help |
展示一个帮助信息。 用例: |
输出格式
在Beeline中,结果可以被展示位多种格式。格式可以在 outputformat
参数中设置。
下面是支持的输出格式:
- table
- vertical
- xmlattr
- xmlelements
- separated-value formats (csv, tsv, csv2, tsv2, dsv)
table
结果会被展示位一个表格。结果中行对应表中的一行,每行使用分隔符将不同列的取值分开。这是默认的格式
vertical
结果集中的每行被展示位一个Key-value格式的块,其中key是列名。
xmlattr
结果被展示为一个XML文件的格式,其中每行结果对应XML中的元素。结果中一行的取值对应结果元素中不同属性,每个属性的名字对应列名。
xmlelements
结果被展示为一个XML格式,其中每行就是XML中的一个元素“result”。每行的取值就是其子元素。
Separated-Value Output Formats
一行的取值被不同的分隔符分开。
有五种 separated-value 输出格式可用:csv, tsv, csv2, tsv2 and dsv.
csv2, tsv2, dsv
从 Hive 0.14 开始引入的SV输出格式包括:dsv,csv2和tsv2。
这三格式只是数据cell之间使用了不同的分隔符,csv2使用的是逗号,tsv2使用的是tab空格,dsv是可配置的。
对于dsv格式,分隔符可以通过用参数 delimiterForDSV
进行设置,默认是 '|'。
这里是支持单个字符的分隔符的。
Quoting in csv2, tsv2 and dsv Formats
如果引号没被废弃,一个值包含特殊符号(例如分隔符或者双引号)或者跨越多行需要用双引号包含起来。
内含双引号是通过一个前置双引号进行转义。
可以通过设置系统变量 disable.quoting.for.sv
为true来禁用引号。
如果引号被禁用, 那么双引号不用来包围值(甚至他们包含特殊字符)和内嵌式双引号是无法避免的。
默认引号是禁用的。
csv, tsv
csv,tsv是两种不同的格式只是值之间的分隔符不同而已,csv是逗号,tsv是tab空格。
数值总是被单引号包围,即使引号通过系统变量sable.quoting.for.sv
被禁用了。
这些输出格式无法避免内含单引号的情况。
请注意这些格式都是被弃用的,只是为维护向后的兼容性。
HiveServer2 日志
从Hive 0.14.0开始,HiveServer2操作日志是可以通过Beeline客户端获得的。以下参数可以配置日志:
- hive.server2.logging.operation.enabled
- hive.server2.logging.operation.log.location
- hive.server2.logging.operation.verbose (Hive 0.14 to 1.1)
- hive.server2.logging.operation.level (Hive 1.2 onward)
HIVE-11488 (Hive 2.0.0) 增加了对HiveServer2日志文件的日志查询ID和会话ID的支持。启用它,可以编辑、增加%X{queryId} 和 %X{sessionId} 到日志配置文件的格式模式字符串.
取消查询
如果有一个查询正在运行,同时用户输入了 CTRL+C
在Beeline shell界面, 那么Beeline进程将会尝试取消查询并且关闭到HiveServer2的Socket连接。这个行为只有当设置 hive.server2.close.session.on.disconnect
为 true
才会被启用。从Hive 2.2.0 (HIVE-15626)开始Beeline不再推出命令行窗口当用户输出了 CTRL+C
取消了当前正在运行的查询。 如果用户想要退出命令行窗口,用户需要在查询被取消后再按一次CTRL+C
。然而,没有正在运行的查询时,第一次按的 CTRL+C
将会退出Beeline 窗口。这个行为类似于Hive CLI对CTRL+C的处理方式。
!quit
是推荐的退出Beeline窗口的命令
终端脚本里的后台查询
Beeline能够在不连接批处理终端的情况下使用nohup和disown命令自动运行脚本。
一些版本的Beeline客户端可能需要一个工作区来支持nohup命令很好的将进程放进后台运行而不停止它。See HIVE-11717, HIVE-6758.
以下的环境变量可以被更新:
export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Djline.terminal=jline.UnsupportedTerminal"
|
使用nohup和&将会把进程放进后台并允许终端断开连接而Beeline进程持续运行。
nohup beeline --silent=true --showHeader=true --outputformat=dsv -f query.hql </dev/null > /tmp/output.log 2> /tmp/error.log &
|
JDBC
Hive HiveServer2 有一个JDBC驱动。它支持嵌入式的和远程连接HiveServer2。远程HiveServer2模式是推荐模式,它更加安全而且不需要直接的HDFS或者元数据的用户使用权限。
连接 URLs
连接 URL 格式
HiveServer2 URL 是一个类似下面语法的字符串:
jdbc:hive2://<host1>:<port1>,<host2>:<port2>/dbName;initFile=<file>;sess_var_list?hive_conf_list#hive_var_list
where
<host1>:<port1>,<host2>:<port2>
是一个服务实例或者一个用逗号分隔的服务实例列表(动态服务发现启用)。如果为空,将会使用嵌入的服务器。dbName
初始化数据库的名称。- <file> 脚本文件的路径 (Hive 2.2.0 and later). 这里的脚本是SQL脚本,它将会在连接建立后被执行。此参数可以为空。
sess_var_list
是一个以分号分隔的列表,列表里面是会话变量的key=value对 (e.g.,user=foo;password=bar
).hive_conf_list
是一个以分号分隔的列表,列表里面是当前会话的Hive配置变量的key=value对。hive_var_list
是一个以分号分隔的列表,列表里面是当前会话的Hive变量的key=value对。