Beeline – Command Line Shell

本页描述HiveServer2支持的不同客户端。 HiveServer2 的其他文档包括:

Version

在 Hive 版本 0.11 中引入。参见HIVE-2935

HiveServer2 支持与 HiveServer2 一起使用的命令 ShellBeeline。这是一个基于 SQLLine CLI(http://sqlline.sourceforge.net/)的 JDBC 客户端。 SQLLine 有详细的documentation,它也适用于 Beeline。

使用 Beeline 替代 Hive CLI 的实现

Beeline Shell 在嵌入式模式和远程模式下均可工作。在嵌入式模式下,它运行嵌入式 Hive(类似于Hive CLI),而远程模式用于通过 Thrift 连接到单独的 HiveServer2 进程。从Hive 0.14开始,当 Beeline 与 HiveServer2 一起使用时,它还会打印 HiveServer2 的日志消息,以查询执行到 STDERR 的查询。建议将远程 HiveServer2 模式用于生产环境,因为它更安全并且不需要为用户授予直接 HDFS /元存储访问权限。

Warning

在远程模式下,HiveServer2 仅接受有效的 Thrift 调用-即使在 HTTP 模式下,消息正文也包含 Thrift 有效负载。

Beeline Example

% 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 历史 Logging 找到带有连接字符串的命令。

% 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> !connectjdbc:hive2://<host>:<port>/<db>;auth=noSasl hiveuser pass

Beeline Commands

CommandDescription
!<SQLLine command>可在http://sqlline.sourceforge.net/获得的 SQLLine 命令列表。


示例:!quit退出 BeelineClient 端。
|!delimiter |设置用 Beeline 编写的查询的分隔符。允许使用多字符定界符,但不允许使用引号,斜杠和-。默认为;
用法:!delimiter $$
版本:3.0.0(HIVE-10865)|

Beeline Properties

PropertyDescription
fetchsize使用标准 JDBC,您可以指定在每次查询数据库往返时获取的行数,该数量称为获取大小。

在 Beeline 中设置获取大小会覆盖 JDBC 驱动程序的默认获取大小,并影响在当前会话中执行的后续语句。
值-1 指示 Beeline 使用 JDBC 驱动程序的默认访存大小(默认)
每个语句的值都将零或更大的值传递给 JDBC 驱动程序
任何其他负值都将引发异常
用法:!set fetchsize 200
版本:4.0.0(HIVE-22853)

Beeline Hive 命令

使用 Hive JDBC 驱动程序时,可以从 Beeline 运行 Hive 特定命令(与Hive CLI 命令相同)。

使用“ ;”(分号)终止命令。脚本中的 Comments 可以使用“ --”前缀指定。

CommandDescription
reset将配置重置为默认值。
reset <key>将特定配置变量(键)的值重置为默认值。


注意: 如果您拼写错误的变量名,则 Beeline 将不会显示错误。
| set<key> =<value> |设置特定配置变量(键)的值。
注意: 如果您拼写错误的变量名,则 Beeline 将不会显示错误。
| set |打印由用户或 Hive 覆盖的配置变量列表。
| set -v |打印所有 Hadoop 和 Hive 配置变量。
|添加文件[S]<filepath><filepath> *
添加 JAR [S]<filepath><filepath> *
添加 ARCHIVE [S]<filepath><filepath> * |将一个或多个文件,jar 或 Files 添加到分布式缓存中的资源列表中。有关更多信息,请参见Hive Resources
|添加文件[S]<ivyurl><ivyurl> *
添加 JAR [S]<ivyurl><ivyurl> *
添加 ARCHIVE [S]<ivyurl><ivyurl> * |从Hive 1.2.0开始,使用 ivy:// group:module:version 形式的Ivy URL 向分布式缓存中的资源列表添加一个或多个文件,jar 或存档。请求参数。有关更多信息,请参见Hive Resources
|list FILE[S]
list JAR[S]
list ARCHIVE [S] |列出已经添加到分布式缓存的资源。有关更多信息,请参见Hive Resources。 (从 Hive 0.14.0 开始:HIVE-7592)。
|列出文件[S]<filepath> *
列出 JAR [S]<filepath> *
list ARCHIVE [S]<filepath> * |检查给定资源是否已经添加到分布式缓存中。有关更多信息,请参见Hive Resources
|删除文件[S]<filepath> *
删除 JAR [S]<filepath> *
|删除 ARCHIVE [S]<filepath> * |从分布式缓存中删除资源。
|删除文件[S]<ivyurl><ivyurl> *
删除 JAR [S]<ivyurl><ivyurl> *
delete ARCHIVE [S]<ivyurl><ivyurl> * |从Hive 1.2.0开始,从分布式缓存中删除使用\ 添加的资源。有关更多信息,请参见Hive Resources
| reload |从Hive 0.14.0开始,使 HiveServer2 知道配置参数hive.reloadable.aux.jars.path指定的路径中的任何 jar 变化(无需重新启动 HiveServer2)。更改可以是添加,删除或更新 jar 文件。
| dfs<dfs command> |执行 dfs 命令。
|<query string> |执行 Hive 查询并将结果打印到标准输出中。

Beeline 命令选项

Beeline CLI 支持以下命令行选项:

OptionDescription
-u *<database URL> *要连接的 JDBC URL。如果需要,参数值中的特殊字符应使用 URL 编码进行编码。

用法:beeline -u * db_URL *
-rReconnect代表上次使用的 URL(如果用户以前使用!connect代表 URL,而!save代表 beeline.properties 文件)。
用法:beeline -r
版本:2.1.0(HIVE-13670)
-n *<username> *连接的用户名。
用法:beeline -n 有效用户
-p *<password> *连接密码。
用法:beeline -p 有效密码
可选密码模式:
从 Hive 2.2.0(HIVE-13589)开始,-p 选项的参数是可选的。
用法:beeline -p [valid_password]
如果未提供密码,则-p Beeline 将在启动连接时提示您 Importing 密码。当提供密码时,Beeline 使用它来启动连接而不提示。
-d *<driver class> *要使用的驱动程序类。
用法:beeline -d * driver_class *
-e *<query> *应执行的查询。双引号或单引号引起来的查询字符串。可以多次指定此选项。
用法:beeline -e " * query_string
支持在单个
query_string *中运行多个用分号分隔的 SQL 语句:1.2.0(HIVE-9877)
错误修复(空指针异常):0.13.0(HIVE-5765)
错误修复(不支持--headerInterval):0.14.0(HIVE-7647)
错误修复(在后台运行-e):1.3.0 和 2.0.0(HIVE-6758); workaround available适用于早期版本
-f *<file> *应执行的脚本文件。
用法:beeline -f 文件路径
版本:0.12.0(HIVE-4268)
注意:如果脚本包含选项卡,则在 0.12.0 版中查询编译会失败。此错误已在版本 0.13.0(HIVE-6359)中修复。
错误修复(在后台运行-f):1.3.0 和 2.0.0(HIVE-6758); workaround available适用于早期版本
-i (或) -init <file or files>用于初始化的初始化文件
用法:beeline -i /tmp/initfile
Single file:
版本:0.14.0(HIVE-6561)
Multiple files:
版本:2.1.0(HIVE-11336)
-w (或) -password-file <password file>从中读取密码的密码文件。
版本:1.2.0(HIVE-7175)
-a (或) -authType <auth type>作为 auth 属性传递给 jdbc 的身份验证类型
版本:0.13.0(HIVE-5155)
-属性文件 <file>用于从中读取配置属性的文件
用法:beeline --property-file /tmp/a
版本:2.2.0(HIVE-13964)
-hiveconf *属性 = value *为给定的配置属性使用* value *。 hive.conf.restricted.list 中列出的属性无法使用 hiveconf 重置(请参阅限制名单和白名单)。
用法:beeline --hiveconf * prop1 * = * value1 *
版本:0.13.0(HIVE-6173)
-hivevar *名称 = value *配置单元变量名称和值。这是特定于 Hive 的设置,其中可以在会话级别设置变量,并在 Hive 命令或查询中引用。
用法:beeline --hivevar * var1 * = * value1 *
-color = [true/false]控制是否使用颜色进行显示。默认为 false。
用法:beeline --color=true
(不支持分隔值输出格式.请参见HIVE-9770)
-showHeader = [true/false]在查询结果中显示列名称(是)还是不(false)。默认为 true。
用法:beeline --showHeader=false
-headerInterval = ROWS当表为 outputformat 时,重新显示列标题的间隔(以行数为单位)。默认值为 100.
用法:beeline --headerInterval=50
(不支持分隔值输出格式.请参见HIVE-9770)
-fastConnect = [true/false]连接时,跳过为 HiveQL 语句的制表符完成而构建所有表和列的列表(true)或构建列表(false)。默认为 true。
用法:beeline --fastConnect=false
-autoCommit = [true/false]启用/禁用自动事务提交。默认为 false。
用法:beeline --autoCommit=true
-verbose = [true/false]显示详细错误消息和调试信息(true)或不显示(false)。默认为 false。
用法:beeline --verbose=true
-showWarnings = [true/false]显示发出任何 HiveQL 命令后在连接上报告的警告。默认为 false。
用法:beeline --showWarnings=true
**** - showDbInPrompt = **** [true/false]在提示中显示当前数据库名称。默认为 false。
用法:beeline --showDbInPrompt=true
版本:2.2.0(HIVE-14123)
-showNestedErrs = [true/false]显示嵌套错误。默认为 false。
用法:beeline --showNestedErrs=true
-numberFormat = [pattern]使用DecimalFormat模式设置数字格式。
用法:beeline --numberFormat="#,###,##0.00"
-force = [true/false]即使出现错误(true)还是不 continue(false),仍 continue 运行脚本。默认为 false。
用法:beeline--force=true
-maxWidth = MAXWIDTHoutputformat 为表时,在截断数据之前显示的最大宽度(以字符为单位)。默认是查询终端当前宽度,然后回落到 80.
用法:beeline --maxWidth=150
-maxColumnWidth = MAXCOLWIDTHoutputformat 为表格时的最大列宽(以字符为单位)。在 Hive 2.2.0 版(请参阅HIVE-14135)中,默认值为 50;在较早版本中,默认值为 15.
用法:beeline --maxColumnWidth=25
-silent = [true/false]减少显示的信息性消息的数量(真)或否(假)。它还停止显示来自 HiveServer2(Hive 0.14和更高版本)和 HiveQL 命令(Hive 1.2.0和更高版本)的查询日志消息。默认为 false。
用法:beeline --silent=true
-autosave = [true/false]自动保存首选项(true)或不自动保存(false)。默认为 false。
用法:beeline --autosave=true
-outputformat = [表格/垂直/ csv/tsv/dsv/csv2/tsv2]结果显示的格式化模式。默认为表格。有关推荐的 sv 选项的说明,请参见下面的HiveServer2Client 端#分隔值输出格式
用法:beeline --outputformat=tsv
版本:dsv/csv2/tsv2 已添加到 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
or TRANSACTION_SERIALIZABLE.
请参阅 Java Connection文档中的“字段详细信息”部分。
用法:beeline --isolation=TRANSACTION_SERIALIZABLE
-nullemptystring = [true/false]使用将 null 打印为空字符串(true)的历史行为,或使用将 null 打印为 NULL 的当前行为(false)。默认为 false。
用法:beeline --nullemptystring=false
版本:0.13.0(HIVE-4485)
-incremental = [true/false]从 Hive 2.3 起默认为true,然后默认为false .。当设置为false时,将在显示之前提取并缓冲整个结果集,从而产生最佳的显示列浆纱。当设置为true时,结果行将在获取时立即显示,从而以额外的显示列填充为代价,降低了 await 时间和内存使用量。如果在 Client 端遇到 OutOfMemory,则建议设置--incremental=true(由于获取的结果集大小太大)。
**** -incrementalBufferRows = **** NUMROWS在标准输出上打印行时要缓冲的行数,默认为 1000;默认值为 1000.仅适用于--incremental=true--outputformat=table
用法:beeline --incrementalBufferRows=1000
版本:2.3.0(HIVE-14170)
-maxHistoryRows = **** NUMROWS存储 Beeline 记录的最大行数。
版本:2.3.0(HIVE-15166)
-delimiter = ;设置用 Beeline 编写的查询的分隔符。允许使用多字符定界符,但不允许使用引号,斜杠和-。默认为;
用法:beeline --delimiter=$$
版本:3.0.0(HIVE-10865)
-convertBinaryArrayToString = [true/false]使用平台的默认字符集将二进制列数据显示为字符串。
默认行为(false)是使用以下命令显示二进制数据:Arrays.toString(byte[] columnValue)
版本:3.0.0(HIVE-14786)
使用 UTF-8 字符集将二进制列数据显示为字符串。
默认行为(false)是使用 Base64 编码显示二进制数据而无填充。
版本:4.0.0(HIVE-2 3856)
用法:beeline --convertBinaryArrayToString=true
-help显示使用情况消息。
用法:beeline --help

Output Formats

在 Beeline 中,结果可以不同的格式显示。可以使用outputformat选项设置格式模式。

支持以下输出格式:

table

结果显示在表格中。结果的一行对应于表中的一行,一行中的值显示在表中的单独列中。
这是默认的格式模式。

Example

查询结果* select id, value, comment from test_table *

+-----+---------+-----------------+
| id  |  value  |     comment     |
+-----+---------+-----------------+
| 1   | Value1  | Test comment 1  |
| 2   | Value2  | Test comment 2  |
| 3   | Value3  | Test comment 3  |
+-----+---------+-----------------+

vertical

结果的每一行以键值格式的块显示,其中键是列的名称。

Example

查询结果* select id, value, comment from test_table *

id       1
value    Value1
comment  Test comment 1

id       2
value    Value2
comment  Test comment 2

id       3
value    Value3
comment  Test comment 3

xmlattr

结果以 XML 格式显示,其中每一行都是 XML 中的“结果”元素。
在“结果”元素上,将行的值显示为属性。属性的名称是列的名称。

Example

查询结果* select id, value, comment from test_table *

<resultset>
  <result id="1" value="Value1" comment="Test comment 1"/>
  <result id="2" value="Value2" comment="Test comment 2"/>
  <result id="3" value="Value3" comment="Test comment 3"/>
</resultset>

xmlelements

结果以 XML 格式显示,其中每一行都是 XML 中的“结果”元素。行的值显示为结果元素的子元素。

Example

查询结果* select id, value, comment from test_table *

<resultset>
  <result>
    <id>1</id>
    <value>Value1</value>
    <comment>Test comment 1</comment>
  </result>
  <result>
    <id>2</id>
    <value>Value2</value>
    <comment>Test comment 2</comment>
  </result>
  <result>
    <id>3</id>
    <value>Value3</value>
    <comment>Test comment 3</comment>
  </result>
</resultset>

json

(Hive 4.0)结果以 JSON 格式显示,其中每一行都是 JSON 数组“ resultset”中的“ result”元素。

Example

查询结果*select `String`, `Int`, `Decimal`, `Bool`, `Null`, `Binary` from test_table*

{"resultset":[{"String":"aaa","Int":1,"Decimal":3.14,"Bool":true,"Null":null,"Binary":"SGVsbG8sIFdvcmxkIQ"},{"String":"bbb","Int":2,"Decimal":2.718,"Bool":false,"Null":null,"Binary":"RWFzdGVyCgllZ2cu"}]}

jsonfile

(Hive 4.0)结果以 JSON 格式显示,其中每一行都是一个不同的 JSON 对象。这与创建为 JSONFILE 格式的表的预期格式匹配。

Example

查询结果*select `String`, `Int`, `Decimal`, `Bool`, `Null`, `Binary` from test_table*

{"String":"aaa","Int":1,"Decimal":3.14,"Bool":true,"Null":null,"Binary":"SGVsbG8sIFdvcmxkIQ"}
{"String":"bbb","Int":2,"Decimal":2.718,"Bool":false,"Null":null,"Binary":"RWFzdGVyCgllZ2cu"}

分数值输出格式

行的值由不同的定界符分隔。
共有五种分隔值输出格式:csv,tsv,csv2,tsv2 和 dsv。

csv2,tsv2,dsv

Hive 0.14开始,提供了改进的 SV 输出格式,即 dsv,csv2 和 tsv2.
这三种格式的区别仅在于单元格之间的分隔符,对于 csv2 是逗号,对于 tsv2 是制表符,而对于 dsv 是可配置的。

对于 dsv 格式,可以使用delimiterForDSV选项设置定界符。默认分隔符为“ |”。
请注意,仅支持单个字符定界符。

Example

查询结果* select id, value, comment from test_table *

csv2

id,value,comment
1,Value1,Test comment 1
2,Value2,Test comment 2
3,Value3,Test comment 3

tsv2

id	value	comment
1	Value1	Test comment 1
2	Value2	Test comment 2
3	Value3	Test comment 3

dsv(定界符为|)

id|value|comment
1|Value1|Test comment 1
2|Value2|Test comment 2
3|Value3|Test comment 3
以 csv2,tsv2 和 dsv 格式报价

如果未禁用引号,则如果值包含特殊字符(例如定界符或双引号字符)或跨多行,则在值周围添加双引号。
嵌入式双引号与前面的双引号一起转义。

可以通过将disable.quoting.for.sv系统变量设置为 true 来禁用引用。
如果禁用了引号,则不会在值周围添加双引号(即使它们包含特殊字符),并且不会对嵌入的双引号进行转义。
默认情况下,引用被禁用。

Example

查询结果* select id, value, comment from test_table *

csv2,已启用引用

id,value,comment
1,"Value,1",Value contains comma
2,"Value""2",Value contains double quote
3,Value'3,Value contains single quote

csv2,引用已禁用

id,value,comment
1,Value,1,Value contains comma
2,Value"2,Value contains double quote
3,Value'3,Value contains single quote
csv, tsv

这两种格式的区别仅在于值之间的定界符,对于 csv 是逗号,对于 tsv 是制表符。
即使使用disable.quoting.for.sv系统变量禁用了引号,这些值也始终用单引号引起来。
这些输出格式不会转义嵌入的单引号。
请注意,不建议使用这些输出格式,仅保留它们是为了向后兼容。

Example

查询结果* select id, value, comment from test_table *

csv

'id','value','comment'
'1','Value1','Test comment 1'
'2','Value2','Test comment 2'
'3','Value3','Test comment 3'

tsv

'id'	'value'	'comment'
'1'	'Value1'	'Test comment 1'
'2'	'Value2'	'Test comment 2'
'3'	'Value3'	'Test comment 3'

HiveServer2 Logging

从 Hive 0.14.0 开始,HiveServer2 操作日志可用于 BeelineClient 端。这些参数配置日志记录:

HIVE-11488(Hive 2.0.0)向 HiveServer2 日志文件添加了对记录 queryId 和 sessionId 的支持。要启用该功能,请将%X{queryId}和%X{sessionId}编辑/添加到日志记录配置文件的模式格式字符串中。

取消查询

当用户在 Beeline Shell 上 ImportingCTRL+C时,如果同时存在一个查询,则 Beeline 尝试在关闭与 HiveServer2 的套接字连接时取消该查询。仅当hive.server2.close.session.on.disconnect设置为true时,才启用此行为。从 Hive 2.2.0(HIVE-15626)开始,当用户 ImportingCTRL+C时正在取消正在运行的查询时,Beeline 不会退出命令行 Shell。如果用户希望退出 Shell,则可以在取消查询时第二次 ImportingCTRL+C。但是,如果当前没有查询在运行,则第一个CTRL+C将退出 Beeline shell。此行为类似于 Hive CLI 处理CTRL+C的方式。

建议使用!quit退出 Beeline shell。

终端脚本中的后台查询

可以使用诸如* nohup disown *之类的命令从终端上断开 Beeline 的运行以进行批处理和自动化脚本。

某些版本的 BeelineClient 端可能需要一种解决方法,以允许* nohup *命令将 Beeline 进程正确地置于后台而不停止它。参见HIVE-11717H IVE-6758

可以更新以下环境变量:

export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Djline.terminal=jline.UnsupportedTerminal"

使用 nohangup(nohup)和&符(&)进行运行会将进程置于后台,并允许终端断开连接,同时保持 Beeline 进程运行。

nohup beeline --silent=true --showHeader=true --outputformat=dsv -f query.hql </dev/null > /tmp/output.log 2> /tmp/error.log &

JDBC

HiveServer2 具有 JDBC 驱动程序。它支持对 HiveServer2 的嵌入式和远程访问。建议将远程 HiveServer2 模式用于生产环境,因为它更安全并且不需要为用户授予直接 HDFS /元存储访问权限。

Connection 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及更高版本)。该脚本文件使用 SQL 语句编写,将在连接后自动执行。此选项可以为空。

    • sess_var_list *是用分号分隔的会话变量(例如user=foo;password=bar)的键=值对列表。
    • hive_conf_list *是此会话的 Hive 配置变量的键=值对的分号分隔列表
    • hive_var_list *是此会话的 Hive 变量的键=值对的分号分隔列表。
  • sess_var_list, hive_conf_list, hive_var_list *参数值中的特殊字符应根据需要使用 URL 编码进行编码。

远程或嵌入式模式的连接 URL

JDBC 连接 URL 格式的前缀为jdbc:hive2://,而驱动程序类为org.apache.hive.jdbc.HiveDriver。请注意,这与旧的HiveServer不同。

  • 对于远程服务器,URL 格式为jdbc:hive2://<host>:<port>/<db>;initFile=<file>(HiveServer2 的默认端口为 10000)。

  • 对于嵌入式服务器,URL 格式为jdbc:hive2:///;initFile=<file>(无主机或端口)。

Hive 2.2.0和更高版本中提供initFile选项。

HiveServer2 以 HTTP 模式运行时的连接 URL

JDBC 连接 URL:jdbc:hive2://<host>:<port>/<db>;transportMode=http;httpPath=<http_endpoint>,其中:

  • <http_endpoint>是在hive-site.xml中配置的相应 HTTP 端点。默认值为cliservice

  • HTTP 传输模式的默认端口为 10001.

Versions earlier than 0.14

0.14之前的版本中,这些参数以前分别称为hive.server2.transport.modehive.server2.thrift.http.path,它们是* hive_conf_list 的一部分。不推荐使用这些版本,而推荐使用新版本(它们是 sess_var_list *的一部分),但现在仍可以 continue 使用。

HiveServer2 中启用 SSL 时的连接 URL

JDBC 连接 URL:jdbc:hive2://<host>:<port>/<db>;ssl=true;sslTrustStore=<trust_store_path>;trustStorePassword=<trust_store_password>,其中:

  • \ <trust_store_path>是 Client 端的信任库文件所在的路径。

  • \ <trust_store_password>是访问信任库的密码。

在 HTTP 模式下:jdbc:hive2://<host>:<port>/<db>;ssl=true;sslTrustStore=<trust_store_path>;trustStorePassword=<trust_store_password>;transportMode=http;httpPath=<http_endpoint>

对于低于 0.14 的版本,请参见上面的version note

启用 ZooKeeper 服务发现时的连接 URL

Hive 0.14.0(HIVE-7935)中引入的基于 ZooKeeper 的服务发现可实现 HiveServer2 的高可用性和滚动升级。需要使用指定\ 的 JDBC URL 来使用这些功能。

随着 Hive 2.0.0 和 1.3.0 的进一步更改(未发布,HIVE-11581),不需要指定任何其他配置参数,例如身份验证模式,传输模式或 SSL 参数,因为它们是从 ZooKeeper 条目以及主机名。

JDBC 连接 URL:jdbc:hive2://<zookeeper quorum>/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2

\ 与 HiveServer2 使用的 hive-site.xml/hivserver2-site.xml 中的 hive.zookeeper.quorum 配置参数的值相同。

可以通过以下方式在 URL 中提供查询所需的其他运行时参数,方法是像以前一样将其附加为?\ 。

JDBC 连接 URL:jdbc:hive2://<zookeeper quorum>/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2?tez.queue.name=hive1&hive.server2.thrift.resultset.serialize.in.tasks=true

命名连接 URL

从 Hive 2.1.0(HIVE-13670)开始,Beeline 现在还支持通过使用环境变量来命名 URL 连接字符串。如果您尝试对看起来不像 URL 的名称执行!connect,那么 Beeline 将尝试查看是否存在一个名为 BEELINE_URL_<name>的环境变量。例如,如果您指定!connect blue,它将查找 BEELINE_URL_BLUE 并使用它进行连接。这应该使系统 Management 员可以更轻松地为用户指定环境变量,并且用户不必每次都键入完整的 URL 进行连接。

Reconnecting

传统上,!reconnect一直在刷新已构建的连接。运行!close后,它无法进行全新连接。从 Hive 2.1.0(HIVE-13670)开始,Beeline 会记住在会话中成功连接到的最后一个 URL,即使运行!close后也可以重新连接。另外,如果用户执行!save,那么它将保存在 beeline.properties 文件中,该文件随后允许!reconnect在多个 Beeline 会话中连接到此保存的最后连接的 URL。这还允许从命令行使用beeline -r在启动时进行重新连接。

使用 hive-site.xml 自动连接到 HiveServer2

从 Hive 2.2.0(HIVE-14063)开始,Beeline 添加了对使用 classpath 中的 hive-site.xml 的支持,以基于 hive-site.xml 和其他用户配置文件中的配置属性自动生成连接 URL。并非所有 URL 属性都可以从 hive-site.xml 派生,因此,要使用此功能,用户必须创建一个名为“ beeline-hs2-connection.xml”的配置文件,该文件是 Hadoop XML 格式文件。该文件用于为连接 URL 提供用户特定的连接属性。 Beeline 在${user.home} /.beeline/(基于 Unix 的 os)或${user.home}\beeline \目录(对于 Windows)中查找此配置文件。如果在上述位置找不到文件,则 Beeline 会依次在${HIVE_CONF_DIR}位置和/ etc/hive/conf(在 Hive 2.2.0 中从/ etc/conf/hive 修复此位置的HIVE-16335)中查找该文件。找到文件后,Beeline 将 beeline-hs2-connection.xml 与 hive-site.xml 结合使用在 Classpath 中,以确定连接 URL。

beeline-hs2-connection.xml 中的 URL 连接属性必须具有前缀“ beeline.hs2.connection”。然后是 URL 属性名称。例如,为了提供属性 ssl,beeline-hs2-connection.xml 中的属性键应为“ beeline.hs2.connection.ssl”。下面的示例 beeline.hs2.connection.xml 提供了 Beeline 连接 URL 的用户和密码值。在这种情况下,其余的属性(例如 HS2 主机名和端口信息,Kerberos 配置属性,SSL 属性,传输模式等)是使用 Classpath 中的 hive-site.xml 来选择的。如果密码为空,则应删除 beeline.hs2.connection.password 属性。在大多数情况下,beeline-hs2-connection.xml 中的以下配置值以及 classpath 中正确的 hive-site.xml 应该足以构建与 HiveServer2 的连接。

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
 <name>beeline.hs2.connection.user</name>
 <value>hive</value>
</property>
<property>
 <name>beeline.hs2.connection.password</name>
 <value>hive</value>
</property>
</configuration>

如果在 beeline-hs2-connection.xml 和 hive-site.xml 中都存在属性,则从 beeline-hs2-connection.xml 派生的属性值优先。例如,在下面的 beeline-hs2-connection.xml 文件中,提供了在启用 Kerberos 的环境中 Beeline 连接的主体值。在这种情况下,就连接 URL 而言,beeline.hs2.connection.principal 的属性值将覆盖 hive-site.xml 中的 HiveConf.ConfVars.HIVE_SERVER2_KERBEROS_PRINCIPAL 的值。

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
 <name>beeline.hs2.connection.hosts</name>
 <value>localhost:10000</value>
</property>
<property>
 <name>beeline.hs2.connection.principal</name>
 <value>hive/[email protected]</value>
</property>
</configuration>

对于属性 beeline.hs2.connection.hosts,beeline.hs2.connection.hiveconf 和 beeline.hs2.connection.hivevar,属性值是逗号分隔的值列表。例如,以下 beeline-hs2-connection.xml 以逗号分隔的格式提供 hiveconf 和 hivevar 值。

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
 <name>beeline.hs2.connection.user</name>
 <value>hive</value>
</property>
<property>
 <name>beeline.hs2.connection.hiveconf</name>
 <value>hive.cli.print.current.db=true, hive.cli.print.header=true</value>
</property>
<property>
 <name>beeline.hs2.connection.hivevar</name>
 <value>testVarName1=value1, testVarName2=value2</value>
</property>
</configuration>

当存在 beeline-hs2-connection.xml 且未提供其他任何参数时,Beeline 自动连接到使用配置文件生成的 URL。提供连接参数(-u,-n 或-p)时,Beeline 使用它们,而不使用 beeline-hs2-connection.xml 自动连接。删除或重命名 beeline-hs2-connection.xml 将禁用此功能。

使用 beeline-site.xml 自动连接到 HiveServer2

除了上述使用 hive-site.xml 和 beeline-hs2-connection.xml 来获取从 Beeline 连接到 HiveServer2 时要使用的 JDBC 连接 URL 的方法之外,用户还可以选择将 beeline-site.xml 添加到其 Classpath 中,在 beeline-site.xml 中,她可以指定完整的 JDBC URL。用户还可以指定多个命名的 URL,并使用beeline -c <named_url>连接到特定的 URL。当同一群集具有以不同配置运行的多个 HiveServer2 实例时,此功能特别有用。命名的 URL 之一被视为默认 URL(当用户仅键入beeline时将使用的 URL)。下面显示了一个示例 beeline-site.xml:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
  <name>beeline.hs2.jdbc.url.tcpUrl</name>
  <value>jdbc:hive2://localhost:10000/default;user=hive;password=hive</value>
</property>

<property>
  <name>beeline.hs2.jdbc.url.httpUrl</name>
  <value>jdbc:hive2://localhost:10000/default;user=hive;password=hive;transportMode=http;httpPath=cliservice</value>
</property>

<property>
  <name>beeline.hs2.jdbc.url.default</name>
  <value>tcpUrl</value>
</property>
</configuration>

在上面的示例中,只需键入beeline即可打开与jdbc:hive2://localhost:10000/default;user=hive;password=hive的新 JDBC 连接。如果在 Classpath 中同时存在 beeline-site.xml 和 beeline-hs2-connection.xml,则通过将 beeline-hs2-connection.xml 中指定的属性应用于从 beeline-site 派生的 URL 属性之上来创建最终 URL。 .xml。作为示例,请考虑以下 beeline-hs2-connection.xml:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
 <name>beeline.hs2.connection.user</name>
 <value>hive</value>
</property>
<property>
  <name>beeline.hs2.connection.password</name>
  <value>hive</value>
</property>
</configuration>

考虑以下 beeline-site.xml:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
  <name>beeline.hs2.jdbc.url.tcpUrl</name>
  <value>jdbc:hive2://localhost:10000/default</value>
</property>

<property>
  <name>beeline.hs2.jdbc.url.httpUrl</name>
  <value>jdbc:hive2://localhost:10000/default;transportMode=http;httpPath=cliservice</value>
</property>

<property>
  <name>beeline.hs2.jdbc.url.default</name>
  <value>tcpUrl</value>
</property>
</configuration>

在上面的示例中,只需键入beeline即可打开与j dbc:hive2://localhost:10000/default;user=hive;password=hive的新 JDBC 连接。当用户键入beeline -c httpUrl时,将打开到jdbc:hive2://localhost:10000/default;transportMode=http;httpPath=cliservice;user=hive;password=hive的连接。 ``

Using JDBC

您可以使用 JDBC 访问以关系数据库或其他表格格式存储的数据。

  • 加载 HiveServer2 JDBC 驱动程序。从1.2.0开始,应用程序不再需要使用 Class.forName()显式加载 JDBC 驱动程序。

For example:

Class.forName("org.apache.hive.jdbc.HiveDriver");
  • 通过使用 JDBC 驱动程序创建Connection对象来连接到数据库。

For example:

Connection cnct = DriverManager.getConnection("jdbc:hive2://<host>:<port>", "<user>", "<password>");

默认值<port>为 10000.在非安全配置中,请指定<user>作为查询的运行方式。在非安全模式下,<password>字段值将被忽略。

Connection cnct = DriverManager.getConnection("jdbc:hive2://<host>:<port>", "<user>", "");

在 Kerberos 安全模式下,用户信息基于 Kerberos 凭据。

  • 通过创建Statement对象并使用其executeQuery()方法将 SQL 提交到数据库。

For example:

Statement stmt = cnct.createStatement();
ResultSet rset = stmt.executeQuery("SELECT foo FROM bar");
  • 如有必要,处理结果集。

下面的示例代码中说明了这些步骤。

JDBCClient 端示例代码

import java.sql.SQLException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;

public class HiveJdbcClient {
  private static String driverName = "org.apache.hive.jdbc.HiveDriver";

  /**
   * @param args
   * @throws SQLException
   */
  public static void main(String[] args) throws SQLException {
      try {
      Class.forName(driverName);
    } catch (ClassNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      System.exit(1);
    }
    //replace "hive" here with the name of the user the queries should run as
    Connection con = DriverManager.getConnection("jdbc:hive2://localhost:10000/default", "hive", "");
    Statement stmt = con.createStatement();
    String tableName = "testHiveDriverTable";
    stmt.execute("drop table if exists " + tableName);
    stmt.execute("create table " + tableName + " (key int, value string)");
    // show tables
    String sql = "show tables '" + tableName + "'";
    System.out.println("Running: " + sql);
    ResultSet res = stmt.executeQuery(sql);
    if (res.next()) {
      System.out.println(res.getString(1));
    }
       // describe table
    sql = "describe " + tableName;
    System.out.println("Running: " + sql);
    res = stmt.executeQuery(sql);
    while (res.next()) {
      System.out.println(res.getString(1) + "\t" + res.getString(2));
    }

    // load data into table
    // NOTE: filepath has to be local to the hive server
    // NOTE: /tmp/a.txt is a ctrl-A separated file with two fields per line
    String filepath = "/tmp/a.txt";
    sql = "load data local inpath '" + filepath + "' into table " + tableName;
    System.out.println("Running: " + sql);
    stmt.execute(sql);

    // select * query
    sql = "select * from " + tableName;
    System.out.println("Running: " + sql);
    res = stmt.executeQuery(sql);
    while (res.next()) {
      System.out.println(String.valueOf(res.getInt(1)) + "\t" + res.getString(2));
    }

    // regular hive query
    sql = "select count(1) from " + tableName;
    System.out.println("Running: " + sql);
    res = stmt.executeQuery(sql);
    while (res.next()) {
      System.out.println(res.getString(1));
    }
  }
}

运行 JDBC 示例代码

# Then on the command-line
$ javac HiveJdbcClient.java

# To run the program using remote hiveserver in non-kerberos mode, we need the following jars in the classpath
# from hive/build/dist/lib
#     hive-jdbc*.jar
#     hive-service*.jar
#     libfb303-0.9.0.jar
# 	  libthrift-0.9.0.jar
# 	  log4j-1.2.16.jar
# 	  slf4j-api-1.6.1.jar
#	  slf4j-log4j12-1.6.1.jar
# 	  commons-logging-1.0.4.jar
#
#
# To run the program using kerberos secure mode, we need the following jars in the classpath 
#     hive-exec*.jar
#     commons-configuration-1.6.jar (This is not needed with Hadoop 2.6.x and later).
#  and from hadoop
#     hadoop-core*.jar (use hadoop-common*.jar for Hadoop 2.x)
#
# To run the program in embedded mode, we need the following additional jars in the classpath
# from hive/build/dist/lib
#     hive-exec*.jar
#     hive-metastore*.jar
#     antlr-runtime-3.0.1.jar
#     derby.jar
#     jdo2-api-2.1.jar
#     jpox-core-1.2.2.jar
#     jpox-rdbms-1.2.2.jar
# and from hadoop/build
#     hadoop-core*.jar
# as well as hive/build/dist/conf, any HIVE_AUX_JARS_PATH set,
# and hadoop jars necessary to run MR jobs (eg lzo codec)

$ java -cp $CLASSPATH HiveJdbcClient

或者,您可以运行以下 bash 脚本,该脚本将为数据文件添加种子并在调用 Client 端之前构建您的 Classpath。该脚本还添加了在嵌入式模式下使用 HiveServer2 所需的所有其他 jar。

#!/bin/bash
HADOOP_HOME=/your/path/to/hadoop
HIVE_HOME=/your/path/to/hive

echo -e '1\x01foo' > /tmp/a.txt
echo -e '2\x01bar' >> /tmp/a.txt

HADOOP_CORE=$(ls $HADOOP_HOME/hadoop-core*.jar)
CLASSPATH=.:$HIVE_HOME/conf:$(hadoop classpath)

for i in ${HIVE_HOME}/lib/*.jar ; do
    CLASSPATH=$CLASSPATH:$i
done

java -cp $CLASSPATH HiveJdbcClient

JDBC 数据类型

下表列出了为 HiveServer2 JDBC 实现的数据类型。

Hive TypeJava TypeSpecification
TINYINTbyte有符号或无符号 1 字节整数
SMALLINTshort有符号 2 字节整数
INTint有符号 4 字节整数
BIGINTlong有符号 8 字节整数
FLOATdouble单精度数字(大约 7 位数字)
DOUBLEdouble双精度数字(大约 15 位数字)
DECIMALjava.math.BigDecimal固定精度的十进制值
BOOLEANboolean一位(0 或 1)
STRINGString字符串或变长字符串
TIMESTAMPjava.sql.Timestamp日期和时间值
BINARYStringbinary data
Complex Types
ARRAY字符串– json 编码一种数据类型的值
MAP字符串– json 编码key-value pairs
STRUCT字符串– json 编码structured values

安全集群的 JDBCClient 端设置

通过 Kerberos 身份验证连接到 HiveServer2 时,URL 格式为:

jdbc:hive2://<host>:<port>/<db>;principal=<Server_Principal_of_HiveServer2>

Client 端在连接之前需要在票证缓存中具有有效的 Kerberos 票证。

注意 :如果端口号后没有“ /”,则 jdbc 驱动程序将不解析主机名,并最终以嵌入式模式运行 HS2.因此,如果要指定主机名,请确保在端口号后有一个“ /”或“ /<dbname>”。

对于 LDAP,CUSTOM 或 PAM 身份验证,Client 端需要将有效的用户名和密码传递给 JDBC 连接 API。

To use sasl.qop, add the following to the sessionconf part of your HiveJDBC hive connection string, e.g.
jdbc:hive://hostname/dbname;sasl.qop=auth-int

有关更多信息,请参见设置 HiveServer2

多用户方案和以编程方式登录 Kerberos KDC

在当前使用 Kerberos 的方法中,在连接之前,需要在票证缓存中具有有效的 Kerberos 票证。这需要静态登录(使用 kinit,键选项卡或票证缓存),并且每个 Client 端限制一个 Kerberos 用户。这些限制限制了在中间件系统和其他多用户方案中以及 Client 端要以编程方式登录 Kerberos KDC 的方案中的使用。

减轻多用户方案问题的一种方法是使用安全代理用户(请参见HIVE-5155)。从 Hive 0.13.0 开始,对安全代理用户的支持包含两个组件:

  • 特权 Hadoop 用户的直接代理访问(HIVE-5155)。这使特权用户可以在连接期间直接指定备用会话用户。如果连接的用户具有 Hadoop 级别的特权来模拟请求的用户 ID,则 HiveServer2 将以该请求的用户身份运行会话。

  • 基于代理令牌的 Oozie(OOZIE-1457)连接。这是 Hadoop 生态系统组件的通用机制。

Hadoop 生态系统中的代理用户特权与用户名和主机相关联。即,特权可用于来自某些主机的某些用户。如果从一台授权(受祝福的)计算机进行连接,并且稍后需要从另一台未受祝福的计算机进行连接,则应使用 Hive 中的委托令牌。您可以从受祝福的计算机上获得委托令牌,并使用来自非受祝福的计算机上的委托令牌进行连接。主要用例是 Oozie,它从服务器计算机获取委托令牌,然后从 Hadoop 任务节点获取另一个连接。

如果仅从一台受祝福的计算机上以特权用户身份构建 JDBC 连接,则直接代理访问是更简单的方法。您可以使用 hive.server2.proxy.user = *<user> *参数来传递您需要在 JDBC URL 中模拟的用户。

查看ProxyAuthTest.java中的示例。

从 0.13.0 开始,已支持 HiveServer2 二进制传输模式hive.server2.transport.mode的委派令牌。在HIVE-13169中添加了对具有 HTTP 传输模式的此功能的支持,该支持应该是 Hive 2.1.0 的一部分。

另一种方法是使用预先认证的 Kerberos 主题(请参阅HIVE-6486)。在此方法中,从 Hive 0.13.0 开始,Hive JDBCClient 端可以使用预先认证的主题对 HiveServer2 进行认证。这使中间件系统能够以运行 Client 端的用户身份运行查询。

对预认证的主题使用 Kerberos

要使用预先认证的主题,您需要进行以下更改。

  • 除了常规的 Hive JDBC jar 外,还将 hive-exec * .jar 添加到 Classpath 中(不需要 commons-configuration-1.6.jar 和 hadoop-core * .jar)。

  • 除了具有“主要” URL 属性外,还添加 auth = kerberos 和 kerberosAuthType = fromSubject JDBC URL 属性。

  • 在 Subject.doAs()中打开连接。

以下代码段说明了用法(有关完整的test case,请参阅HIVE-6486):

static Connection getConnection( Subject signedOnUserSubject ) throws Exception{
       Connection conn = (Connection) Subject.doAs(signedOnUserSubject, new PrivilegedExceptionAction<Object>()
           {
               public Object run()
               {
                       Connection con = null;
                       String JDBC_DB_URL = "jdbc:hive2://HiveHost:10000/default;" ||
                                              "principal=hive/[email protected];" || 
                                              "kerberosAuthType=fromSubject";
                       try {
                               Class.forName(JDBC_DRIVER);
                               con =  DriverManager.getConnection(JDBC_DB_URL);
                       } catch (SQLException e) {
                               e.printStackTrace();
                       } catch (ClassNotFoundException e) {
                               e.printStackTrace();
                       }
                       return con;
               }
           });
       return conn;
}

JDBC 提取大小

当 Client 端需要更多行时,向 JDBC 驱动程序提供有关应从数据库中获取的行数的提示。可以通过 JDBC 连接字符串指定用于每个语句的默认值。随后,可以使用 JDBC API 根据语句覆盖此默认值。如果在 JDBC 连接字符串中未指定任何值,则作为会话启动操作的一部分,从 HiveServer2 实例中检索默认的提取大小。

jdbc:hive2://<host>:<port>/<db>;fetchsize=<value>

Hive Version 4.0

Hive JDBC 驱动程序将从其已连接的 HiveServer2 实例接收首选的访存大小。此值是通过* hive.server2.thrift.resultset.default.fetch.size *配置在服务器上指定的。

JDBC 的获取大小只是一个提示,服务器将尝试遵守 Client 端请求的获取大小,尽管有一些限制。 HiveServer2 会将所有请求的上限设置为* hive.server2.thrift.resultset.max.fetch.size *配置值指定的最大值,而不考虑 Client 端请求的获取大小。

尽管较大的提取大小可能会限制 Client 端和服务器之间的往返次数,但这样做却以 Client 端和服务器上额外的内存需求为代价。

缺省的 JDBC 提取大小值可以通过 JDBC API 的每个语句覆盖:

  • 设置为 0 值指示驱动程序使用服务器首选的获取大小值

  • 设置一个大于零的值将指示驱动程序获取那么多行,尽管服务器可能会限制返回的实际行数

  • 如果未在 JDBC 驱动程序的语句中明确设置获取大小值,则使用驱动程序的默认值

  • 如果在 JDBC 连接字符串中指定了获取大小值,则这是默认值

  • 如果 JDBC 连接字符串中缺少获取大小值,则将服务器的首选获取大小用作默认值

Python Client

github提供了 PythonClient 端驱动程序。有关安装说明,请参见设置 HiveServer2:PythonClient 端驱动程序

Ruby Client

github 上的https://github.com/forward3d/rbhive提供了 RubyClient 端驱动程序。

与 SQuirrel SQL Client 集成

  • SQuirrel SQL 网站下载,安装和启动 SQuirrel SQL Client。

  • 选择“驱动程序->新驱动程序...”以注册与 HiveServer2 一起使用的 Hive JDBC 驱动程序。

  • Importing 驱动程序名称和示例 URL:

Name: Hive
   Example URL: jdbc:hive2://localhost:10000/default
  • 选择“附加 Classpath->添加”以从本地 Hive 和 Hadoop 发行版添加以下 jar。
HIVE_HOME/lib/hive-jdbc-*-standalone.jar
   HADOOP_HOME/share/hadoop/common/hadoop-common-*.jar

Version information

Hive 0.14.0 及更高版本(HIVE-538)中使用 Hive JDBC 独立 jar。对于以前的 Hive 版本,请改用HIVE_HOME/build/dist/lib/*.jar

hadoop 常见的 jar 用于 Hadoop 2.0;对于早期版本的 Hadoop,请改用HADOOP_HOME/hadoop-*-core.jar

  • 选择“列出驱动程序”。这将导致 SQuirrel 为 JDBC 驱动程序解析 jar 文件,可能需要花费几秒钟的时间。在“类名”Importing 框中,选择用于 HiveServer2 的 Hive 驱动程序:
org.apache.hive.jdbc.HiveDriver
  • 单击“确定”完成驱动程序注册。

  • 选择“别名->添加别名...”为您的 HiveServer2 实例创建一个连接别名。

  • 在“名称”Importing 框中为连接别名命名。

    • 从“驱动程序”下拉列表中选择 Hive 驱动程序。

    • 根据需要修改示例 URL,以指向您的 HiveServer2 实例。

    • Importing“用户名”和“密码”,然后单击“确定”以保存连接别名。

    • 要连接到 HiveServer2,请双击 Hive 别名,然后单击“连接”。

构建连接后,您会在日志控制台中看到错误,并且可能会收到警告,说明驱动程序与 JDBC 3.0 不兼容。这些警报是由于 JDBC 元数据 API 尚未实现的部分引起的,可以放心地忽略它们。要测试连接,请在控制台中 Importing* SHOW TABLES *,然后单击“运行”图标。

另请注意,在运行查询时,尚不支持“取消”按钮。

与 SQL Developer 集成

使用 JDBC 连接可以与 Oracle SQLDeveloper 集成。

https://community.hortonworks.com/articles/1887/connect-oracle-sql-developer-to-hive.html

{#HiveServer2Clients-IntegrationwithDbVisSoftware'sDbVisualizer}与 DbVisSoftware 的 DbVisualizer 集成

  • 免费下载,安装和启动 DbVisualizer,或从https://www.dbvis.com/购买 DbVisualizer Pro。

  • 按照github上的说明进行操作。

与其他工具集成的高级功能

Version 1.2.0 and later

此选项从Hive 1.2.0开始可用。

HIVE-9709引入了对 JDBC 驱动程序的支持,以启用 cookie 重播。默认情况下,此功能是打开的,因此可以将传入的 Cookie 发送回服务器进行身份验证。

启用后的 JDBC 连接 URL 应该如下所示:

jdbc:hive2://<host>:<port>/<db>?transportMode=http;httpPath=<http_endpoint>;cookieAuth=true;cookieName=<cookie_name>

  • cookieAuth 默认设置为true

  • cookieName:如果任何传入的 cookie 的密钥与 cookieName 的值匹配,则 JDBC 驱动程序将不会向服务器发送任何登录凭据/ Kerberos 票证。Client 端只会将 cookie 单独发送回服务器进行身份验证。 cookieName 的默认值为 hive.server2.auth(这是 HiveServer2 cookie 名称)。

  • 要关闭 cookie 重放,必须在 JDBC URL 中使用 cookieAuth = false。

  • 重要提示: 作为HIVE-9709的一部分,我们将 Hive 的 Apache http-client 和 http-core 组件升级到 4.4. 为了避免此 HttpComponents 的升级版本与系统中可能存在的其他任何版本(例如 Apache Hadoop 2.6 提供的版本使用 http-client 和 http-core 组件版本 4.2.5)之间发生冲突,Client 端期望以这样的方式设置 CLASSPATH:与 Beeline 相关的 jar 出现在 HADOOP lib jar 之前。这是通过在使用 hive-jdbc 之前设置 HADOOP_USER_CLASSPATH_FIRST = true 来实现的。实际上,在 bin/beeline.sh 中,我们做到了!

在 HTTP 模式下使用 2 路 SSL

Version 1.2.0 and later

此选项从Hive 1.2.0开始可用。

HIVE-10447使 JDBC 驱动程序在 HTTP 模式下支持 2 路 SSL。请注意,HiveServer2 当前不支持 2 路 SSL。因此,当存在中间服务器(例如 Knox)要求 Client 端支持 2 路 SSL 时,此功能非常方便。

JDBC 连接 URL:

jdbc:hive2://<host>:<port>/<db>;ssl=true;twoWay=true; sslTrustStore=<trust_store_path>;trustStorePassword=<trust_store_password>;sslKeyStore=<key_store_path>;keyStorePassword=<key_store_password> ?transportMode=http;httpPath=<http_endpoint>

  • *<trust_store_path> *是 Client 端的信任库文件所在的路径。这是必填的非空字段。

  • *<trust_store_password> *是访问信任库的密码。

  • *<key_store_path> *是 Client 端的密钥库文件所在的路径。这是必填的非空字段。

  • *<key_store_password> *是访问密钥库的密码。

对于低于 0.14 的版本,请参见上面的version note

通过 JDBC 驱动程序传递 HTTPHeaders 键/值对

Version 1.2.0 and later

此选项从Hive 1.2.0开始可用。

HIVE-10339引入了一个选项,供 Client 端提供可发送到基础服务器(Hive 1.2.0 和更高版本)的自定义 HTTPHeaders。

JDBC 连接 URL:

jdbc:hive2://<host>:<port>/<db>;transportMode=http;httpPath=<http_endpoint>;http.header.<name1>=<value1>;http.header.<name2>=<value2>

指定上述 URL 后,Beeline 将调用基础请求以添加设置为*<name1> <value1> 的 HTTPHeaders 以及另一个设置为<name2> <value2> *的 HTTPHeaders。当最终用户需要通过 Beeline 将 HTTPHeaders 中的身份发送到中间服务器(例如http.header.USERNAME=<value1>;http.header.PASSWORD=<value2>)到 Knox 等中间服务器时,这很有用。

对于低于 0.14 的版本,请参见上面的version note

在 Hive 版本 3.0.0 中,HIVE-18447引入了一个选项,供 Client 端提供可发送到底层服务器的自定义 HTTP cookie。某些身份验证机制(例如“单点登录”)需要能够通过 JDBC 驱动程序将 cookie 传递给某些中间身份验证服务(例如 Knox)。

JDBC 连接 URL:

jdbc:hive2://<host>:<port>/<db>;transportMode=http;httpPath=<http_endpoint>;http.cookie.<name1>=<value1>;http.cookie.<name2>=<value2>

指定上述 URL 后,Beeline 将调用基础请求以在请求 Headers 中添加 HTTP cookie,并将其设置为*<name1> * = *<value1> <name2> * = *<value2> *。