环境

  • 宿主机: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


目录

0、命令行

1、Hive-命令行界面(Command Line Interface,CLI):旧的Hive CLI

----1.0 变量与属性之4个命名空间:hivevar、hiveconf、system、env

----1.1 hive [-S] -e:一次使用的命令

----1.2 hive -f选项:从脚本文件中执行Hive查询

----1.3 hive -i选项:在进入交互模式之前执行脚本

----1.4 Hive CLI其它:自动补全、查看操作历史命令、执行hadoop dfs命令、注释

----1.5、Hive资源

2、Beeline CLI:新的Hive CLI

----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 与其它工具集成的高级特性

3、HCatalog CLI

4、变量替换

正文

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脚本直接使用。常用命令有:

命令

描述

quitexit

退出交互式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拥有自己的CLIBeeline,是一个基于SQLLine的JDBC客户端,增加了多用户、安全和其他与HiveServer2兼容的特性(Hive CLI没有))。由于新的发展方向是HiveServer2,所以Hive CLI将被弃用。


[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),这样打印结果中就没有OKTime 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文件就行了。

2、Beeline CLI:新的Hive CLI

Beeline从Hive-0.11+版本开始引入的;HiveServer2Hive-0.14+开始使用Beeline。
在前面【0、命令行之hive --help命令】就提到Service List提供的服务列表其中就有Hiveserver(Hive-0.15+不再支持)、HiveServer2Hive-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不支持)。

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中,结果可以被展示为多种格式,格式可以在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能在不连接批处理终端的情况下,使用nohupdisown命令自动运行脚本。
一些版本的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>(没有主机或者端口号)

其中,参数initFileHive 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客户端


2.3 Ruby客户端

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、变量替换