环境

  • 宿主机: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将被弃用

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

参考:
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+不再支持)、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不支持)。

参考:
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能在不连接批处理终端的情况下,使用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类型说明
TINYINTbyte有符号或无符号的1字节整数
SMALLINTshort有符号的2字节整数
INTint有符号的4字节整数
BIGINTlong有符号的8字节整数
FLOATdouble单精度数字
DOUBLEdouble双精度数字
DECIMALjava.math.BigDecimal固定精度的十进制数
BOOLEANboolean布尔值(0 或1)
STRINGString字符串
TIMESTAMPjava.sql.Timestamp日期和时间值
BINARYString二进制数据
下方是复杂类型
ARRAYString – json encoded一种数据类型的值
MAPString – json encoded键值对
STRUCTString – 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官方文档

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐