Hive官方使用手册——Hive CLI,
本文为自己翻译的译文,原文地址:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Cli#LanguageManualCli-DeprecationinfavorofBeelineCLI
Hive官方使用手册——Hive CLI
为了支持Beeline CLI弃用当前的方式
HiveServer2 拥有自己的CLI叫Beeline。Beeline是一个基于SQLLine的JDBC客户端。由于新的发展方向是集中于HiveServer2,所以Hive CLI将很快被弃用(HIVE-10511)。
在HiveServer2的文档中可以看到使用Beeline替换Hive CLI的实现和一种新的命令行shell-Beeline
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
As of Hive 0.10.0 there is one additional command line option:
--database <dbname> Specify the database to use
注:"--hiveconf"和"-hiveconf"用法效果一样。
样例
使用hiveconf 选项替换变量的示例。
命令行执行一个查询的示例。
$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 作为初始化文件
日志
Hive使用log4j进行日志记录。这些日志默认不是输出标准输出而是由Hive的log4j 属性文件定义的一个日志文件。默认情况下,hive会使用安装目录中的conf/目录下的hive-log4j.default,它采用wan级别的形式,将日志写到到目录/tmp/<userid>/hive.log
这个经常被用来标准输出日志和改变日志级别来达到调试的目的。这些功能用命令行实现的方式如下:
$HIVE_HOME/bin/hive --hiveconf hive.root.logger=INFO,console
hive.root.logger 指定了日志的级别和输出方式。配置console 意思是指定console作为目标而不是日志文件发送标准错误日志
查阅快速开始中的Hive日志部分获取更多信息。
清除晃来晃去的临时目录的工具
在HiveServer2设置中查阅临时目录管理模块获取有关临时目录和命令行工具清除临时目录,这个方法在Hive CLI和HiveServer2都适用。
Hive 批处理模式命令
当$HIVE_HOME/bin/hive运行带有-e 或者-f 参数时,它就是在批处理模式下执行SQL命令。
hive -e '<query-string>'executes the query string.hive -f <filepath>executes one or more SQL queries from a file.
Version 0.14
As of Hive 0.14, <filepath> can be from one of the Hadoop supported filesystems (HDFS, S3, etc.) as well.
$HIVE_HOME/bin/hive -f hdfs://<namenode>:<port>/hive-script.sql$HIVE_HOME/bin/hive -f s3://mys3bucket/s3-script.sql
See HIVE-7136 for more details.
Hive交互式shell命令
当$HIVE_HOME/bin/hive 运行时没有带 -e或者-f 参数,hive就进入交互式shell模式。
使用分号";"来结束命令,脚本中可以用"--"作为前缀来标识命令。
命令 | 描述 |
|---|---|
quit | 使用quit和exit来离开交互式shell |
reset | 重设配置为默认值(自Hive0.10起:HIVE-3202) |
set <key>=<value> | 为特定的配置变量(key)设置值。 |
set | 打印一个被用户或者Hive重写的配置变量清单。 |
set -v | 打印所有的Hadoop和Hive的配置变量。 |
add FILE[S] <filepath> <filepath>* | 增加一个或者多个文件,jar包或者压缩包到分布式缓存的资源列表中。查阅Hive Resources获取更多信息。 |
| add FILE[S] <ivyurl> <ivyurl>* add JAR[S] <ivyurl> <ivyurl>* add ARCHIVE[S] <ivyurl> <ivyurl>* | 自Hive 1.2.0起,增加一个或者多个文件,jar包或者压缩包到分布式缓存的资源列表中使用类似ivy://group:module:version?query_string的lvy URL。查阅Hive Resources获取更多信息。 |
list FILE[S] | 列出已经增加到分布式缓存的资源。查阅Hive Resources获取更多信息。 |
list FILE[S] <filepath>* | 检查是否给定的资源已经被添加到分布式缓存中。查阅Hive Resources获取更多信息。 |
delete FILE[S] <filepath>* | 移除分布式缓存中的一些资源。 |
| delete FILE[S] <ivyurl> <ivyurl>* delete JAR[S] <ivyurl> <ivyurl>* delete ARCHIVE[S] <ivyurl> <ivyurl>* | 自Hive 1.2.0起,移除通过<ivyurl> 添加到分布式缓存中的资源。查阅Hive Resources获取更多信息。 |
! <command> | 通过Hive shell执行一个shell命令。 |
dfs <dfs command> | 通过Hive shell执行一个dfs命令。 |
<query string> | 执行一个Hive查询语句并且输出标准输出。 |
source <filepath> | 在CLI中执行一个脚本。 |
使用样例:
hive> set mapred.reduce.tasks=32; hive> set; hive> select a.* from tab1; hive> !ls; hive> dfs -ls;
Hive 资源
Hive 能够在查询执行时管理可用资源的添加到一个查询会话。这里的资源可能是文件,jar包,或者压缩包。任何本地可用文件都能被增加到会话。
一旦一个资源被增加到会话,在整个Hadoop集群里面Hive查询能够通过它的名字来引用那些本地可用资源(基于map/reduce/transform)。在查询期间,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 Plugins获取更多的用户自定义UDFs
- ARCHIVE压缩包会自动被解压缩然后分发到各个节点。
样例:
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;
版本 1.2.0
自 Hive 1.2.0 起,资源能够被增加和删除通过Ivy URL,格式类似:ivy://group:module:version?query_string
- group – 模块来自的那个模块组,直接转换到一个Maven groupId或者一个lvy组织.
- module – 需要加载的模块名字。直接转化到一个Maven artifactId或者一个lvy artifact.
- version – 将使用的模块的名字。任何版本或者*(for lastest)或者一个lvy范围.
各种参数能够被植入到查询语句中,如何和哪个jars能够被增加到artifactory。参数会以键值对(以‘&’划分)的形式存储。
用例:
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>*同时,我们可以混合<ivyurl>和<filepath>在同一个ADD和DELETE命令中。
ADD { FILE[S] | JAR[S] | ARCHIVE[S] } { <ivyurl> | <filepath> } <ivyurl>* <filepath>*
DELETE { FILE[S] | JAR[S] | ARCHIVE[S] } { <ivyurl> | <filepath> } <ivyurl>* <filepath>*不同的参数如下:
样例:
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.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.15的传递依赖集合,那么在执行上面的命令,A和B交叉部分会被删除。
查询 HIVE-9664 获取更多信息。
如果这些文件已经是Hadoop集群中的所有机器通过一个转换脚本都可用的话,就没必要增加文件到当前会话。例如:
... MAP a.networkid USING 'wc -l' ...
Herewcis an executable available on all machines.... MAP a.networkid USING '/home/nfsserv1/hadoopscripts/tt.py' ...
Herett.pymay be accessible via an NFS mount point that's configured identically on all the cluster nodes.
注:Hive配置参数也能够指定jars,文件和压缩包。查询配置变量获取更多信息
HCatalog CLI
Version
从Hive 0.11.0 版本开始,HCatalog已经随着Hive安装了。
许多hcat但不是所有命令能够被hive命令使用,反之亦然。查阅HCatalog 手册里面的HCatalog 命令行接口文档获取更多信息