前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于Hive命令的7个小技巧,你都清楚吗?

关于Hive命令的7个小技巧,你都清楚吗?

作者头像
大数据梦想家
发布2021-01-27 16:48:02
1.4K0
发布2021-01-27 16:48:02
举报

前言

最近在看冰河大佬写的《海量数据处理与大数据技术实战》,该书涵盖以Hadoop为主的多款大数据技术框架实战的内容,兼顾理论与实操,是市面上难得的技术好书。本篇文章,我就分享一下从中学习到的关于Hive命令的7个小技巧,受益的朋友记得来发三连⭐支持一下哟~

在这里插入图片描述
在这里插入图片描述

Hive命令说明

在Hive提供的所有连接方式中,命令行界面是最常用的一种方式。用户可以使用Hive的命令行对Hive中的数据库、数据表和数据进行各种操作。

1、Hive命令选项

在服务器上启动Hadoop之后,输入“Hive”命令就能够进入Hive的命令行。也可以输入如下命令查看Hive的命令选项:

hive --help

在这里插入图片描述
在这里插入图片描述

可以看到,输出了Hive的一些命令选项,说明用户可以通过--service serviceName的方式启动某个服务。以下信息列出了Hive主要的命令行选项:

在这里插入图片描述
在这里插入图片描述

其中,部分重要选项的说明如下:

(1) cli:命令行界面

(2)hiveserver2:启动Hive远程模式时需要启动的服务,其可以监听来自其他进程的连接

(3)jar:扩展自 hadoop jar 命令,可以执行需要 Hive 环境的应用程序

(4)metastore:启动一个 Hive 元数据服务

接下来,在CentOS6.8服务器的命令行中输入如下命令,查看Hive的CLI选项:

hive --help --service cli

在这里插入图片描述
在这里插入图片描述

选项说明如下:

(1)-d,–define<key=value>:主要用来定义变量,如 -d A=B 或者 --define A=B

(2) --databases:指定使用的数据库名称

(3) -e:从服务器命令行执行SQL语句

(4) -f :从文件中执行SQL语句

(5) -H:–help :输出帮助信息

(6) --hiveconf<property=value>:设置 Hive 的属性值,能够覆盖 hive-site.xml 文件中配置的属性值

(7) --hivevar<key=value>:在Hive命令中替换参数

(8) -i :初始化SQL文件

(9) -S,-- silent:集成模式下开启静默模式

(10) -v,-- verbose:输出详细信息

2、Hive命令的使用

在命令行输入“hive”命令,即可进入Hive命令行终端,如下所示:

在这里插入图片描述
在这里插入图片描述

我们写个查询语句

代码语言:javascript
复制
hive (default)> select * from testdb.student;
OK
student.s_id    student.s_name  student.s_birth student.s_sex
01      永昌    1990-01-01      男
02      鸿哲    1990-12-21      男
03      文景    1990-05-20      男
04      李云    1990-08-06      男
05      妙之    1991-12-01      女
06      雪卉    1992-03-01      女
07      秋香    1989-07-01      女
08      王丽    1990-01-20      女
Time taken: 1.197 seconds, Fetched: 8 row(s)

很多时候,执行一条查询语句并不需要打开命令行界面。此时可以使用“hive -e”形式的命令,如下所示:

代码语言:javascript
复制
[root@node01 hive-1.1.0-cdh5.14.0]# hive -e "select count(*) from testdb.student"
Logging initialized using configuration in jar:file:/export/servers/hive-1.1.0-cdh5.14.0/lib/hive-common-1.1.0-cdh5.14.0.jar!/hive-log4j.properties
Query ID = root_20201108231818_becc7952-05a5-49fc-915d-b6648d429f08
Total jobs = 1
Launching Job 1 out of 1
Number of reduce tasks determined at compile time: 1
In order to change the average load for a reducer (in bytes):
  set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
  set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
  set mapreduce.job.reduces=<number>
Starting Job = job_1604845856822_0001, Tracking URL = http://node01:8088/proxy/application_1604845856822_0001/
Kill Command = /export/servers/hadoop-2.6.0-cdh5.14.0/bin/hadoop job  -kill job_1604845856822_0001
Hadoop job information for Stage-1: number of mappers: 1; number of reducers: 1
2020-11-08 23:18:36,501 Stage-1 map = 0%,  reduce = 0%
2020-11-08 23:18:37,649 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 1.88 sec
2020-11-08 23:18:38,739 Stage-1 map = 100%,  reduce = 100%, Cumulative CPU 2.18 sec
MapReduce Total cumulative CPU time: 2 seconds 180 msec
Ended Job = job_1604845856822_0001
MapReduce Jobs Launched:
Stage-Stage-1: Map: 1  Reduce: 1   Cumulative CPU: 2.18 sec   HDFS Read: 11544 HDFS Write: 580032 SUCCESS
Total MapReduce CPU Time Spent: 2 seconds 180 msec
OK
_c0
8

如果不需要输出过多的日志信息,则可以在 hive 后面加 -S 选项,如下所示:

代码语言:javascript
复制
[root@node01 hive-1.1.0-cdh5.14.0]# hive -S -e "select count(*) from testdb.student"
_c0
8

如果需要一次性执行多条语句,可以将多条语句保存到以 .hql 结尾的文件中,如下所示:

代码语言:javascript
复制
vim test.sql
select count(*) from testdb.student;
select * from testdb.student;

使用hive -f命令来执行 hql 文件中的语句,如下所示:

代码语言:javascript
复制
[root@node01 tmpfile]# hive -f test.sql
_c0
8
Time taken: 11.551 seconds, Fetched: 1 row(s)
OK
student.s_id    student.s_name  student.s_birth student.s_sex
01      永昌    1990-01-01      男
02      鸿哲    1990-12-21      男
03      文景    1990-05-20      男
04      李云    1990-08-06      男
05      妙之    1991-12-01      女
06      雪卉    1992-03-01      女
07      秋香    1989-07-01      女
08      王丽    1990-01-20      女
Time taken: 0.071 seconds, Fetched: 8 row(s)

可以用“–”添加注释,如下所示:

代码语言:javascript
复制
hive (default)> select * from testdb.student  -- 测试查询数据;
OK
student.s_id    student.s_name  student.s_birth student.s_sex
01      永昌    1990-01-01      男
02      鸿哲    1990-12-21      男
03      文景    1990-05-20      男
04      李云    1990-08-06      男
05      妙之    1991-12-01      女
06      雪卉    1992-03-01      女
07      秋香    1989-07-01      女
08      王丽    1990-01-20      女
Time taken: 0.073 seconds, Fetched: 8 row(s)

3、hiverc文件

在${HIVE_HOME}/bin目录下有个.hiverc文件,它是隐藏文件,我们可以用Linux的ls -a命令查看。我们在启动Hive的时候会去加载这个文件中的内容,所以我们可以在这个文件中配置一些常用的参数,如下:

代码语言:javascript
复制
cd /export/servers/hive-1.1.0-cdh5.14.0/bin
vim .hiverc



select * from testdb.student;

set hive.cli.print.current.db=true;
#查询出来的结果显示列的名称
set hive.cli.print.header=true;
#启用桶表
set hive.enforce.bucketing=true;
#压缩hive的中间结果
set hive.exec.compress.intermediate=true;
#对map端输出的内容使用BZip2编码/解码器
set mapred.map.output.compression.codec=org.apache.hadoop.io.compress.BZip2Codec;
#压缩hive的输出
set hive.exec.compress.output=true;
#对hive中的MR输出内容使用BZip2编码/解码器
set mapred.output.compression.codec=org.apache.hadoop.io.compress.BZip2Codec;
#让hive尽量尝试local模式查询而不是mapred方式
set hive.exec.mode.local.auto=true;

例如,我们这里在.hiverc文件中添加了一句HQL查询语句,那么每次我们启动hive命令行,都会自动去执行这个命令。

在这里插入图片描述
在这里插入图片描述

可以看到,输入“hive”命令启动 Hive 命令行,自动执行了 .hiverc 文件中的语句。

当我们需要频繁使用某些命令时,就可以将这些命令保存在.hiverc文件中。

4、Hive操作命令历史

Hive将最近执行的 10000 条命令记录到当前用户的 home 目录下的.hivehistory文件中,用户可以输入如下命令查看这个文件(当前用户为root):

cat vim /root/.hivehistory

在这里插入图片描述
在这里插入图片描述

5、在Hive命令行执行系统命令

在Hive命令行下执行操作系统命令非常简单,只需要在执行的系统命令前加上“!”,并以“;”结尾即可,如下所示:

代码语言:javascript
复制
hive (default)> !echo "hello world";
"hello world"
hive (default)> !jps;
11985 ResourceManager
18308 Jps
12420 RunJar
12085 NodeManager
12519 RunJar
11545 NameNode
18138 RunJar
11837 SecondaryNameNode
11646 DataNode

6、在Hive命令行执行Hadoop命令

在Hive命令行可以执行 Hadoop 命令,只需要将 Hadoop 命令中的关键字 hdfs 去掉,最后添加一个“;”即可。

例如,在操作系统命令行执行 Hadoop 的如下命令:

代码语言:javascript
复制
[root@node01 ~]# hdfs dfs -ls /
Found 3 items
drwxr-xr-x   - root supergroup          0 2020-01-03 02:28 /aa
drwxr-xr-x   - PC   supergroup          0 2020-03-30 10:33 /aaa
drwxr-xr-x   - root supergroup          0 2019-12-27 05:42 /abc

在Hive命令行执行 Hadoop 命令,如下所示:

代码语言:javascript
复制
hive (default) > dfs -ls /;
Found 3 items
drwxr-xr-x   - root supergroup          0 2020-01-03 02:28 /aa
drwxr-xr-x   - PC   supergroup          0 2020-03-30 10:33 /aaa
drwxr-xr-x   - root supergroup          0 2019-12-27 05:42 /abc

可以看到,得出的结果是一致的。

7、在 Hive 命令行显示查询字段名

使用 Hive 命令查询数据时,可以显示查询数据的字段名称,此时需要将 Hive 的 hive.cli.print.header 属性设置为 true,默认为 false,如下所示:

代码语言:javascript
复制
hive (default)> set hive.cli.print.header=true;
hive (default)> select * from testdb.student;
OK
student.s_id    student.s_name  student.s_birth student.s_sex
01      永昌    1990-01-01      男
02      鸿哲    1990-12-21      男
03      文景    1990-05-20      男
04      李云    1990-08-06      男
05      妙之    1991-12-01      女
06      雪卉    1992-03-01      女
07      秋香    1989-07-01      女
08      王丽    1990-01-20      女
Time taken: 0.056 seconds, Fetched: 8 row(s)

小结

本篇文章主要分享了关于Hive的7个小技巧,后边会持续为大家分享优质有趣的内容,受益或感兴趣的朋友记得三连支持一下呀~你知道的越多,你不知道的就越多!我是Alice,我们下一期见!

一键三连,养成习惯~

文章持续更新,可以微信搜一搜「 猿人菌 」第一时间阅读,思维导图,大数据书籍,大数据高频面试题,海量一线大厂面经…期待您的关注!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-11-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • Hive命令说明
    • 1、Hive命令选项
      • 2、Hive命令的使用
        • 3、hiverc文件
          • 4、Hive操作命令历史
            • 5、在Hive命令行执行系统命令
              • 6、在Hive命令行执行Hadoop命令
                • 7、在 Hive 命令行显示查询字段名
                • 小结
                相关产品与服务
                大数据
                全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档