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 可以使用“-”前缀指定。

CommandDescription
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 命令行界面文档。