Hive函数、压缩存储、调优汇总、权限管理

Hive函数、压缩存储、调优、权限

一、函数

1 系统内置函数

显示自带函数的用法 desc function 函数名;

详细显示自带函数的用法 desc function extended 函数名;

2 自定义函数

1)Hive 自带了一些函数,比如:max/min等,但是数量有限,自己可以通过自定义UDF来方便的扩展

2)当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数

3)根据用户自定义函数类别分为以下三种:
​ UDF(User-Defined-Function) 一进一出
​ UDAF(User-Defined Aggregation Function) 多进一出,聚集函数 count/max/min
​ UDTF(User-Defined Table-Generating Functions) 一进多出 lateral view explore()

4)官方文档地址
​ https://cwiki.apache.org/confluence/display/Hive/HivePlugins

5)编程步骤:
​ (1)继承org.apache.hadoop.hive.ql.UDF
​ (2)需要实现evaluate函数;evaluate函数支持重载;
​ (3)在hive的命令行窗口创建函数
​ a)添加jar
​ add jar linux_jar_path
​ b)创建function,
​ create [temporary] function [dbname.]function_name AS class_name;
​ (4)在hive的命令行窗口删除函数
​ Drop [temporary] function [if exists][dbname.]function_name;

6)注意事项
​ UDF必须要有返回类型,可以返回null,但是返回类型不能为void;

3 自定义UDF函数

1.创建一个Maven工程Hive

2.导入依赖

<dependencies>
		<!-- https://mvnrepository.com/artifact/org.apache.hive/hive-exec -->
		<dependency>
			<groupId>org.apache.hive</groupId>
			<artifactId>hive-exec</artifactId>
			<version>1.2.1</version>
		</dependency>
</dependencies>

3.创建一个类

package com.atguigu.hive;
import org.apache.hadoop.hive.ql.exec.UDF;

public class Lower extends UDF {

	public String evaluate (final String s) {
		
		if (s == null) {
			return null;
		}
		
		return s.toLowerCase();
	}
}

4.打成jar包上传到服务器/opt/module/jars/udf.jar

5.将jar包添加到hive的classpath

​ add jar /opt/module/datas/udf.jar;

6.创建临时函数与开发好的java class关联

​ create temporary function mylower as “com.atguigu.hive.Lower”;

7.即可在hql中使用自定义的函数strip

​ select ename, mylower(ename) lowername from emp;

二、压缩和存储

1 压缩

压缩相关配置在doc文件中

压缩算法 原始文件大小 压缩文件大小 压缩速度 解压速度
gzip 8.3GB 1.8GB 17.5MB/s 58MB/s
bzip2 8.3GB 1.1GB 2.4MB/s 9.5MB/s
LZO 8.3GB 2.9GB 49.3MB/s 74.6MB/s

2 文件存储格式

Hive支持的存储数的格式主要有:TEXTFILE 、SEQUENCEFILE、ORC、PARQUET

1)列式存储和行式存储

在这里插入图片描述

行存储的特点

​ 查询满足条件的一整行数据的时候,列存储则需要去每个聚集的字段找到对应的每个列的值,行存储只需要找到其中一个值,其余的值都在相邻地方,所以此时行存储查询的速度更快

​ TEXTFILE 和 SEQUENCEFILE 的存储格式都是基于行存储的

列存储的特点

​ 因为每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量;每个字段的数据类型一定是相同的,列式存储可以针对性的设计更好的设计压缩算法

​ ORC 和 PARQUET 是基于列式存储的

Tips:

​ ORC并非完全基于列存储,因为其大小是250M一块(stripe),在该stripe内是基于一定的规则存储

2)TextFile格式

​ 默认格式,数据不做压缩,磁盘开销大,数据解析开销大

​ 可结合Gzip、Bzip2使用,但使用Gzip这种方式,hive不会对数据进行切分,从而无法对数据进行并行操作

3)Orc格式

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

​ 每个Orc文件由1个或多个stripe组成,每个stripe250MB大小,这个Stripe实际相当于RowGroup概念,不过大小由4MB->250MB,这样应该能提升顺序读的吞吐率

​ 每个Stripe里有三部分组成,分别是Index Data,Row Data,Stripe Footer

  • Index Data:一个轻量级的index,默认是每隔1W行做一个索引。这里做的索引应该只是记录某行的各字段在Row Data中的offset

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值