On this page
Hive CLI
$ HIVE_HOME/bin/hive 是一个 shellUtil,可用于以交互或批处理模式运行 Hive 查询。
弃用 Beeline CLI
HiveServer2(在 Hive 0.11 中引入)具有自己的 CLI,名为Beeline,这是基于 SQLLine 的 JDBCClient 端。由于新的开发集中在 HiveServer2 上,因此Hive CLI 将很快被弃用支持 Beeline(HIVE-10511)。
请参阅 HiveServer2 文档中的使用 Beeline 替代 Hive CLI 的实现和直线–新命令行 Shell。
Hive 命令行选项
要获取帮助,请运行“ hive -H
”或“ hive --help
”。
用法(在 Hive 0.9.0 中是):
usage: hive
-d,--define <key=value> Variable substitution to apply to Hive
commands. e.g. -d A=B or --define A=B
-e <quoted-query-string> SQL from command line
-f <filename> SQL from files
-H,--help Print help information
-h <hostname> Connecting to Hive Server on remote host
--hiveconf <property=value> Use value for given property
--hivevar <key=value> Variable substitution to apply to hive
commands. e.g. --hivevar A=B
-i <filename> Initialization SQL file
-p <port> Connecting to Hive Server on port number
-S,--silent Silent mode in interactive shell
-v,--verbose Verbose mode (echo executed SQL to the
console)
Version information
从 Hive 0.10.0 开始,还有一个附加的命令行选项:
--database <dbname> Specify the database to use
注意:支持变体“ -hiveconf
”和“ --hiveconf
”。
Examples
有关使用hiveconf
选项的示例,请参见Variable Substitution。
- 从命令行运行查询的示例
$HIVE_HOME/bin/hive -e 'select a.col from tab1 a'
- 设置 Hive 配置变量的示例
$HIVE_HOME/bin/hive -e 'select a.col from tab1 a' --hiveconf hive.exec.scratchdir=/home/my/hive_scratch --hiveconf mapred.reduce.tasks=32
- 使用静默模式将数据从查询中转储到文件中的示例
$HIVE_HOME/bin/hive -S -e 'select a.col from tab1 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_HOME/bin/hive -f s3://mys3bucket/s3-script.sql
- 进入交互模式之前运行初始化脚本的示例
$HIVE_HOME/bin/hive -i /home/my/hive-init.sql
hiverc 文件
在不使用-i
选项的情况下调用 CLI 时,将尝试加载$ HIVE_HOME/bin/.hiverc 和$ HOME/.hiverc 作为初始化文件。
Logging
Hive 使用 log4j 进行日志记录。这些日志默认情况下不发送到标准输出,而是捕获到 Hive 的 log4j 属性文件指定的日志文件中。默认情况下,Hive 将使用 Hive 安装的conf/
目录中的hive-log4j.default
,该目录会将日志写到/tmp/<userid>/hive.log
并使用WARN
级别。
通常需要将日志发送到标准输出和/或更改日志记录级别以用于调试。这些可以从命令行完成,如下所示:
$HIVE_HOME/bin/hive --hiveconf hive.root.logger=INFO,console
hive.root.logger
指定日志记录级别以及日志目标。将console
指定为目标会将日志发送到标准错误(而不是日志文件)。
有关更多信息,请参见Hive 登录入门。
清除悬空的暂存目录的工具
有关可在 Hive CLI 和 HiveServer2 中使用的暂存目录和命令行删除悬空的暂存目录的工具的信息,请参阅“设置 HiveServer2”中的临时目录 Management。
Hive 批处理模式命令
当$HIVE_HOME/bin/hive
与-e
或-f
选项一起运行时,它将以批处理模式执行 SQL 命令。
hive -e '<query-string>'
执行查询字符串。hive -f <filepath>
从文件执行一个或多个 SQL 查询。
Version 0.14
从 Hive 0.14 开始,\ 也可以来自 Hadoop 支持的文件系统之一(HDFS,S3 等)。
$HIVE_HOME/bin/hive -f hdfs://<namenode>:<port>/hive-script.sql
$HIVE_HOME/bin/hive -f s3://mys3bucket/s3-script.sql
有关更多详细信息,请参见HIVE-7136。
Hive Interactive 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> * 添加 ARCHIVE [S]<ivyurl><ivyurl> * |
从Hive 1.2.0开始,使用 ivy:// group:module:version 形式的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<filepath> | 在 CLI 内执行脚本文件。 |
Sample Usage:
hive> set mapred.reduce.tasks=32;
hive> set;
hive> select a.* from tab1;
hive> !ls;
hive> dfs -ls;
Hive Resources
Hive 可以 Management 向会话中资源的添加,在会话中需要在查询执行时使这些资源可用。资源可以是文件,jar 或存档。可以将任何本地可访问的文件添加到会话中。
一旦将资源添加到会话中,Hive 查询便可以通过其名称(在 map/reduce/transform 子句中)对其进行引用,并且该资源在整个 Hadoop 集群上的执行时都可以在本地使用。 Hive 使用 Hadoop 的 Distributed Cache 在查询执行时将添加的资源分配给集群中的所有计算机。
Usage:
ADD { FILE[S] | JAR[S] | ARCHIVE[S] } <filepath1> [<filepath2>]*
LIST { FILE[S] | JAR[S] | ARCHIVE[S] } [<filepath1> <filepath2> ..]
DELETE { FILE[S] | JAR[S] | ARCHIVE[S] } [<filepath1> <filepath2> ..]
FILE 资源只是添加到分布式缓存中。通常,这可能类似于要执行的转换脚本。
JAR 资源也已添加到 JavaClasspath 中。为了引用它们包含的对象(例如 UDF),这是必需的。有关自定义 UDF 的更多信息,请参见Hive Plugins。
归档资源在分发时会自动取消归档。
Example:
hive> add FILE /tmp/tt.py;
hive> list FILES;
/tmp/tt.py
hive> select from networks a
MAP a.networkid
USING 'python tt.py' as nn where a.ds = '2009-01-04' limit 10;
Version 1.2.0
从Hive 1.2.0开始,可以使用 iv_:// group:module:version?query_string 形式的Ivy URL 添加和删除资源。
-
- group * –模块来自哪个模块组。直接转换为 Maven groupId 或 Ivy Organization。
-
- module * –要加载的模块的名称。直接转换为 Maven artifactId 或 Ivy 工件。
-
- version * –要使用的模块版本。可以使用任何版本或*(代表最新版本)或 Ivy Range。
可以在* query_string *中传递各种参数,以配置将 jars 添加到工件的方式和方式。参数采用键值对的形式,以“&”分隔。
Usage:
ADD { FILE[S] | JAR[S] | ARCHIVE[S] } <ivy://org:module:version?key=value&key=value&...> <ivy://org:module:version?key=value&key1=value1&...>*
DELETE { FILE[S] | JAR[S] | ARCHIVE[S] } <ivy://org:module:version> <ivy://org:module:version>*
此外,我们可以在同一 ADD 和 DELETE 命令中混合使用\ 和\ 。
ADD { FILE[S] | JAR[S] | ARCHIVE[S] } { <ivyurl> | <filepath> } <ivyurl>* <filepath>*
DELETE { FILE[S] | JAR[S] | ARCHIVE[S] } { <ivyurl> | <filepath> } <ivyurl>* <filepath>*
可以传递的不同参数是:
-
- exclude *:采用 org:module 形式的逗号分隔值。
-
- transitive *:取值为 true 或 false。默认为 true。当 transitive = true 时,将下载所有传递依赖项并将其添加到 Classpath 中。
-
- ext *:要添加文件的 extensions。默认为“ jar”。
-
- classifier *:要解析的 Maven 分类器。
Examples:
hive>ADD JAR ivy://org.apache.pig:pig:0.10.0?exclude=org.apache.hadoop:avro;
hive>ADD JAR ivy://org.apache.pig:pig:0.10.0?exclude=org.apache.hadoop:avro&transitive=false;
DELETE 命令将删除资源及其所有传递依赖项,除非某些依赖关系被其他资源共享。如果两个资源共享一组传递依赖关系,并且使用 DELETE 语法删除其中一个资源,则将删除该资源的所有传递依赖关系,但那些共享资源除外。
Examples:
hive>ADD JAR ivy://org.apache.pig:pig:0.10.0
hive>ADD JAR ivy://org.apache.pig:pig:0.11.1.15
hive>DELETE JAR ivy://org.apache.pig:pig:0.10.0
如果 A 是包含 Pig-0.10.0 的传递依赖关系的集合,而 B 是包含 Pig-0.11.1.15 的传递依赖关系的集合,则在执行上述命令后,将删除 A-(交集 B)。
有关更多详细信息,请参见HIVE-9664。
如果转换脚本中使用的文件已经在使用相同路径名的 Hadoop 集群中的所有机器上已经可用,则无需将文件添加到会话中。例如:
... MAP a.networkid USING 'wc -l' ...
wc
是所有计算机上可用的可执行文件。... MAP a.networkid USING '/home/nfsserv1/hadoopscripts/tt.py' ...
此处tt.py
可以通过在所有群集节点上配置均相同的 NFS 挂载点进行访问。
请注意,Hive 配置参数还可以指定 jar,文件和 Files。有关更多信息,请参见Configuration Variables。
HCatalog CLI
Version
从 Hive 版本 0.11.0 开始,HCatalog 随 Hive 一起安装。
许多(但不是全部)hcat
命令可以作为hive
命令发布,反之亦然。有关更多信息,请参见HCatalog manual中的 HCatalog 命令行界面文档。