On this page
使用 Beeline 替代 Hive CLI 的实现
为什么要替换现有的 Hive CLI?
Hive CLI是旧版工具,主要有两个用例。第一个是它用作 Hadoop 上 SQL 的胖 Client 端,第二个是它用作 Hive Server(原始的 Hive 服务器,现在通常称为“ HiveServer1”)的命令行工具。从 Hive 1.0.0(HIVE-6977)开始,Hive Server 已被弃用,并已从 Hive 代码库中删除,并已替换为 HiveServer2(HIVE-2935),因此第二个用例不再适用。对于第一个用例,Beeline提供或应该提供相同的功能,但实现方式与 Hive CLI 不同。
理想情况下,不建议使用 Hive CLI,因为 Hive 社区长期以来建议使用 Beeline plus HiveServer2 配置。但是,由于 Hive CLI 的广泛使用,我们改为在 Beeline 以及嵌入式 HiveServer2(HIVE-10511)之上用新的 Hive CLI 替换 Hive CLI 的实现,以便 Hive 社区只需要维护一个代码路径。这样,新的 Hive CLI 在 Shell 脚本级别和高代码级别都只是 Beeline 的别名。目标是使用 Hive CLI 对现有用户脚本进行更改或不需要进行任何更改。
Hive CLI 功能支持
我们在 Beeline 之上使用新的 Hive CLI 来实现 Hive CLI 功能。由于新的 Hive CLI 不支持某些现有的 Hive CLI 功能,因此默认情况下,我们使用的是旧的 HiveClient 端实现。使用以下命令指定新的基于 Beeline 的 Hive CLI 工具:
export USE_DEPRECATED_CLI=false
请注意,log4j 配置文件已更改为“ beeline-log4j.properties”。
Hive CLI 选项支持
要获取帮助,请运行“ hive -H
”或“ hive --help
”。
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)
Examples
- 从命令行运行查询的示例
$HIVE_HOME/bin/hive -e 'select a.foo from pokes a'
- 设置 Hive 配置变量的示例
$HIVE_HOME/bin/hive -e 'select a.foo from pokes a' --hiveconf hive.exec.scratchdir=/opt/my/hive_scratch --hiveconf mapred.reduce.tasks=1
- 使用静默模式将数据从查询中转储到文件中的示例
$HIVE_HOME/bin/hive -S -e 'select a.foo from pokes a' > a.txt
- 从本地磁盘非交互运行脚本的示例
$HIVE_HOME/bin/hive -f /home/my/hive-script.sql
- 从 Hadoop 支持的文件系统非交互地运行脚本的示例(从Hive 0.14开始)
$HIVE_HOME/bin/hive -f hdfs://<namenode>:<port>/hive-script.sql
Hive CLI 交互式 Shell 命令支持
如果没有使用-e
或-f
选项运行$HIVE_HOME/bin/hive
,它将进入交互式 shell 模式。
用 ”;” (分号)终止命令。脚本中的 Comments 可以使用“-”前缀指定。
Command | Description | |
---|---|---|
quit | ||
exit |
使用 quit 或 exit 离开交互式 Shell。 | |
reset | 将配置重置为默认值(从 Hive 0.10 开始:请参见HIVE-3202)。 | |
set<key> =<value> | 设置特定配置变量(键)的值。 注意: 如果您拼写错误的变量名,则 CLI 不会显示错误。 |
|
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> * 从Hive 1.2.0开始,添加 ARCHIVE [S]<ivyurl><ivyurl> * |
,使用ivy://group:module:version?query_string形式的Ivy URL 将一个或多个文件,jar 或存档添加到分布式缓存中的资源列表中。有关更多信息,请参见Hive Resources。 | |
list FILE[S] list JAR[S] list ARCHIVE [S] |
列出已经添加到分布式缓存的资源。有关更多信息,请参见Hive Resources。 | |
列出文件[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。 | |
!<command> | 从 Hive shell 执行 shell 命令。 | |
dfs<dfs command> | 从 Hive shell 执行 dfs 命令。 | |
<query string> | 执行 Hive 查询并将结果打印到标准输出中。 | |
source FILE<filepath> | 在 CLI 内执行脚本文件。 |
Shell 命令示例:
hive> source /root/test.sql;
hive> show tables;
test1
test2
hive> exit;
hive> quit;
hive> set;
hive> set hive.cli.print.header=true;
hive> set -v;
hive> reset;
hive> add file /opt/a.txt;
Added resources: [/opt/a.txt]
hive> list files;
/opt/a.txt
hive> delete file /opt/a.txt;
hive> add jar /usr/share/vnc/classes/vncviewer.jar;
Added [/usr/share/vnc/classes/vncviewer.jar]to class path
Added resources:[/usr/share/vnc/classes/vncviewer.jar]
hive> list jars;
/usr/share/vnc/classes/vncviewer.jar
hive> delete jar /usr/share/vnc/classes/vncviewer.jar;
hive> !ls;
bin
conf
hive> dfs -ls / ;
Found 2 items
drwx-wx-wx - root supergroup 0 2015-08-12 19:06 /tmp
drwxr-xr-x - root supergroup 0 2015-08-12 19:43 /user
hive> select * from pokes;
OK
pokes.foo pokes.bar
238 val_238
86 val_86
311 val_311
hive>source /opt/s.sql;
Hive CLI 配置支持
Configuration Name | 在新的 Hive CLI 中受支持 | Description |
---|---|---|
hive.cli.print.header | Yes | 是否打印查询输出中的列名。 HIVE-11624 |
hive.cli.errors.ignore | Yes | 发生错误时是否强制执行脚本。 HIVE-11191 |
hive.cli.prompt | Yes | 命令行提示符配置值。可以在此配置值中使用其他 hiveconf。 HIVE-11226 |
hive.cli.pretty.output.num.cols | Yes | 格式化 DESCRIBE PRETTY * table_name *命令生成的输出时要使用的列数。 HIVE-11779 |
hive.cli.print.current.db | Yes | 是否在 Hive 提示中包括当前数据库。 HIVE-11637 |
Performance Impacts
使用 JMH 来度量检索数据集时的平均时间成本,我们得到以下结果。
Benchmark Mode Samples Score Error Units
o.a.h.b.c.CliBench.BeeLineDriverBench.testSQLWithInitialFile avgt 1 1713326099.000 ? NaN ns/op
o.a.h.b.c.CliBench.CliDriverBench.testSQLWithInitialFile avgt 1 1852995786.000 ? NaN ns/op
分数越低越好,因为我们正在评估时间成本。在检索数据方面没有明显的性能差距。