数仓工具—Hive命令行(7)

Hive 命令行

hive 命令行 是hive 提供的一个交互式终端,其实就是一个shell 脚本,主要用来做交互式查询

但是自从Hive 0.11引入了HiveServer2之后,就引入了另外一个终端,那就是beeline,它是基于JDBC 的SQL 客户端,所以hive 命令终端慢慢的也被弃用

hive-cli是一个遗留工具,它有两个主要的使用场景。第一个是它作为Hadoop上SQL的重客户端,第二个是它作为hiveserver(也就是现在说的"HiveServer1")的命令行工具。但是自从hive1.0 开始hiveserver已被弃用并从代码库中删除,并被替换为HiveServer2因此第二个使用场景不再适用。对于第一个使用场景,Beeline提供或应该提供相同的功能,但实现方式与hivecli不同。

本来hive-cli应该被弃用,但是因为hive-cli的广泛使用,所以社区做了基于beeline的新的客户端,这样做的目的是使用hive-cli不需要对现有用户脚本进行任何或最小的更改。因为新的hive-cli某些特性还是使用的是旧的hive-cli,所以你可以在使用如下配置来开启

export USE_DEPRECATED_CLI=false

每次当你启动一个hive 的客户端的时候,你可以看到机器上起了一个对应的进程,你可以多起几个试试看

-e 行里模式

在 -e 参数的加持下,我们可以不用进入hive 的命令行,而是直接使用hive 命令进行数据查询,这个时候sql 就是我们在命令行里输入的SQL,下面我们感受一下

hive -e 'select a.foo from pokes a'

你也可以在命令行里指定其他hive 的参数

hive -e 'select a.foo from pokes a' --hiveconf hive.exec.scratchdir=/opt/my/hive_scratch --hiveconf mapred.reduce.tasks=1

但是这种情况下我们用的更多是重定向,也就是将我们的执行结果重定向到文件里,尤其是输出内容比较多的时候

 hive -e "select * from ods.u_data_new limit 10" > out.txt

-f 文件模式

Hive可以运行保存在文件里面的一条或多条的语句,只要用-f参数,一般情况下,保存这些Hive查询语句的文件通常用.q或者.hql后缀名,但是这不是必须的,你也可以保存你想要的后缀名。

hive -f /home/my/hive-script.sql

这种方式是企业比较常用的方式,就是我们使用文件的形式将我们的ETL SQL 保存下来,然后交给我们的调度系统

source 执行外部sql 模式

这种方式可以在我们进入hive 的命令行之后执行SQL,但是说实话,这种看起来比较优美,但是却用的很少

hive> source /home/wyp/Documents/test.sql

set 设置模式

这个命令可以让我们进入命令行之后就进行很多的设置,其实就是设置很多参数的值,从而达到调节我们sql 的运行环境

set 查看全部配置

在我们没有其他参数,单独使用这个命令的时候,就是列出我们的全部参数设置,这个是当前的最新参数也就是说可能是我们覆盖默认配置之后的值

set 属性名称=属性值

我们可以通过设置 set key=value 的这种模式,来定义属性值,例如set userName=kingcall; key 如果已经存在则覆盖,不存在则创建,key 可以是任意的字符串

设置成功之后,我们可以通过set来查看属性的设置情况

下面我们看一个很有用的设置set hive.cli.print.header=true 输出表头

这个我们更多的是用在资源的调节上,例如set mapred.reduce.tasks=32;

reset

重置参数,这个就没有什演示的必要了

set -v

只列出Hadoop 和 Hive 的属性值,因为我们知道我们可以定义任意属性,所以这个命令还是有意义的。

资源管理

add

添加文件、jar 包、分布式文件到分布式缓存中,如果你写过UDF 的话,你就应该知道这个命令了

add FILE[S] <ivyurl> <ivyurl>* add JAR[S] <ivyurl> <ivyurl>* add ARCHIVE[S]<ivyurl> <ivyurl>*

创建新表,准备数据

CREATE TABLE ods.u_data (  userid INT,  movieid INT,  rating INT,  unixtime STRING)ROW FORMAT DELIMITEDFIELDS TERMINATED BY '\t'STORED AS TEXTFILE;
wget http://files.grouplens.org/datasets/movielens/ml-100k.zipunzip ml-100k.zip
LOAD DATA LOCAL INPATH '/Users/liuwenqiang/ml-100k/u.data' OVERWRITE INTO TABLE ods.u_data;

创建脚本

import sysimport datetimefor line in sys.stdin:  line = line.strip()  userid, movieid, rating, unixtime = line.split('\t')  weekday = datetime.datetime.fromtimestamp(float(unixtime)).isoweekday()  print('\t'.join([userid, movieid, rating, str(weekday)]))

创建新表、加载脚本、执行sql 使用脚本

CREATE TABLE u_data_new (  userid INT,  movieid INT,  rating INT,  weekday INT)ROW FORMAT DELIMITEDFIELDS TERMINATED BY '\t';add file /Users/liuwenqiang/weekday_mapper.py;INSERT OVERWRITE TABLE u_data_newSELECT  TRANSFORM (userid, movieid, rating, unixtime)  USING 'python weekday_mapper.py'  AS (userid, movieid, rating, weekday)FROM u_data;

list

列出被增加到分布式缓存中的资源

list FILE[S]list JAR[S]list ARCHIVE[S]

delete

删除被增加到分布式缓存中的资源

quit/exit

退出终端

!执行模式

这个还是比较有用的,可以让我们在hive 的命令行里面执行shell 的命令。

执行shell 命令

例如下面我执行这个test.sql 的时候,我用的不是全路径,那我是怎么知道它是在当前路径(你执行hive命令的目录)下的呢

那是因为我执行了ls 看了一下,确定是它是在当前目录的

dfs

指向Hadoop 相关的命令,你可以明显的感觉到比你在shell 里面执,下面我们用两种方式执行了一个同样目的的命令,第一种是我们介绍的执行shell 命令的模式,第二种是我们现在介绍的这种

compile

总结

命令 注释
source FILE 在CLI中执行一个脚本。
set = 为一个特定的配置变量设置一个值。注:如果你忘了怎么拼写那个变量的名字,CLI将不会展示一个错误。
set -v 打印所有的Hadoop和Hive的配置变量。
set Prints a list of configuration variables that are overridden by the user or Hive.打一个被用户或者Hive重写的配置变量列表。
reset 重新设置配置项为默认值(Hive 0.10请查阅HIVE-3202)。任何在命令行被使用设置命令或者-hiveonf的参数将会恢复默认值。注:由于历史原因,这个不适用于那些在命令行中用hiveconf.做前缀的关键字配置参数。
quit exit 使用quit或者exit命令来离开交互shell窗口
list FILE[S] * list JAR[S] * list ARCHIVE[S] * 检查是否给定的资源都已经增加到分布式是缓存中了。查阅Hive Resource可以看到更多的信息。
list FILE[S] list JAR[S] list ARCHIVE[S] 列出被增加到分布式缓存中的资源。查阅Hive Resources可以得到更多信息
dfs 在Hive shell窗口执行一个dfs命令。
delete FILE[S] * delete JAR[S] * delete ARCHIVE[S] * Hive1.2.0shanchu分布式缓存中的资源。查阅HiveResource获取更多信息
delete FILE[S] * delete JAR[S] * delete ARCHIVE[S] * 删除分布式缓存中的资源
compile <groovy string> AS GROOVY NAMED 这里允许内联代码被编译像UDF(Hive 0.13.0)一样被使用。查阅Hive中的动态编译器
add FILE[S] * add JAR[S] * add ARCHIVE[S] * Hive 1.2.0中使用一个类似格式:ivy://group:module:version?query_string的lvy URL增加一个或者更多个文件、jar包或者压缩包到分布式缓存的资源列表中。查阅Hive Resources获取更多信息。
add FILE[S] * add JAR[S] * add ARCHIVE[S] * Adds one or more files, jars, or archives to the list of resources in the distributed cache. See Hive Resources for more information.增加一个或者多个文件,jar包,或者压缩包到分布式缓存中。chax
执行Hive查询并且打印标准输出。
! 在Hive中执行一个Shell命令

来源:https://www.icode9.com/content-4-796301.html

(0)

相关推荐

  • 理解Spark SQL(三)—— Spark SQL程序举例

    上一篇说到,在Spark 2.x当中,实际上SQLContext和HiveContext是过时的,相反是采用SparkSession对象的sql函数来操作SQL语句的.使用这个函数执行SQL语句前需要 ...

  • 录制命令行工具--asciinema

    表白:黑白圣堂血天使,天剑鬼刀阿修罗.  讲解对象:/录制命令行工具--asciinema 作者:融水公子 rsgz 命令行大全 命令行大全 http://www.rsgz.top/post/778. ...

  • python笔记42-http请求命令行工具(httpie)

    前言 通常我们需要快速的测试某个接口通不通,一般linux上用curl去发http请求,但是这个命令行工具语法有点复杂了,不够直观. python有一个给人类使用的requests库,非常的简单方便. ...

  • 牛逼的终端命令行工具,助你成为 10 倍程序员 !

    大家好,我是小猿. 终端是程序员的必备工具之一,10 倍程序员的终端跟普通程序员有何不同?本文将介绍许多牛逼且实用的开源工具,用上这些工具后你不一定会变成 10 倍程序员,但绝对能够让你感觉自己像个 ...

  • 使用 SAP UI5 CLI 命令行工具构建和运行 SAP UI5 应用

    源代码 Github 地址:https://github.com/wangzixi-diablo/ui5-for-kyma 本地路径:C:\Code\frontend-ui5-mssql 本文介绍 S ...

  • linux centos7 NetworkManager 命令行网络配置工具 nmcli 简介-1

    目录 nmcli命令与配置文件对应关系 修改配置文件的主机名 查看网卡信息 显示具体的网络接口信息 显示所有设配状态 修改配置文件执行生效 显示所有活动连接 删除一个网卡连接 添加一个网卡连接 网络接 ...

  • Fluentd 命令行工具 fluent-cat 介绍

    "一个用于测试插件的命令行工具" fluent-cat 是 Fluentd 提供的一个命令行工具,特别适合于对插件功能的验证性测试. 它主要和 in_forward / in_un ...

  • iTerm--比Terminal(终端)更好用的命令行工具

    Terminal是Mac自带的命令行工具,对于开发者来说,是不得不使用的开发工具之一.然而Terminal的外观设置功能比较少,这对于每天都得跟它相处很久的我们来说,这是一个很大的悲伤.当然,你也可以 ...

  • TaxonKit:小巧、高效、实用的NCBI分类学数据命令行工具

    TaxonKit: 小巧.高效.实用的NCBI分类学数据命令行工具集 宏基因组按:NCBI物种分类注释信息格式复杂,存在层级不整齐.缺失.名称变动等问题,在使用中存在一定困难.最近发现了一款分类信息查 ...

  • 网络/命令行抓包工具tcpdump详解

    概述 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的 ...