Hive命令行接口(CLI)提供了执行Hive QL、设置参数等功能,要启用CLI只须要在命令行下执行$HIVE_HOME/bin/hive命令。在命令下执行hive –H能够查看CLI选项,以下表所示:shell
-d,--define <key=value>数据库 |
应用于Hive命令的变量替换,如-d A=B或者--define A=B缓存 |
--database <databasename>服务器 |
指定所使用的数据库分布式 |
-e <quoted-query-string>oop |
执行命令行指定SQL学习 |
-f <filename>ui |
执行文件中的SQLspa |
-H,--help命令行 |
打印帮助信息 |
-h <hostname> |
链接远程主机上的Hive服务器 |
--hiveconf <property=value> |
使用给定变量的值 |
--hivevar <key=value> |
应用于Hive命令的变量替换,如--hivevar A=B |
-i <filename> |
初始化SQL文件 |
-p <port> |
在指定端口上链接Hive服务器 |
-S,--silent |
在交互式shell下启动Silent模式 |
-v,--verbose |
Verbose模式,在控制台回显执行的SQL |
当使用参数-e或者-f时,hive以batch模式执行SQL语句,当hive不带-e或者-f时,hive进入交互式模式。下面先看一些batch模式的例子,而后再学习交互式模式下的一些命令。
1. 第一个例子是在命令行下执行SQL语句。
[hadoop@hadoop ~]$ hive -e 'show tables' Logging initialized using configuration injar:file:/home/hadoop/hive-0.13.0/lib/hive-common-0.13.0.jar!/hive-log4j.properties OK page_view pokes Time taken: 1.619 seconds, Fetched: 2 row(s)
2. 第二个例子是在Silent模式下将数据转储到指定的文件中。
[hadoop@hadoop~]$ hive -S -e 'show tables' > a.txt [hadoop@hadoop~]$ cat a.txt page_view pokes
当hive不带-e或者-f时,hive进入交互式模式,在交互式模式下使用分号终止命令的输入,开始执行命令,脚本中的命令能够使用--前缀指定。交互模式下的常见命令以下表所示:
命令 |
描述 |
quit |
使用quit或者exit命令离开交互模式。 |
reset |
重置配置参数为默认值 |
set <key>=<value> |
设置配置参数为指定的值,注意若是拼错参数名,CLI不提示错误。 |
set |
打印被覆盖默认值的参数。 |
set -v |
打印全部Hadoop和Hive的配置参数。 |
add FILE[S] <filepath> <filepath>* |
添加一个或者多个文件、jar或者归档到分布式缓存中的资源列表中。 |
list FILE[S] |
列出已经添加到分布式缓存中的资源。 |
list FILE[S] <filepath>* |
检查指定的资源是否已经添加到分布式缓存中。 |
delete FILE[S] <filepath>* |
删除分布式缓存中的资源。 |
! <command> |
在CLI中执行shell命令。 |
dfs <dfs command> |
在CLI中执行HDFS命令。 |
<query string> |
执行Hive语句并打印结果到标准输出。 |
source FILE <filepath> |
在CLI中执行脚本文件。 |
下面是上述命令的一下例子:
hive> setmapred.reduce.tasks=32; hive> setmapred.reduce.tasks; mapred.reduce.tasks=32 hive> dfs -ls/user/hive/; Found 1 items drwxr-xr-x - hadoop supergroup 0 2014-05-23 16:43/user/hive/warehouse hive> select* from page_view; OK Time taken: 8.06seconds hive> listfiles; /home/hadoop/a.txt hive> reset; hive> setmapred.reduce.tasks; mapred.reduce.tasks=-1
上面提到的add、list、delete命令分别向分布式缓存添加、列出和删除普通文件、jar文件和归档文件,那这些文件有什么用途呢?这些文件做为会话的额外资源在查询执行时能够使用,任何本地可访问的文件均可以添加到会话中。一旦文件被加入到会话中,Hive查询能够经过文件资源的名称引用它(在map/reduce/transform子句中)而且在执行时该资源文件在整个Hadoop集群上都是本地可用的。Hive在查询执行时使用Hadoop的分布式缓存将资源分布到集群中的全部机器上。
普通文件资源一般是像转换脚本一类的文件,该类型的文件仅仅被加入到分布式缓存中。JAR文件也会加入到classpath中,这就要求依次引用包含诸如UDF的对象。归档文件在分布时自动解压缩。