HIVE分桶、动态分区、LATERAL VIEW 视图索引、GUI安装

本文详细介绍了HIVE中的动态分区和分桶,包括如何开启支持、创建规则以及数据加载。此外,还讲解了LATERAL VIEW的使用,视图和索引的创建与管理。最后提到了HIVE的不同运行方式,包括命令行、脚本和GUI接口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HIVE分桶、动态分区、LATERAL VIEW 视图索引、GUI安装

一、hive参数

hive当中的参数、变量,都是以命名空间开头

通过${}方式进行引用,其中system、env下的变量必须以前缀开头

命名空间读写权限含义
hiveconf可读写hive-site.xml当中的各配置变量 例:hive --hiveconf hive.cli.print.header=true
system可读写系统变量,包含JVM运行参数等 例:system:user.name=root
env只读环境变量 例:env:JAVA_HOME
hivevar可读写例:hive -d val=key

hive 参数设置方式

1、修改配置文件 ${HIVE_HOME}/conf/hive-site.xml

2、启动hive cli时,通过–hiveconf key=value的方式进行设置

例:hive --hiveconf hive.cli.print.header=true

3、进入cli之后,通过使用set命令设置

​ 在hive CLI控制台可以通过set对hive中的参数进行查询、设置

​ set设置: set hive.cli.print.header=true;

​ set查看: set hive.cli.print.header

hive参数初始化配置

当前用户家目录下的.hiverc文件 如: ~/.hiverc

如果没有,可直接创建该文件,将需要设置的参数写到该文件中,hive启动运行时,会加载改文件中的配置。

hive历史操作命令集 ~/.hivehistory

二、动态分区与分桶

分区 的效果:根据不同分区字段把数据划分到不同的子目录进行管理

分桶 的效果:将一个目录下的一个数据文件划分成多个数据文件

​ 在未导入的数据文件中划分更细致管理

动态分区

动态分区,可以理解为根据数据的某一字段进行分区,例如不同的年龄

​ **Tips:**因为LOAD DATA LOCAL INPATH ‘/root/data1’ INTO TABLE tablename partition (age=10);导入是整个数据(将本地文件先移动到hdfs上再移动到tablename的目录下),分区也是对整个数据进行分区,所以此方法不适合在动态分区中导入数据。

​ 普通分区是将整个数据上传之后再对整个数据进行分区

1 开启支持动态分区

​ set hive.exec.dynamic.partition=true;

​ 默认:true

​ set hive.exec.dynamic.partition.mode=nostrict;

Tips:动态分区是非严格模式

​ 默认:strict(至少有一个分区列是静态分区)

[外链图片转存失败(img-RNEbF9od-1563925142943)(C:\Users\86158\AppData\Roaming\Typora\typora-user-images\1561688412120.png)]

根据需求调整其他相关参数

​ set hive.exec.max.dynamic.partitions.pernode;

​ 每一个执行mr节点上,允许创建的动态分区的最大数量(100)

​ set hive.exec.max.dynamic.partitions;

​ 所有执行mr节点上,允许创建的所有动态分区的最大数量(1000)

​ set hive.exec.max.created.files;

​ 所有的mr job允许创建的文件的最大数量(100000)

2 创建动态分区步骤

​ 开启支持分区后,先创建分区表21,再创建普通表22,先将数据导入普通表22中,将分区字段定义为普通字段,再通过语句:

from 22 insert overwrite table 21 partition(xx,oo) select (全部字段名)distribute by xx,oo;

将普通表数据导入分区表

[外链图片转存失败(img-pbZAAVqz-1563925142943)(C:\Users\86158\AppData\Roaming\Typora\typora-user-images\1561687602951.png)]

from psn21

insert overwrite table psn22 partition(age, sex)

select id, name, age, sex, likes, address distribute by age, sex;

分桶

分桶表 是对指定列的列值取哈希值的方式,将不同数据放到不同文件中存储。

​ 有几个桶hdfs上有几个分目录文件

​ 应用场景:抽样(数据在分桶时打散),表关联数据(相同/倍数关系的桶号相关联)

​ eg:如果是按照数据中的id进行分3桶管理,则取模后存放在0,1,2三个文件中

1 开启支持分桶规则

​ set hive.enforce.bucketing=true;

​ 默认:false;设置为true之后,mr运行时会根据bucket的个数自动分配reduce task个数。(用户也可以通过mapred.reduce.tasks自己设置reduce任务个数,但分桶时不推荐使用)

​ 注意:一次作业产生的桶(文件数量)和reduce task个数一致。

[外链图片转存失败(img-hEzCnSF1-1563925142943)(C:\Users\86158\AppData\Roaming\Typora\typora-user-images\1561689818092.png)]

2 建表规则:

[CLUSTERED BY (col_name, col_name, …) [SORTED BY (col_name [ASC|DESC], …)] INTO num_buckets BUCKETS]

3 分桶表中加载数据规则

insert into table bucket_table select columns from tbl;

insert overwrite table bucket_table select columns from tbl;

4 TABLESAMPLE语法

TABLESAMPLE(BUCKET x OUT OF y)

x:表示从哪个bucket开始抽取数据 取 x (x+y …)桶的数据

y:必须为该表总bucket数的倍数或因子 因子代表只取x桶的部分数据

​ eg1:桶表 抽样查询

select * from bucket_table tablesample(bucket 1 out of 4 on columns);

​ eg2:

当表中总bucket桶数为32时

tablesample(bucket 2out of 16),抽取

共抽取2(32/16)个bucket桶的数据,抽取第2、第18(16+2)2个bucket桶的数据

​ eg3:

当表中总bucket桶数为32时

tablesample(bucket 3 out of 8),抽取

x=3 从3号桶取数据

32/8=4 取4个桶

3,,3+8=11,11+8=19,19+8=27

​ eg4:

当表中总bucket桶数为32时

TABLESAMPLE(BUCKET 3 OUT OF 256),抽取

x=3 从3号桶取数据

32/256=1/8 取1/8个桶

5 创建分桶(以抽样应用场景为例)

开启分桶规则后,先创建普通表,导入数据进普通表。再创建分桶表,加载数据。

​ eg:

创建分桶表

CREATE TABLE psnbucket( id INT, name STRING, age INT)

CLUSTERED BY (age) INTO 4 BUCKETS

ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘,’;

加载数据:

insert into table psnbucket select id, name, age from psn31;

抽样

select id, name, age from psnbucket tablesample(bucket 2 out of 4 on age);

三、Lateral View、视图、索引

1 Lateral View

Lateral View用于和UDTF函数(explode、split)结合来使用。

​ 将数据写入一个虚拟表中,然后对其虚拟表进行操作

用来解决普通UDTF查询无法同时显示多个字段问题

语法

LATERAL VIEW udtf(expression) tableAlias AS columnAlias (’,’ columnAlias)

首先通过UDTF函数拆分成多行,再将多行结果组合成一个支持别名的虚拟表

​ eg:

select count(distinct(myCol1)), count(distinct(myCol2)) from psn2

LATERAL VIEW explode(likes) myTable1 AS myCol1 arr类型 myCol1 —> K

LATERAL VIEW explode(address) myTable2 AS myCol2, myCol3; map类型 myCol2, myCol3 —>K,V

Tips: distinct --去重

​ count(distinct(myCol1) – 对myCol1字段进行去重统计个数

2 视图

视图是将基本/简单的查询写入视图中,当需要进行查询时,直接对视图进行查询即可

​ 只能查询,不能做加载数据操作

​ view定义中若包含了ORDER BY/LIMIT语句,当查询视图时也进行ORDER BY/LIMIT语句操作,view当中定义的优先级更高

​ view支持迭代视图

语法

创建视图

CREATE VIEW [IF NOT EXISTS][db_name.]view_name

[(column_name [COMMENT column_comment], …) ]

[COMMENT view_comment]

[TBLPROPERTIES (property_name = property_value, …)]

AS SELECT … ;

查询视图

select colums from view;

删除视图

DROP VIEW [IF EXISTS][db_name.]view_name;

3 索引

目的:优化查询以及检索性能 索引有资源的开销

Tips:创建索引后要对其进行重建才能将数据写入

语法

创建索引

create index t1_index on table psn2(name)

as ‘org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler’ with deferred rebuild

in table t1_index_table;

create index t1_index on table psn2(name)

as ‘org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler’ with deferred rebuild;

Tips:

as:指定索引器;

in table:指定索引表,若不指定默认生成在default__psn2_t1_index__表中

查询索引

show index on psn2;

重建索引(建立索引之后必须重建索引才能生效)

ALTER INDEX t1_index ON psn REBUILD;

删除索引

DROP INDEX IF EXISTS t1_index ON psn2;

四、hive运行方式

1 命令行方式cli:控制台模式

----hive beeline

​ 与hdfs交互 dfs -cat 文件路径; 查看文件信息

​ 与Linux交互 !pwd 当前目录

2 脚本运行方式

实际生产环境中用最多 hive -e sql

​ hive -e “”

​ hive -e “”>aaa

​ hive -S -e “”>aaa

​ hive -f file

​ hive -i /home/my/hive-init.sql

​ hive> source xxx.sql (在hive cli中运行)

3 JDBC方式:hiveserver2

https://www.cnblogs.com/double-kill/articles/8931515.html

4 web GUI接口 (hwi、hue等)

Tips:

​ jar -cvf hive-hwi.war * -----------windows 打包命令

​ UI界面 主要用于查看元数据

web界面安装步骤:

​ 1 下载源码包 apache-hive-*-src.tar.gz

​ 2 将hwi war包放在 linux的$HIVE_HOME/lib/

1-1 具体制作方法:将hwi/web/*里面所有的文件打成war包

1-2 进入windows的cmd,进入所存放的解压包apache-hive-1.2.1-src目录web下

​ cd apache-hive-1.2.1-src/hwi/web

​ jar -cvf hive-hwi.war *

1-3 复制tools.jar(在jdk的lib目录下)到$HIVE_HOME/lib下

1-4 追加修改hive-site.xml

​ 修改hive配置文件hive-site.xml添加以下配置内容:

​ hive.hwi.listen.host

​ 0.0.0.0

​ hive.hwi.listen.port

​ 9999

​ hive.hwi.war.file

​ lib/hive-hwi.war

1-5 启动hwi服务(端口号9999) hive --service hwi

浏览器通过以下链接来访问http://sxt3:9999/hwi/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值