[Hive] 02 - 基本操作之【命令行和CLIs】
环境宿主机:Windows 10 64_bit虚拟机:VMware pro 12CentOS 7.5 64_bitHadoop-2.6.5MariaDB-5.5.60Hive 1.2.2SecureCRT 7.3目录正文0、命令行任何在Hive交互式shell窗口【以后简称为:Hive shell窗口】 (Hive CLI和Beeline)、终端执行的...
环境
- 宿主机:Windows 10 64_bit
- 虚拟机:VMware pro 12
- CentOS 7.5 64_bit
- Hadoop-2.6.5
- MariaDB-5.5.60
- Hive 1.2.2
- SecureCRT 7.3
目录
1、Hive-命令行界面(Command Line Interface,CLI):旧的Hive CLI
----1.0 变量与属性之4个命名空间:hivevar、hiveconf、system、env
----1.2 hive -f
选项:从脚本文件中执行Hive查询
----1.3 hive -i
选项:在进入交互模式之前执行脚本
----1.4 Hive CLI其它:自动补全、查看操作历史命令、执行hadoop dfs命令、注释
----1.5、Hive资源
----2.0 Beeline CLI
----2.1 HiveServer2 JDBC:多种URLs、数据类型、安全集群的JDBC客户端设置
----2.2 Python客户端
----2.3 Ruby客户端
----2.4 与其它客户端集成:SQuirrel SQL Client 、SQL Developer、DbVisSoftware's DbVisualizer
----2.5 与其它工具集成的高级特性
正文
0、命令行
任何在Hive交互式shell窗口【以后简称为:Hive shell窗口】 (Hive CLI和Beeline)、终端执行的命令都可以叫命令行。总之,在提示符后面输入的都叫命令行。
在终端执行hive安装包下/bin/hive
shell脚本(将$HIVE_HOME/bin
加入到环境变量PATH
中后,只需在shell提示符中输入hive [相应的参数等等]
,就能在shell环境中直接使用hive命令行)。目的是提供Hive服务的通道,示例:
[root@master apache-hive-1.2.2-bin]# hive --help
Usage ./hive <parameters> --service serviceName <service parameters>
Service List: beeline cli help hiveburninclient hiveserver2 hiveserver hwi jar lineage metastore metatool orcfiledump rcfilecat schemaTool version
Parameters parsed:
--auxpath : Auxillary jars
--config : Hive configuration directory
--service : Starts specific service/component. cli is default
Parameters used:
HADOOP_HOME or HADOOP_PREFIX : Hadoop install directory
HIVE_OPT : Hive options
For help on a particular service:
./hive --service serviceName --help
Debug help: ./hive --debug --help
[root@master apache-hive-1.2.2-bin]# hive --version
Hive 1.2.2
Subversion git://vgumashta.local/Users/vgumashta/Documents/workspace/hive-git -r 395368fc6478c7e2a1e84a5a2a8aac45e4399a9e
Compiled by vgumashta on Sun Apr 2 13:12:26 PDT 2017
From source with checksum bd47834e727562aab36c8282f8161030
- 上述
help
描述了使用Hive服务的格式、命令选项 - 其中,
Service List
提供了Hive服务列表,包括CLI(命令行界面,用户在此定义表、执行查询等。如果用户没有指定其他服务,cli将是默认的服务,即命令行界面,进去了Hive shell窗口)、beeline、help、hwi、metastore、version等 --config
参数,允许用户覆盖$HIVE_HOME/conf
中默认的属性配置,而指向一个新的配置文件目录
命令行是非SQL语法,是和Hive交互的最常用方式。如:设置一个属性、增加一个资源等操作,这些命令可以在终端、Hive shell窗口、CLI或Beeline中通过HiveQL脚本直接使用。常用命令有:
命令 | 描述 |
---|---|
quit 或exit | 退出交互式Hive shell窗口 |
set <key>=<value> | 为一个特定的配置变量设置一个值。变量名拼写错了也不会报错 |
set | 给变量赋值,或打印一个被用户或Hive重写了的配置变量列表。单独一个set 会打印出命名空间hivevar、hiveconf、system、env中所有的变量 |
set -v | 打印所有的Hadoop和Hive的配置变量。除4个命名空间的变量外,还会打印Hadoop中所定义的所有属性,比如:控制HDFS、MapReduce的属性 |
reset | 重新设置配置项为默认值。任何在命令行被使用set 命令或者-hiveonf 的参数将会恢复默认值。 |
! <command> | 在Hive中执行一个Shell命令,如:!pwd; 打印当前所在工作目录 |
<query string> | 执行Hive查询并且打印标准输出 |
dfs <dfs command> | 在Hive shell窗口执行一个dfs命令 |
list FILE[S] 、list JAR[S]、list ARCHIVE[S] | 列出被增加到分布式缓存中的资源 |
list FILE[S] <filepath>* list JAR[S] <filepath>* list ARCHIVE[S] <filepath>* | 检查是否给定的资源已经被添加到分布式缓存中 |
add [FILE[S]|JAR[S] |ARCHIVE[S] ] <filepath> <filepath>* | 增加一个或者多个文件,jar包,或者压缩包到分布式缓存的资源列表中 |
add [FILE[S] |JAR[S] |ARCHIVE[S] ] <ivyurl> <ivyurl>* | 自Hive 1.2.0起,增加一个或者多个文件,jar包或者压缩包到分布式缓存的资源列表中使用类似ivy://group:module:version?query_string的lvy URL |
delete [FILE[S]|JAR[S] |ARCHIVE[S] ] <filepath>* | 删除分布式缓存中的一些资源 |
delete FILE[S] <ivyurl> <ivyurl>*,delete JAR[S] <ivyurl> <ivyurl>*,delete ARCHIVE[S] <ivyurl> <ivyurl>* | 自Hive 1.2.0起,移除通过 添加到分布式缓存中的资源 |
source <filepath> | 在CLI中执行一个脚本文件 |
实例:
hive> set mapred.reduce.tasks=32;
hive> reset;
hive> !pwd; 执行shell命令
/usr/local/src/apache-hive-1.2.2-bin
hive> dfs -ls; 执行dfs命令
Found 2 items
drwxr-xr-x - root supergroup 0 2019-05-23 22:04 .sparkStaging
-rw-r--r-- 3 root supergroup 632207 2019-04-24 14:59 yy.txt
hive> show databases; 显示数据库
OK
default
...
hive> set; 单独一个set
_hive.hdfs.session.path=/tmp/hive/root/b1c6efd4-eeb4-4532-9c9d-e5740bbb77e7
...
....
hive> set -v;
_hive.hdfs.session.path=/tmp/hive/root/13c83bed-b10c-4702-8384-b28fdf93cab7
...
dfs.block.access.key.update.interval=600
...
dfs.namenode.accesstime.precision=3600000
...
hadoop.bin.path=/usr/local/src/hadoop-2.6.5/bin/hadoop
...
hive.analyze.stmt.collect.partlevel.stats=true
...
mapreduce.am.max-attempts=2
...
yarn.acl.enable=false
...
env:CLASSPATH=/usr/local/src/hadoop-2.6.5/etc/hadoop:/usr...
...
system:file.encoding=UTF-8
...
system:java.class.version=52.0
...
system:os.name=Linux
...
system:user.home=/root
system:user.language=en
system:user.name=root
system:user.timezone=GMT+08
hive> set system:file.encoding; 打印变量
system:file.encoding=UTF-8
hive> set env:HADOOP_PREFIX; 打印变量
env:HADOOP_PREFIX=/usr/local/src/hadoop-2.6.5
hive> quit; 退出Hive
1、Hive-命令行界面(Command Line Interface,CLI):旧的Hive CLI
值得注意的是:自2013年5月发布的hive-0.11引入HiveServer2后,HiveServer2拥有自己的CLI(Beeline,是一个基于SQLLine的JDBC客户端,增加了多用户、安全和其他与HiveServer2兼容的特性(Hive CLI没有))。由于新的发展方向是HiveServer2,所以Hive CLI将被弃用。
在HiveService2文档可查看:使用Beeline替换Hive CLI的实现、一种新的命令行shell-Beeline
CLI选项如下:下方命令等价于help -H
[root@master Cshell]# hive --help --service cli
usage: hive
-d,--define <key=value> Variable subsitution to apply to hive
commands. 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 subsitution to apply to hive
commands. 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 the
console)
在终端(bash shell)中,执行hive
时,没有-e
、-f
选项,hive将进入Hive shell交互式窗口。
1.0 变量与属性之4个命名空间:hivevar、hiveconf、system、env
变量和属性,是在不同上下文中使用的术语,但在大多数情况下,两者功能是相同的。
--define key=value
与--hivevar key=value
等价。用于在命令行定义自定义变量,以便在Hive脚本中引用,满足不同情况的执行。这些键值对会被放到hivevar命名空间中,从而区分于其它3种内置命名空间(hiveconf、system、env)。
使用权限 | 描述 | |
---|---|---|
hivevar | 可读可写 | Hive-0.8.0以上版本,用户自定义变量 |
hiveconf | 可读可写 | Hive相关的配置属性 |
system | 可读可写 | Java定义的配置属性 |
env | 只可读 | Shell环境(如bash)定义的环境变量 |
hivevar
通过命令行定义一个变量,并用set
打印出来
[root@master apache-hive-1.2.2-bin]# hive --define foo=bar
hive> set foo;
foo=bar
set
命令给变量赋一个新的值。
hive> set foo=bar2;
hive> set foo;
foo=bar2
hive> set hivevar:foo;
hivevar:foo=bar
hive> set foo;
foo=bar2
其中前缀hivevar:
是可选的。但是,指定系统属性、环境变量必须使用system:
、env:
前缀。
在CLI中HIve QL语句中的变量引用,会先被替换,然后提交给处理器:
hive (default)> use hive_bczn;
OK
Time taken: 0.028 seconds
hive (hive_bczn)> create table toss1(i int, ${hivevar:foo} string);
OK
Time taken: 0.605 seconds
hive (hive_bczn)> describe toss1;
OK
i int
bar string
Time taken: 0.244 seconds, Fetched: 2 row(s)
hive (hive_bczn)> drop table toss1;
OK
Time taken: 0.884 seconds
hiveconf
对于--hiveconf
选项(0.7.*+版本支持),用于配置Hive行为的所有属性。在0.8.0+版本中增加的hive.cli.print.current.db
属性,用于在CLI提示符前显示当前所在的数据库名,默认数据库名是default
,该属性默认值是false
。
hive> set hive.cli.print.current.db=true;
hive (default)> create database if not exists hive_bczn;
OK
Time taken: 1.326 seconds
hive (default)> show databases;
OK
default
hive_bczn
...
hive (default)> use hive_bczn;
OK
Time taken: 0.028 seconds
hive (hive_bczn)>
hive> set hive.cli.print.current.db=true;
等价于在终端输入hive --hiveconf hive.cli.print.current.db=true;
。
也可以增加新的hiveconf
属性(0.8.0+支持),并且一样的可以被Hive QL语句引用:
hive (hive_bczn)> set hiveconf:y=1111;
hive (hive_bczn)> set y;
y=1111
system和env
当需要指定系统属性、环境变量时,必须分别使用system:
、env:
前缀。举例:env命名空间作为向Hive传递变量的一个可选方式
[root@master ~]# YEAR=2019 hive -e "select * from mytable where year=${env:YEAR}";
查询处理器会在where
子句中查看到实际的变量值2019
。
1.1 hive [-S] -e
:一次使用的命令
不进入Hive shell交互式窗口执行查询,即执行结束后Hive CLI立即退出,-e
选项满足这个需求:
[root@master ~]# hive -e "select * from mytable limit 3";
还可以将查询结果保存到一个文件中:-S
选项开启静默模式(Silence),这样打印结果中就没有OK
、Time taken ...
等信息,以及其他不重要的信息。
[root@master ~]# hive -S -e "select * from mytable limit 3" > /tmp/myquery;
重定向到了本地文件系统中,而不是HDFS中。
还有个重要“应用”,比如记不清某个属性名时,可模糊获取而无需滚动set
命令的结果进行查找,例:记不清哪个属性指定了管理表的warehouse
(数据仓库)的路径,管道功能。
[root@master ~]# hive -S -e "set" | grep warehouse
hive.metastore.warehouse.dir=hdfs://master:9000/user/hive/warehouse
hive.warehouse.subdir.inherit.perms=true
spark.sql.warehouse.dir=hdfs://master:9000/user/hive/warehouse
1.2 hive -f
选项:从脚本文件中执行Hive查询
使用-f
选项执行脚本文件(file),文件中有一个或多个查询语句。约定俗成地将这些Hive查询文件保存为后缀名为.q
、或.hql
的文件。
[root@master ~]# cat /path/to/file/withqueries.hql
select * from xtable limit 10;
[root@master ~]# hive -f /path/to/file/withqueries.hql
当然,这个脚本文件可以是存放在HDFS、S3等中的。
hive -f hdfs://<namenode>:<port>/hive-scripts.sql
hive -f s3://mys3bucket/s3-script.sql
也可以在Hive shell窗口中,使用source
命令执行脚本文件
hive> source /path/to/file/withqueries.hql;
1.3 hive -i
选项:在进入交互模式之前执行脚本
hive -i <filename>
允许指定一个文件,当CLI启动时,在提示符出现前,先执行这个文件。Hive会自动在HOME
目录下寻找名为.hiverc
的文件(或 指定目录下的脚本),并自动执行该文件中的命令(如果文件中有的话)。
这解决了:需要频繁执行某些命令。例如:设置系统属性、或增加对于Hadoop的分布式内存进行自定义的Hive扩展的Jar包文件。
典型举例:HOME/.hiverc
文件,注意末尾加分号;
add jar /path/to/custom_hive_extensions.jar;
set hive.cli.print.current.db=true;
set hive.exec.mode.local.auto=true;
set hive.cli.print.header=true;
set hive.root.logger=INFO,console;
- 第1行:表示向Hadoop分布式内存中增加一个jar文件
- 第2行:表示修改CLI提示符前显示当前所在工作数据库
- 第3行:表示“鼓励”Hive如果可以使用本地模式执行(即便当Hadoop是以分布式模式或伪分布式模式执行时)的话,尽量本地执行,这样可以加快小数据集的数据查询速度
- 第4行:表示显示字段名称
- 第5行:表示指定日志的级别和输出方式。Hive使用log4j进行日志记录,这些日志记录默认不是标准输出,而是由Hive的log4j属性文件(通常在
conf/
目录下)定义的一个日志文件,采用WARN级别,写到/tmp/<userid>/hive.log
[root@master src]# ll /tmp/root/*.log
-rw-r--r-- 1 root root 357170 Jun 11 21:34 /tmp/root/hive.log
Hive-1.2.2默认没有.hiverc
文件,需要自己新建。
[root@master ~]# hive -i /home/my/hive_init.hql
1.4 Hive CLI其它
自动补全功能
在输入的过程中,敲击Tab
键,CLI会自动补全可能的关键字或函数。
注意:当向CLI输入语句时,如果某些行是以Tab键开头的,可能会提示Display all 475 possibilities? (y or n)
而输入流后面的字符会被认为是对这个提示的回复,从而导致命令执行失败。
hive> Display all 475 possibilities? (y or n)
查看操作历史命令
CLI不会将多行命令和查询作为一个单独的历史条目,Hive会将最近的10000行命令记录到文件$HOME/.hivehistory
中
[root@master ~]# locate .hivehistory
/home/cyg/.hivehistory
/root/.hivehistory
[root@master ~]# ls -a
.hivehistory ...
....
[root@master ~]#
执行shell命令
格式:! [shell命令];
但是,在Hive CLI中不支持需要用户进行输入的交互式命令,不支持shell的管道功能和文件名的自动补全功能,例如:不支持。! ls *.hql;
,显示所有以.hql
结尾的文件
执行hadoop dfs命令
hive> dfs -ls /;
Found 7 items
drwxr-xr-x - root supergroup 0 2019-04-26 12:26 /data
drwxr-xr-x - root supergroup 0 2019-05-25 20:50 /hadoop
drwxr-xr-x - root supergroup 0 2019-04-24 12:11 /input
drwxr-xr-x - root supergroup 0 2019-04-24 15:39 /output
drwx-wx-wx - root supergroup 0 2019-04-22 16:45 /tmp
drwxr-xr-x - root supergroup 0 2019-04-25 19:58 /user
drwxr-xr-x - root supergroup 0 2019-04-24 12:31 /usr
Hive-1.2.2不支持fs
。
上述命令等价于:在bash shell中执行hadoop dfs
命令。但是:在Hive CLI中执行更高效,因为hadoop dfs命令每次都要启动一个新的JVM实例,而Hive会在同一个进程中执行这些命令。
Hive脚本、CLI中如何进行注释
以--
开头的字符串表示注释
-- Copyright (c) 2019.
-- This is the best hive script.
select * from mytable;
hive> show databases --注释;
OK
default
hive_bczn
Time taken: 0.045 seconds, Fetched: 2 row(s)
hive> --注释
> show databases;
OK
default
hive_bczn
Time taken: 0.027 seconds, Fetched: 2 row(s)
1.5、Hive资源
以后再添加学习内容。
JAR、ARCHIVE、
ivy URL
ivy是一种免费的基于java的依赖管理器,是Ant的一个子项目。它提供了包括依赖传递,ant集成,maven存储库兼容,持续集成,html报告等功能。有一个术语叫做transitive dependencies(传递依赖)。某些jar文件依赖于其他jar文件才能正常工作。通过使用ivy,一次声明好,以后,就只需要了解一个项目中的主要jar文件就行了。
参考:
ivy简介
Apache ivy官网
Hive资源
2、Beeline CLI:新的Hive CLI
Beeline从Hive-0.11+
版本开始引入的;HiveServer2Hive-0.14+
开始使用Beeline。
在前面【0、命令行之hive --help
命令】就提到Service List提供的服务列表其中就有Hiveserver(Hive-0.15+
不再支持)、HiveServer2(Hive-0.11+
开始引入)。
[root@master cyg]# hive --service hiveserver2 & (&表示在后台运行)
当需要用Java、Python等程序实现通过JDBC等驱动的方式访问Hive时,就使用上述这种启动方式了。即 Hive 远程服务启动方式(端口号10000)。
Hive主要有3种启动方式:
- 命令行模式:终端输入
hive
、或hive --service cli
(旧Hive CLI和新Hive CLI(Beeline CLI)) - Web界面的启动方式:
hive --service hwi &
。浏览器访问地址是127.0.0.1:9999/hwi
- 远程服务启动方式(端口号10000):
hive --service hiveserver2 &
,这是使用Hive的推荐方式。
其中,HiveServer2允许远程客户端使用多种编程语言(如Python/Jave),通过HiveServer2,客户端可以在不启动CLI的情况下对Hive中的数据进行操作(向hive提交请求,取回结果),并支持多于一个客户端的并发请求(HiveServer不支持)。
参考:
Hive官方使用手册-Beeline CLI,指向链接内容是HiveServer2 Clients
Hive的内置服务和hiveserver/hiveserver2的比较
2.0 Beeline CLI
如何进入Beeline CLI?和Hive CLI是一样的。都是运行/hive安装目录/bin/脚本
[root@master cyg]# beeline
Beeline version 1.2.2 by Apache Hive
beeline> !connect jdbc:hive2://localhost:10000 scott tiger
....
0: jdbc:hive2://localhost:10000> show tables;
show tables;
+-------------------+
| tab_name |
+-------------------+
| primitives |
| src |
+-------------------+
或者在终端指定参数的方式运行。这样这个命令将会保存在shell历史命令里。
[root@master cyg]# beeline -u jdbc:hive2://localhost:10000/default -n scott -w password_file
...
Beeline 命令
以!
开头
命令 | 描述 |
---|---|
!<SQLLine command> | SQLLine命令清单请访问http://sqlline.sourceforge.net/。例:!quit 退出Beeline客户端 |
!delimiter | 设置在Beeline中写查询的界定符。允许使用多字符界定符,但是引号、斜杠、-- 是不允许的。默认是分号; 例:!delimiter $$ |
Beeline Hive命令
当使用Hive JDBC驱动时,Hive自带的命令(Hive CLI命令行)也能在Beeline中运行。
一样使用;
来结束命令,脚本中可以--
作为前缀进行注释。有哪些命令可参考前面【0、命令行之表格】。
Beeline CLI 命令行可选项
表格参考:
Beeline Command Options
输出格式
在Beeline中,结果可以被展示为多种格式,格式可以在outputformat
参数中设置。
table
,这是默认格式,结果中行对应表中的一行,每行使用分隔符将不同列的取值分开vertical
,结果中每行被展示为一个key-value格式的块,其中key是列名xmlattr
,结果被展示为一个xml格式的文件,每行结果对应XML中的元素xmlelements
,结果被展示为一个XML格式,每行是XML中的一个元素result,每行取值是其子元素Separated-Value Output Formats
,一行的取值被不同的分隔符分开,有5种separated-value
输出格式可用:csv、tsv、csv2、tsv2 、dsv(后面3种从Hive-0.14+
开始引入)
HiveServer2 日志
从Hive-0.14+
版本开始,HiveServer2操作日志是可以通过Beeline客户端获取的。
这些参数可配置日志。
取消查询
- 当有一个查询正在运行时,在Beeline shell界面,输入
Ctrl+C
,Beeline进程将会取消查询、并关闭到HiveServer2的Socket连接。但前提是设置了hive.server2.close.session.on.disconnect=true
; - 从
Hive-2.2.0+
开始,当正在运行查询时,输入Ctrl+C
,不会退出Beeline shell界面;此时,再输入一次Ctrl+C
,将退出Beeline shell界面。当没有在运行查询时,在Beeline shell界面,输入Ctrl+C
,将退出Beeline shell界面。
注意:!quit
是退出Beeline shell的推荐方式。
在终端脚本里进行后台查询
Beeline能在不连接批处理终端的情况下,使用nohup
或disown
命令自动运行脚本。
一些版本的Beeline客户端,可能需要一个工作区来支持nohup
命令,才能很好地将进程放在后台运行而不停止它。
需要更新下方环境变量:
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 &
2.1 HiveServer2 JDBC:多种URLs、数据类型、安全集群的JDBC客户端设置
JDBC(Java DataBase Connectivity,Java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事。
HiveServer2有一个JDBC驱动,它支持嵌入式、或远程连接HiveServer2。远程HiveServer2模式是推荐模式,它更加安全而且不需要直接的HDFS或者元数据的用户使用权限。
连接URLs
1)连接URL的格式
HiveServer2 URL是一个类似下方语法的字符串:
jdbc:hive2://<host1>:<port1>,<host2>:<port2>/dbName;initFile=<file>;sess_var_list?hive_conf_list#hive_var_list
具体含义参考
2)远程、或嵌入模式的连接URL
JDBC连接URL格式的前缀是 jdbc:hive2://
,而驱动是 org.apache.hive.jdbc.HiveDriver
。
- 远程模式,URL格式是
jdbc:hive2://<host>:<port>/<db>;initFile=<file>
(默认的HiveServer2端口是10000) - 嵌入模式,URL格式是
jdbc:hive2:///;initFile=<file>
(没有主机或者端口号)
其中,参数initFile
是Hive 2.2.0+
版本才支持的。
3)使用HTTP Mode连接HiveServer2的连接URL
JDBC 连接 URL:jdbc:hive2://<host>:<port>/<db>;transportMode=http;httpPath=<http_endpoint>
<http_endpoint>
是相应的HTTP端的配置在hive-site.xml
,默认值是cliservice
- HTTP传输模式的端口默认是10001
4)在HiveServer2启用SSL时的连接URL
JDBC 连接 URL: jdbc:hive2://<host>:<port>/<db>;ssl=true;sslTrustStore=<trust_store_path>;trustStorePassword=<trust_store_password>
<trust_store_path>
是客户端的信任库文件存放路径<trust_store_password>
是信任库的密码
HTTP 模式:jdbc:hive2://<host>:<port>/<db>;ssl=true;sslTrustStore=<trust_store_path>;trustStorePassword=<trust_store_password>;transportMode=http;httpPath=<http_endpoint>
5)当启用 ZooKeeper 服务发现时的连接URL
以ZooKeeper为基础的服务发现是在Hive 0.14.0
版本启用高可用后引进的,并且随着HiveServer2进行了升级。一个JDBC URL指定<zookeeper quorum>
需要被用来使用这些特性。
具体参考
6)命名的连接URL
从Hive 2.1.0+
开始,Beeline支持通过环境变量命名的URL连接字符串。例:命名一个环境变量BEELINE_URL_<name>
,执行 !connect blue
命令,它将会查找BEELINE_URL_BLUE然后用它来建立连接。
这样,方便系统管理员为用户指定环境变量,用户也不需要每次连接都键入全部URL。
7)重新建立连接
习惯上,!reconnect
将刷新一个已经建立的连接,它不会在!close
被执行后再运行。
从Hive 2.1.0+
开始,Beeline会记住上一次成功连接的URL, 甚至在一次!close
被执行后仍然可以重新建立连接。
另外,如果用户执行一次!save
,那么它会被保存在beeline.properties
文件中,这也允许了!reconnect
通过复杂的Beeline会话重新连接这个被保存的最后连接URL。这也允许使用beeline -r
在启动时的命令行窗口中执行重新连接。
8)配置hive-site.xml
文件来自动连接HiveServer2
从Hive 2.2.0+
开始,才支持。
具体参考
9)配置beeline-site.xml
文件来自动连接HiveServer2
具体参考
10)如何使用JDBC
前面讲述了那么多连接URL的方式。接下来将是实践。
具体参考
通过JDBC可以操作存储在一个关系型数据库或其它表格型格式中的数据。步骤:
- 加载HiveServer2 JDBC驱动。自
Hive 1.2.0+
起,不再需要使用Class.forName()
明确地加载JDBC驱动程序;
Class.forName("org.apache.hive.jdbc.HiveDriver");
- 通过一个Connection对象让JDBC驱动连接数据库;
Connection cnct = DriverManager.getConnection("jdbc:hive2://<host>:<port>", "<user>", "<password>");
- 通过创建一个 Statement对象提交SQL给数据库并且使用它的方法
executeQuery()
;
Statement stmt = cnct.createStatement();
ResultSet rset = stmt.executeQuery("SELECT foo FROM bar");
- 处理结果集,如果需要处理的话。
样例参考
用于HiveServer2 JDBC的数据类型
Hive类型 | 对应的Javal类型 | 说明 |
---|---|---|
TINYINT | byte | 有符号或无符号的1字节整数 |
SMALLINT | short | 有符号的2字节整数 |
INT | int | 有符号的4字节整数 |
BIGINT | long | 有符号的8字节整数 |
FLOAT | double | 单精度数字 |
DOUBLE | double | 双精度数字 |
DECIMAL | java.math.BigDecimal | 固定精度的十进制数 |
BOOLEAN | boolean | 布尔值(0 或1) |
STRING | String | 字符串 |
TIMESTAMP | java.sql.Timestamp | 日期和时间值 |
BINARY | String | 二进制数据 |
下方是复杂类型 | ||
ARRAY | String – json encoded | 一种数据类型的值 |
MAP | String – json encoded | 键值对 |
STRUCT | String – json encoded | 结构化的数据 |
用于安全集群的JDBC客户端设置
具体参考
当使用Kerberos身份验证连接到HiveServer2时,URL格式为:
jdbc:hive2://<host>:<port>/<db>;principal=<Server_Principal_of_HiveServer2>
Kerberos是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。
2.2 Python客户端
在github有一个可用的Python客户端。 查阅Setting Up HiveServer2: Python Client Driver获取安装和使用信息。
2.3 Ruby客户端
Ruby客户端驱动在github上的地址是 https://github.com/forward3d/rbhive
2.4 与其它客户端集成:SQuirrel SQL Client 、SQL Developer、DbVisSoftware's DbVisualizer
具体参考
2.5 与其它工具集成的高级特性
- 在HTTP模式下支持Cookie Replay
- 在HTTP模式下支持2-way SSL
- 通过JDBC驱动器传递HTTP Header 键值对
- 通过JDBC驱动器传递自定义HTTP Cookie 键值对
具体参考
3、HCatalog CLI
具体参考
HCatalog是Hadoop中的表和存储管理层,能够支持用户用不同的工具(Pig、MapReduce)更容易地表格化读写数据。
HCatalog从Apache孵化器毕业,并于2013年3月26日与Hive项目合并。
Hive版本0.11.0是包含HCatalog的第一个版本。(随Hive一起安装)
与Hive CLI是有差异的,有些命令并不能通用。
4、变量替换
具体参考
以后详细补充。
参考:
Hive官方文档
更多推荐
所有评论(0)