Hive学习之Hive CLI,
Hive命令行接口(CLI)提供了执行Hive QL、设置参数等功能,要启用CLI只需要在命令行下执行$HIVE_HOME/bin/hive命令。在命令下执行hive –H可以查看CLI选项,如下表所示:
|
-d,--define <key=value> |
应用于Hive命令的变量替换,如-d A=B或者--define A=B |
|
--database <databasename> |
指定所使用的数据库 |
|
-e <quoted-query-string> |
执行命令行指定SQL |
|
-f <filename> |
执行文件中的SQL |
|
-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的对象。归档文件在分布时自动解压缩。