谈笑间学会大数据-Hive命令

50 篇文章 3 订阅
37 篇文章 1 订阅

Hive命令

目录

Hive命令

前言

变量和属性

Hive中“一次使用”命令

执行文件中的SQL

如何在hive cli中执行shell命令或访问hdfs呢?

hiverc文件

hive cli 小技巧

自动补全命令

查看执行命令历史

如何注释SQL?


前言

Hive是有命令行模式的,你知道吗?很实用,很适合用来学习一些语法呀,简单的操作鸭...不用烦琐的去写代码、打包、上传、运行、就可以实现的哦~ 

$HIVE_HOME/bin/hive这个shell命令(后面我们省略称为hive)是通向包括命令行界面也就是CLI等Hive服务的通道。我们假定用户已经将$HIVE_HOME/bin加入到环境变量PATH中了,则用户只需要在shell提示符中输入hive,就可以使用户的shell环境(例如bash环境)找到这个命令。切记启动hive的话,需要启用hadoop哦,如果只是简单操作不涉及统计类的操作,不会启用MapReduce任务,也可以不启动yarn哦~

start-dfs.sh
jps
hive --help 

需要注意ServiceList后面的内容。这里提供了几个服务,包括我们绝大多数时间将要使用的CLI。用户可以通过servicename服务名称来启用某个服务,尽管其中有几个服务也是有快捷启动方式的。

下面看下hive自带的各个服务及应用说明,有几个我也没用过,后续用了再补充哈~

Hive服务
选项名称描述
beeline 新一代hive客户端(相对于hive命令,远程客户端,可以配置用户名/密码/ip服务器等)
hiveserver2Hive Server2监听来自其他进程的Thrift连接的一个守护进程
metastore 启动一个扩展的Hive元数据服务,可以供多个客户端使用
cleardanglingscratchdir hive异常结束时,可能有一些临时目录未清理,执行此命令清理
cli命令行界面用户定义表,执行查询等。如果没有指定其他服务,这个是默认的服务
hbaseimport 没用过,不太清楚
hbaseschematool 没用过,不太清楚
help 查看帮助手册
hiveburninclient 执行几条测试语句,貌似没啥用
hplsql plsql支持
hwiHive Web界面是一个可以执行查询命令和其他命令的简单的Web界面,这样可以不用登录到集群中的某台机器上使用Cli来进行查询
jar hadoop jar 命令的一个扩展,这样可以执行需要Hive环境的应用
lineage 查看血缘关系
llap 启动llap
llapdump 没用过,不太清楚
llapstatus 没用过,不太清楚
metatool metastore元数据管理
orcfiledump 查看orc文件,同下
rcfilecat 一个可以打印出RCFile格式文件内容的工具
schemaTool metastore数据库schema管理
version 查看Hive的版本信息

查看某个服务的帮助手册方式:hive --help --service cli   (cli替换成别的服务即可查询啦)

变量和属性

--definekey=value实际上和hivevarkey=value是等价的。二者都可以让用户在命令行定义用户自定义变量以便在Hive脚本中引用,来满足不同情况的执行。这个功能只有Hivev0.8.0版本和之后的版本才支持。

当用户使用这个功能时,Hive会将这些键值对放到hivevar命名空间,这样可以和其他3种内置命名空间(也就是hiveconf、system和env),进行区分。

变量或者属性是在不同的上下文中使用的术语,但是在大多数情况下它们的功能是相同的。

下表描述了命名空间选项:

Hive中变量和属性命名空间
命名空间使用权限描述
hivevar可读写用户自定义变量
hiveconf可读写hive相关的配置属性
system可读写java定义的配置属性
env只读Shell环境定义的环境变量

Hive变量内部是以Java字符串的方式存储的。用户可以在查询中引用变量。Hive会先使用变量值替换掉查询的变量引用,然后才会将查询语句提交给查询处理器。

在CLI中,可以使用SET命令显示或者修改变量值。例如,下面这个会话先显示一个变量的值,然后再显示env命名空间中定义的所有变量!为了更清晰地表现,我们省略掉了这个Hive会话中的一些输出信息,而且在每行命令之间人为地增加了一个空白行:

set ;
set -v ;

如果不加v标记,set命令会打印出命名空间hivevar,hiveconf,system和env中所有的变量。使用v标记,则还会打印Hadoop中所定义的所有属性,例如控制HDFS和MapReduce的属性。

set命令还可用于给变量赋新的值。我们特别看下hivevar命名空间以及如何通过命令行定义一个变量:

我们可以看到,前缀hivevar:是可选的。

hivevar标记和define标记是相同的。在CLI中查询语句中的变量引用会先被替换掉然后才会提交给查询处理器。思考如下这个CLI会话(在v0.8.*版本中使用): (变量在cli中的使用)

我们来看看hiveconf选项,Hivev0.7.*版本支持这个功能,其用于配置Hive行为的所有属性。我们用它来指定Hivev0.8.0版本中增加的hive.cli.print.current.db属性。开启这个属性可以在CLI提示符前打印出当前所在的数据库名(第4.1节“Hive中的数据库”中有关于Hive数据库的更多信息),默认的数据库名为default。这个属性的默认值是false。

我们甚至可以增加新的hiveconf属性,这个功能只有Hivev0.8.0版本前的版本才支持:

我们还有必要了解一下system命名空间,Java系统属性对这个命名空间内容具有可读可写权利;而env命名空间,对于环境变量只提供可读权限:

和hivevar变量不同,用户必须使用system:或者env:前缀来指定系统属性和环境变量。env命名空间可作为向Hive传递变量的一个可选的方式,特别是对于Hivev0.7.*版本。考虑如下这个例子:

Hive中所有的内置属性都在$HIVE_HOME/conf/hive-default.xml.template中列举出来了,这是个“样例”配置文件。配置文件中还说明了这些属性的默认值。

Hive中“一次使用”命令

用户可能有时期望执行一个或者多个查询(使用分号分隔),执行结束后hiveCLI立即退出。Hive提供了这样的功能,因为CLI可以接受e命令这种形式。如果表mytable具有一个字符串字段和一个整型字段,我们可以看到如下输出:

首先造一些测试数据:

hive -e "执行sql";
 hive -e "select * from stu limit 2";

临时应急时可以使用这个功能将查询结果保存到一个文件中。增加S选项可以开启静默模式,这样可以在输出结果中去掉“OK”和“Timetaken”等行,以及其他一些无关紧要的输出信息,如下面这个例子:

hive -S -e "select * from stu limit 2" > /tmp/student.txt

cat /tmp/student.txt

需要注意的是,Hive会将输出写到标准输出中。上面例子中的shell命令将输出重定向到本地文件系统中,而不是HDFS中。

最后,当用户不能完整记清楚某个属性名时,可以使用下面这个非常有用的技巧来模糊获取这个属性名而无需滚动set命令的输出结果进行查找。假设用户没记清哪个属性指定了管理表的“warehouse(数据仓库)”的路径,通过如下命令可以查看到:

执行文件中的SQL

  • hive -f 'xxx.sql'
  • source 'xxx.sql'

执行文件中的sql有两种写法如上,hive -f 和 hive -e 类似,在命令行或者shell中执行即可,source需要登录进入hive cli客户端以后才可以,并且尽可能的要输入sql文件的全路径,如下:

如何在hive cli中执行shell命令或访问hdfs呢?

  • 执行shell:! + ‘shell命令’ + ‘;’
  • 执行hdfs:dfs + ‘命令’ + ‘;’

hiverc文件

我们最后将要讨论的CLI选项是 -i 文件名(初始化sql文件内容,类似于带参启动hive cli一样)。这个选项允许用户指定一个文件,当CLI启动时,在提示符出现前会先执行这个文件。Hive会自动在HOME目录下寻找名为.hiverc的文件,而且会自动执行这个文件中的命令(如果文件中有的话)。

hive cli 小技巧

自动补全命令

如果用户在输入的过程中敲击Tab制表键,那么CLI会自动补全可能的关键字或者函数名。例如,如果用户输入SELE然后按Tab键,CLI将自动补全这个词为SELECT。

查看执行命令历史

用户可以使用上下箭头来滚动查看之前的命令。事实上,每一行之前的输入都是单独显示的,CLI不会把多行命令和查询作为一个单独的历史条目。Hive会将最近的100,00行命令记录到文件$HOME/.hivehistory中。

如果用户想再次执行之前执行过的某条命令,只需要将光标滚动到那条记录然后按Enter键就可以了。如果用户需要修改这行记录后再执行,那么需要使用左右方向键将光标移动到需要修改的地方然后重新编辑修改就可以了。修改后用户直接敲击Enter键就可以提交这条命令而无需切换到命令尾。

大多数的导航按键使用的Contrl+字母的命令和bashshell中是相同的(例如,Control+A代表光标移到到行首,Control+B代表光标移动到行尾)。然而,类似的“元操作”Option或者Escape键就不起作用了(例如,Option+F一次向前移动一个单词这样的命令)。相似地,Delete删除键会删除光标左边的字符,而ForwardDelete回格键不会删除掉光标当前所在的字符。

如何注释SQL?

hive的注释和sql注释是一样的~  你学会了吗?

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MrZhangBaby

请博主喝杯奶茶

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值