$HIVE_HOME/bin/hive是一个shell实用程序,可用于以交互或批处理模式运行hive查询。
推荐使用 Beeline CLI
HiveServer2(在Hive
0.11中引入)有自己的CLI Beeline,它是一个基于SQLLine的JDBC客户端。由于新的开发集中在HiveServer2上,Hive CLI将很快被Beeline (Hive -10511)所取代。
Hive命令行选项
要获得帮助,可以运行"hive -H"或"hive -help"。
用法(在Hive 0.9.0中):
usage:hive-d,--define<key=value> 用于Hive命令的变量替换。例如:-d A=B或——define A=B-e<quoted-query-string> 从命令行执行SQL-f<filename> 来自文件的SQL-H,--help 打印帮助信息-h<hostname> 在远程主机上连接到Hive Server--hiveconf<property=value> 使用给定属性的值--hivevar<key=value> 应用于hive的变量替换命令。例:——hivevar A=B-i<filename> 初始化SQL文件-p<port> 通过端口号连接到Hive Server-S,--silent 交互式shell中的沉默模式-v,--verbose 详细模式(将已执行的SQL回显到控制台)
例子:
从命令行运行查询的示例
$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.colfrom 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作为初始化文件。
日志记录
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
logger指定日志级别以及日志目的地。指定控制台作为目标将日志发送到标准错误(而不是日志文件)。Hive批处理模式命令
当$HIVE_HOME/bin/hive带有-e或-f选项时,它以批处理方式执行SQL命令。
hive -e'<query-string>' 执行查询字符串。hive -f<filepath> 从文件执行一个或多个SQL查询。
从Hive 0.14开始,<filepath>也可以来自Hadoop支持的文件系统(HDFS, S3等)。
$HIVE_HOME/bin/hive -fhdfs://<namenode>:<port>/hive-script.sql$HIVE_HOME/bin/hive -fs3://mys3bucket/s3-script.sql
Hive交互式Shell命令
当$HIVE_HOME/bin/hive不带-e或-f选项时,它将进入交互式shell模式。
使用“;”(分号)终止命令。脚本中的注释可以使用“——”前缀指定。
Command | Description |
source
<filepath> | 在CLI中执行脚本文件。 |
set
<key>=<value> | 设置特定配置变量(键)的值。 注意:如果变量名拼写错误,CLI不会显示错误。 |
set -v | 打印所有Hadoop和Hive配置变量。 |
set | 打印由用户或Hive覆盖的配置变量列表。 |
reset | 将配置重置为默认值(Hive 0.10版本)。 |
quit | 使用quit或exit退出交互式shell。 |
list FILE[S]
<filepath>* | 检查给定的资源是否已经添加到分布式缓存中。 |
list FILE[S] | 列出已添加到分布式缓存的资源。有关更多信息,请参阅下面的Hive参考资料。 |
dfs <dfs
command> | 从Hive shell执行dfs命令。 |
delete FILE[S]
<ivyurl> <ivyurl>* | 从Hive 1.2.0开始,从分布式缓存中删除使用<ivyurl>添加的资源。 |
delete FILE[S]
<filepath>* | 从分布式缓存中删除资源。 |
add FILE[S]
<ivyurl> <ivyurl>* | 从Hive 1.2.0开始,使用Ivy URL将一个或多个文件、jar或归档文件添加到分布式缓存中的资源列表中,格式为Ivy://group:module:version?query_string。 |
add FILE[S]
<filepath> <filepath>* | 将一个或多个文件、jar或存档添加到分布式缓存中的资源列表中。 |
<query
string> | 执行Hive查询并将结果打印到标准输出。 |
!
<command> | 从Hive shell执行shell命令。 |
示例用法:
hive> set mapred.reduce.tasks=32;hive> set;hive> select a.* from tab1;hive> !ls;hive> dfs -ls;
Hive资源
Hive可以管理向会话添加的资源,这些资源需要在查询执行时可用。资源可以是文件、jar或存档。任何本地可访问的文件都可以添加到会话中。
一旦一个资源被添加到会话中,Hive查询就可以通过它的名字来引用它(在map/reduce/transform子句中),并且在整个Hadoop集群执行时,这个资源在本地可用。Hive使用Hadoop的分布式缓存在查询执行时将添加的资源分配给集群中的所有机器。
用法:
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> ..]
文件资源只是添加到分布式缓存中。通常,这可能是要执行的转换脚本之类的东西。JAR资源也被添加到Java类路径中。这是引用它们包含的对象(如udf)所必需的。归档资源在分发时会自动取消归档。举例:
hive> add FILE /tmp/tt.py;hive> list FILES;/tmp/tt.pyhive> select from networks aMAP a.networkidUSING 'python tt.py' as nn where a.ds = '2009-01-04' limit 10;
从Hive 1.2.0开始,资源的添加和删除可以使用Ivy url,格式为Ivy://group:module:version?query_string。
group -该模块来自哪个模块组。直接转换为Maven组或常春藤组织。
module -要加载的模块的名称。直接转换为Maven工件或Ivy工件。
version -要使用的模块的版本。任何版本或*(表示最新版本)或Ivy Range都可以使用。
可以在query_string中传递各种参数,以配置如何以及哪些jar被添加到工件中。参数以“&”分隔的键值对的形式存在。
用法:
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命令中混合使用<ivyurl>和<filepath>。
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时,所有的传递依赖都会被下载并添加到类路径中。
ext:要添加的文件扩展名。默认为'jar'。
classifier:要解析的maven分类器。
举例:
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语法删除,那么除了共享的依赖项外,该资源的所有传递依赖项都将被删除。
举例:
hive>ADD JAR ivy://org.apache.pig:pig:0.10.0hive>ADD JAR ivy://org.apache.pig:pig:0.11.1.15hive>DELETE JAR ivy://org.apache.pig:pig:0.10.0如果A是包含pig-0.10.0传递依赖的集合,B是包含pig-0.11.1.15传递依赖的集合,则执行上述命令后,A-(A交集B)将被删除。
如果转换脚本中使用的文件已经在Hadoop集群中使用相同的路径名的所有机器上可用,则没有必要向会话添加文件。例如:
... MAP a.networkid USING'wc -l' ...
这里wc是一个可执行文件,在所有机器上都可用。
... MAP a.networkid USING'/home/nfsserv1/hadoopscripts/tt.py' ...
这里可以通过在所有集群节点上配置相同的NFS挂载点访问tt.py。
注意Hive配置参数还可以指定jar、files和archives。
HCatalog CLI
从Hive 0.11.0版本开始,HCatalog随Hive一起安装。
许多(但不是全部)hcat命令可以作为hive命令发出,反之亦然。
获取更多大数据技能请关注大数据技能圈公众号:




