本文为自己翻译的译文,原文地址:https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients
这个页面描述了HiveServer2支持的不同客户端。其它的HiveServer2文档包含:
Version
Introduced in Hive version 0.11. See HIVE-2935.
HiveServer2 支持一个命令行shellBeeline。它是一种基于SQLline CLI 的JDBC客户端(http://sqlline.sourceforge.net/)。SQLLine的细节文档连接,它同样也适用于Beeline。
使用Beeline代替Hive CLI实现
同时支持嵌入模式和远程模式。在嵌入模式中,它运行一个嵌入的Hive(类似旧的Hive CLI)然而远程模式是通过Thrift连接一个分离的HiveServer2进程。从Hive 0.1.4版本开始,Beeline已经被HiveServer2使用,它也会为它执行的查询从HiveServer2打印日志信息到STDERR。远程HiveServer2模式是Hive产品使用的推荐模式,它更加安全并且不需要直接为用户对HDFS/metastore进行赋权。
在远程模式中HiveServer2只接受认证的Thrift 连接请求甚至在HTTP模式中也一样,信息主体班号Thrift payload
% 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://: / ;auth=noSasl hiveuser pass
Command |
Description |
---|---|
! |
SQLLine命令清单请访问http://sqlline.sourceforge.net/ 样例:使用 |
!delimiter | 设置在Beeline中写查询的界定符。允许使用多字符界定符,但是引号,斜杠和--是不允许的。默认是分号; 用例: Version: 3.0.0 (HIVE-10865) |
当使用HiveJDBC驱动时Hvie 自带的命令(和Hive CLI 命令行)也能在Beeline中运行,.
使用分号";"来结束命令,脚本中可以用"--"作为前缀来标识命令。
命令 |
描述 |
---|---|
reset |
重设配置为默认值。 |
set |
为特定的配置变量(key)设置值。 |
set |
打印一个被用户或者Hive重写的配置变量清单。 |
set -v |
打印所有的Hadoop和Hive的配置变量。 |
add FILE[S] |
增加一个或者多个文件,jar包或者压缩包到分布式缓存的资源列表中。查阅Hive Resources获取更多信息。 |
add FILE[S] add JAR[S] add ARCHIVE[S] |
自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] |
检查是否给定的资源已经被添加到分布式缓存中。查阅Hive Resources获取更多信息。 |
delete FILE[S] |
移除分布式缓存中的一些资源。 |
delete FILE[S] delete JAR[S] delete ARCHIVE[S] |
自Hive 1.2.0起,移除通过 |
reload | 从Hive 0.14.0起,通过配置参数hive.reloadable.aux.jars.path(不需要重启HiveServer2)指定路径使HiveServer2 感知到任意jar包的变化。这里的变化包括增加,删除,或者更新jar包。 |
dfs |
通过Hive shell执行一个dfs命令。 |
执行一个Hive查询语句并且输出标准输出。 |
Beeline CLI支持以下这些命令行选项:
选项 |
描述 |
---|---|
-u |
用于JDBC URL连接。 用例: |
-r |
重新连接到最近使用过的URL(如果用户有预先使过的用的,用!connect生成URL,用 用例: Version: 2.1.0 (HIVE-13670) |
-n |
连接时使用的用户名。 用例: |
-p |
连接时使用的密码。 用例: 可选的密码模式: 从Hive 2.2.0开始参数-p选项是可选的。 用例 : beeline -p [valid_password] 如果密码不是在-p之后提供的,Beeline将在初始化连接时提示输入密码。当密码提供后Beeline会用它来初始化连接而不提示。 |
-d |
配置使用的驱动类 用例: |
-e |
应该执行的查询。查询语句两端用单引号和双引号。这个选项被使用多次。 用例: 支持运行复杂的SQL语句,在一个语句中通过使用分号分隔。 (HIVE-9877) |
-f |
需要被执行的脚本文件。 用例: Version: 0.12.0 (HIVE-4268) |
-i (or) --init |
初始化需要的初始文件。 用例: 单个文件: Version: 0.14.0 (HIVE-6561) 多个文件: Version: 2.1.0 (HIVE-11336) |
-w (or) --password-file |
从文件中读取密码。 Version: 1.2.0 (HIVE-7175) |
-a (or) --authType |
jdbc的认证类型是一个身份认证属性。 Version: 0.13.0 (HIVE-5155) |
--property-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
参数中设置。
下面是支持的输出格式:
结果会被展示位一个表格。结果中行对应表中的一行,每行使用分隔符将不同列的取值分开。这是默认的格式
结果集中的每行被展示位一个Key-value格式的块,其中key是列名。
结果被展示为一个XML文件的格式,其中每行结果对应XML中的元素。结果中一行的取值对应结果元素中不同属性,每个属性的名字对应列名。
结果被展示为一个XML格式,其中每行就是XML中的一个元素“result”。每行的取值就是其子元素。
一行的取值被不同的分隔符分开。
有五种 separated-value 输出格式可用:csv, tsv, csv2, tsv2 and dsv.
从 Hive 0.14 开始引入的SV输出格式包括:dsv,csv2和tsv2。
这三格式只是数据cell之间使用了不同的分隔符,csv2使用的是逗号,tsv2使用的是tab空格,dsv是可配置的。
对于dsv格式,分隔符可以通过用参数 delimiterForDSV
进行设置,默认是 '|'。
这里是支持单个字符的分隔符的。
如果引号没被废弃,一个值包含特殊符号(例如分隔符或者双引号)或者跨越多行需要用双引号包含起来。
内含双引号是通过一个前置双引号进行转义。
可以通过设置系统变量 disable.quoting.for.sv
为true来禁用引号。
如果引号被禁用, 那么双引号不用来包围值(甚至他们包含特殊字符)和内嵌式双引号是无法避免的。
默认引号是禁用的。
csv,tsv是两种不同的格式只是值之间的分隔符不同而已,csv是逗号,tsv是tab空格。
数值总是被单引号包围,即使引号通过系统变量sable.quoting.for.sv
被禁用了。
这些输出格式无法避免内含单引号的情况。
请注意这些格式都是被弃用的,只是为维护向后的兼容性。
从Hive 0.14.0开始,HiveServer2操作日志是可以通过Beeline客户端获得的。以下参数可以配置日志:
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 /tmp/output.log 2> /tmp/error.log &
|
Hive HiveServer2 有一个JDBC驱动。它支持嵌入式的和远程连接HiveServer2。远程HiveServer2模式是推荐模式,它更加安全而且不需要直接的HDFS或者元数据的用户使用权限。
HiveServer2 URL 是一个类似下面语法的字符串:
jdbc:hive2://
where
: , :
是一个服务实例或者一个用逗号分隔的服务实例列表(动态服务发现启用)。如果为空,将会使用嵌入的服务器。dbName
初始化数据库的名称。sess_var_list
是一个以分号分隔的列表,列表里面是会话变量的key=value对 (e.g., user=foo;password=bar
).hive_conf_list
是一个以分号分隔的列表,列表里面是当前会话的Hive配置变量的key=value对。hive_var_list
是一个以分号分隔的列表,列表里面是当前会话的Hive变量的key=value对。JDBC连接URL格式的前缀是 jdbc:hive2://
而驱动是 org.apache.hive.jdbc.HiveDriver
。注意这里不同于旧的HiveServer。
jdbc:hive2://:/;initFile=
(默认的HiveServer2端口 is 10000).jdbc:hive2:///;initFile=
(没有主机或者端口号).参数 initFile
是 Hive 2.2.0 和之后版本所支持的。
JDBC 连接 URL: jdbc:hive2://
, where:
是相应的HTTP 端的配置在hive-site.xml. 默认值是cliservice。
Versions earlier than 0.14
In versions earlier than 0.14 these parameters used to be called hive.server2.transport.mode
and hive.server2.thrift.http.path
respectively and were part of the hive_conf_list. These versions have been deprecated in favour of the new versions (which are part of the sess_var_list) but continue to work for now.
JDBC 连接 URL: jdbc:hive2://
, where:
HTTP 模式: jdbc:hive2://
.
For versions earlier than 0.14, see the version note above.
以ZooKeeper为基础的服务发现是在Hive 0.14.0版本启用高可用后引进的并且随着HiveServer2进行了升级。一个JDBC URL指定
在Hive 2.0.0 and 1.3.0 (unreleased, HIVE-11581)将来的变化中, 没有额外的配置参数例如认证模式,传输模式,或者SSL参数需要被指定,而它们会从ZooKeeper伴随主机名进入中恢复。
JDBC 连接URL: jdbc:hive2://
.
查询需要的额外运行参数能够被提供,它通过下面的URL提供,通过在后面追加一个前置?
从Hive 2.1.0 (HIVE-13670)起, Beeline 现在也支持通过环境变量命名的URL连接字符串。如果你尝试对一个看起来不像URL的名字执行 !connect
, 那么Beeline将会尝试查看是否有一个环境变量叫BEELINE_URL_!connect blue
, 它将会查找BEELINE_URL_BLUE然后用它来建立连接。这样听起来更加方便系统管理员为用户指定环境变量,用户也不需要每次连接都键入全部URL。
习惯上,!reconnect
努力刷新一个已经建立的连接。它不会在!close
被执行后再运行。从Hive 2.1.0 (HIVE-13670)起, Beeline 会记住上一次成功连接的URL, 甚至在一次 !close
被执行后仍然可以重新建立连接。另外,如果用户执行一次 !save
, 那么这个会保存在beeline.properties 文件中, 这也允许了!reconnect
通过复杂的Beeline会话重新连接这个被保存的最后连接URL。这也允许使用 beeline -r
在启动时的命令行窗口中执行重新连接。.
从Hive 2.2.0 (HIVE-14063)起, BeeLine 增加了对使用存放在安装路径中的hive-site.xml生成一个基于hive配置文件和用户额外配置文件的连接URL。不是所有的URL配置都能够从hive-site.xml中得到,因此为了更好的使用这个特性,用户需要创建一个Hadoop xml格式的配置文件“beeline-hs2-connection.xml”。这个文件用来提供用户指定好的连接参数。BeeLine 会在${user.home}/.beeline/ (Unix based OS) 或者 ${user.home}\beeline\ (Windows环境)目录中查找该文件。如果上述路径中不存在该文件,Beeline会按照${HIVE_CONF_DIR} 和 /etc/hive/conf (Check HIVE-16335 which fixes this location from /etc/conf/hive in Hive 2.2.0) 这个顺序查找该文件。一旦文件被找到,Beeline 会结合beeline-hs2-connection.xml 和路径中hive-site.xml来决定 连接URL。
beeline-hs2-connection.xml中的连接属性必须有前缀“beeline.hs2.connection.”后面是url的属性名称。例如:为了提供属性ssl,beeline-hs2-connection.xml中的属性关键字应该是“beeline.hs2.connection.ssl”。 下方beeline.hs2.connection.xml的样例提供了Beeline连接URL的用户名和密码的值。在这个案例中剩下的例如HS2主机名和端口信息,kerberos配置属性,SSL属性,传输模式等会从路径里的hive-site.xml文件中获取。如果密码是空,beeline.hs2.connection.password 应该被删掉。在大部分案例中下面beeline-hs2-connection.xml的配置值 和路径中正确的hive-site.xml应该准备好来保证HiveServer2的连接。
|
为了防止参数在 beeline-hs2-connection.xml 和hive-site.xml中同时出现, 优先选用beeline-hs2-connection.xml中参数值。例如瞎忙的beeline-hs2-connection.xml file 提供了 在kerberos认证被启用的环境中BeeLine 的principal值。在这个案例中连接被建立时beeline.hs2.connection.principal的值覆盖hive-site.xml 中的HiveConf.ConfVars.HIVE_SERVER2_KERBEROS_PRINCIPAL 值。
10000
@domain
.com
|
以防beeline.hs2.connection.hosts, beeline.hs2.connection.hiveconf 和beeline.hs2.connection.hivevar 参数值是一个逗号分隔的列表。例如下面的beeline-hs2-connection.xml 以逗号分隔的格式提供了hiveconf 和hivevar 值清单。
true
, hive.cli.print.header=
true
|
当beeline-hs2-connection.xml 已经存在同时没有其他参数被提供,Beeline自动连接由配置文件生成的URL。当连接参数(-u, -n or -p)被提供,Beeline将使用它们而不是用beeline-hs2-connection.xml中的值来建立连接。去除或者重命名beeline-hs2-connection.xml禁用这个特性。
你可以通过JDBC的方式在一个关系型数据库或者其它表格型格式中使用数据存储。
加载HiveServer2 JDBC驱动。自1.2.0起应用不在需要使用Class.forName()明确的加载JDBC驱动程序。
例如:
Class.forName("org.apache.hive.jdbc.HiveDriver");
通过一个Connection对象用JDBC驱动连接数据库。
例如:
Connection cnct = DriverManager.getConnection("jdbc:hive2://: ", " ", " ");
默认
值是10000。不安全的配置方法中,指定一个运行时用的
,忽略
的取值。
Connection cnct = DriverManager.getConnection("jdbc:hive2://: ", " ", "");
Kerberos的认证安全模式中,用户信息是基于Kerberos的认证信息。
通过创建一个 Statement
对象提交SQL给数据库并且使用它的方法 executeQuery()。
样例:
Statement stmt = cnct.createStatement(); ResultSet rset = stmt.executeQuery("SELECT foo FROM bar");
步骤见下面的样例代码截图。
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
));
}
}
}
|
# 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脚本,它将在调用客户机之前生成数据文件并构建类路径。该脚本添加了在嵌入式模式中使用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
|
下表列出了用于HiveServer2 JDBC的数据类型。
Hive Type |
Java Type |
Specification |
---|---|---|
TINYINT |
byte |
signed or unsigned 1-byte integer |
SMALLINT |
short |
signed 2-byte integer |
INT |
int |
signed 4-byte integer |
BIGINT |
long |
signed 8-byte integer |
FLOAT |
double |
single-precision number (approximately 7 digits) |
DOUBLE |
double |
double-precision number (approximately 15 digits) |
DECIMAL |
java.math.BigDecimal |
fixed-precision decimal value |
BOOLEAN |
boolean |
a single bit (0 or 1) |
STRING |
String |
character string or variable-length character string |
TIMESTAMP |
java.sql.Timestamp |
date and time value |
BINARY |
String |
binary data |
Complex Types |
|
|
ARRAY |
String – json encoded |
values of one data type |
MAP |
String – json encoded |
key-value pairs |
STRUCT |
String – json encoded |
structured values |
当使用Kerberos身份验证连接到HiveServer2时,URL格式为:
jdbc:hive2://
客户端需要在连接之前在票据缓存中有一个有效的Kerberos票据。
注意:如果在端口号之后没有“/”,jdbc驱动程序不会解析主机名,并在嵌入式模式下运行HS2。因此,如果您指定一个主机名,请确保在端口号之后有一个“/”或“/在LDAP、定制或PAM身份验证的情况下,客户机需要将有效的用户名和密码传递给JDBC连接API。
To use sasl.qop, add the following to the sessionconf part of your Hive JDBC hive connection string, e.g.
jdbc:hive://hostname/dbname;sasl.qop=auth-int
有关更多信息,请参见Setting Up HiveServer2.
在当前使用Kerberos的方法中,您需要在连接之前在票据缓存中拥有一个有效的Kerberos票据。这需要一个静态登录(使用kinit、key tab或ticketcache)和每个客户端一个Kerberos用户的限制。在客户机希望以编程方式登录Kerberos KDC的场景中,这些限制条件限制了中间件系统和其他多用户场景的使用。
解决多用户场景问题的一种方法是使用安全代理用户(参见HIVE-5155)。从Hive 0.13.0开始,支持安全代理用户有两个组件:
另一种方法是使用预验证的Kerberos主体(参见 HIVE-6486)。在这个方法中,从Hive 0.13.0开始,Hive JDBC客户端可以使用预先验证的subject来验证它的HiveServer2。这使得中间件系统能够在用户运行客户端时运行查询。
要使用预认证的主题,您需要以下更改。
下面的代码片段说明了用法(一个完整的test case请参考HIVE-6486 ):
static
Connection getConnection( Subject signedOnUserSubject )
throws
Exception{
Connection conn = (Connection) Subject.doAs(signedOnUserSubject,
new
PrivilegedExceptionAction
{
public
Object run()
{
Connection con =
null
;
String JDBC_DB_URL =
"jdbc:hive2://HiveHost:10000/default;"
||
"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;
}
|
在github有一个可用的Python客户端。 查阅 Setting Up HiveServer2: Python Client Driver获取安装和使用信息。
Ruby客户端驱动在github上的地址是 https://github.com/forward3d/rbhive.
输入驱动名字和样例URL:
Name: Hive
Example URL: jdbc:hive2://localhost:10000/default
|
点击选择'Extra Class Path -> Add' 来增加你本地或者Hadoop分布式系统上的Jar包。
HIVE_HOME/lib/hive-jdbc-*-standalone.jar
HADOOP_HOME/share/hadoop/common/hadoop-common-*.jar
|
Version information
Hive JDBC standalone jars are used in Hive 0.14.0 onward (HIVE-538); for previous versions of Hive, use HIVE_HOME/build/dist/lib/*.jar
instead.
The hadoop-common jars are for Hadoop 2.0; for previous versions of Hadoop, use HADOOP_HOME/hadoop-*-core.jar
instead.
输入'List Drivers'. 这个将会使用SQuirrel列出你的JDBC驱动的jar包,这个过程可能需要数秒钟。在'Class Name'输入框选择HiveServer2的驱动:
org.apache.hive.jdbc.HiveDriver
|
点击'OK' 完成驱动注册。
当连接建立的时候,你可能会看到一些错误和警告不兼容JDBC 3.0信息在日志终端里面。这些警报是由于JDBC元数据API的尚未实现的部分,可以安全地忽略。 要测试连接,请在控制台中 SHOW TABLES 并单击run图标。
还要注意:当查询正在运行时,目前不知支持“Cancel”按钮。
使用JDBC连接Oracle SQLDeveloper是可用的。
https://community.hortonworks.com/articles/1887/connect-oracle-sql-developer-to-hive.html
Version 1.2.0 and later
This option is available starting in Hive 1.2.0.
HIVE-9709 引入了对JDBC驱动程序的支持,以支持cookie重放。默认是打开这个功能,因此传入的cookie可以被发送回服务器进行身份验证。
启用时的JDBC连接URL应该如下所示:
jdbc:hive2://
Version 1.2.0 and later
This option is available starting in Hive 1.2.0.
HIVE-10447使JDBC驱动程序能够在HTTP模式中支持双向SSL。请注意,HiveServer2目前不支持双向SSL。因此,当有一个中间服务器(如Knox)需要客户端支持2路SSL时,这个特性就很方便了。
JDBC连接URL:
jdbc:hive2://
sslTrustStore=
?transportMode=http;httpPath=
对于较早于0.14的版本,请参阅上面的版本说明。
Version 1.2.0 and later
This option is available starting in Hive 1.2.0.
HIVE-10339 为客户端提供了一个选项,用于提供可以发送到底层服务器的自定义HTTP头(Hive 1.2.0和更高版本)。
JDBC 连接 URL:
jdbc:hive2://
当指定上述URL时,Beeline将调用底层请求,将HTTP头集设置为
For versions earlier than 0.14, see the version note above.
在Hive版本3.0.0中HIVE-18447为客户提供了一个选项,用于提供可以发送到底层服务器的自定义HTTP cookie。一些身份验证机制(如单点登录)需要能够将cookie传递给一些中间身份验证服务,比如通过JDBC驱动程序的Knox。
JDBC连接URL:
jdbc:hive2://
当指定上述URL时,Beeline将调用底层请求,在请求头中添加HTTP cookie,并将其设置为
Hive语言手册目录