Hive1.2.2
Posted hanchaoyue
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hive1.2.2相关的知识,希望对你有一定的参考价值。
1. order by,sort by,distribute by,cluster by的区别?
2. 聚合函数是否可以写在order by后面,为什么?
需求催生技术进步
================================================================================
一、课前准备
二、课堂主题
三、课堂目标
1. 掌握hive表的数据压缩和文件存储格式
2. 掌握hive的JDBC代码操作
3. 掌握的自定义UDF函数
4. 掌握hive的SerDe
5. 掌握hive的优化
四、知识要点
1. hive表的数据压缩
1.1 数据的压缩说明
压缩模式评价
可使用以下三种标准对压缩方式进行评价
1. 压缩比:压缩比越高,压缩后文件越小,所以压缩比越高越好
2. 压缩时间:越快越好
3. 已经压缩的格式文件是否可以再分割:可以分割的格式允许单一文件由多个Mapper
程序处理,可以更好的并行化
常见压缩格式
压缩比 | 压缩速度 | 解压缩速度 | 是否可分割 | |
---|---|---|---|---|
gzip | 13.4% | 21 MB/s | 118 MB/s | 否 |
bzip2 | 13.2% | 2.4MB/s | 9.5MB/s | 是 |
lzo | 20.5% | 135 MB/s | 410 MB/s | 是 |
snappy | 22.2% | 172 MB/s | 409 MB/s | 是 |
hadoop编码/解码器方式
对应的编码/解码器 | |
---|---|
DEFLATE | org.apache.hadoop.io.compress.DefaultCodec |
Gzip | org.apache.hadoop.io.compress.GzipCodec |
BZip2 | org.apache.hadoop.io.compress.BZip2Codec |
LZO | com.hadoop.compress.lzo.LzopCodec |
Snappy | org.apache.hadoop.io.compress.SnappyCodec |
1.2 数据压缩使用
- hive表中间数据压缩
#设置为true为激活中间数据压缩功能,默认是false,没有开启
set hive.exec.compress.intermediate=true;
#设置中间数据的压缩算法
set mapred.map.output.compression.codec= org.apache.hadoop.io.compress.SnappyCodec;
- hive表最终输出结果压缩
set hive.exec.compress.output=true;
set mapred.output.compression.codec=
org.apache.hadoop.io.compress.SnappyCodec;
2 hive表的文件存储格式
2.1 文件存储格式说明
2.2 文件存储格式使用对比
3 hive的函数
3.1 系统内置函数
1、查看系统自带函数
show functions;
2、显示自带的函数的用法
desc function 函数名;
3.2 自定义函数
- Hive 自带了一些函数,比如:max/min等,但是数量有限,自己可以通过自定义UDF来方便的扩展
- 当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF:user-defined function)
根据用户自定义函数类别分为以下三种:
1、UDF(user -defined-function)
一进一出(这个词怪怪的,很邪恶)
2、UDAF(user-defined-aggregation-function)
聚合函数,多进一出
3、UDTF(user-defined table-generating functions)
一进多出
3.3 自定义UDF函数编程步骤
1、定义一个类继承==org.apache.hadoop.hive.ql.UDF==
2、需要实现==evaluate==函数;evaluate函数支持重载;
3、将程序打成jar包上传到linux服务器
4、在hive的命令行窗口创建函数
a) 添加 jar包
==add jar xxxxx.jar== (linux上jar包的路径)
b) 创建function
create [temporary] function [dbname.]function_name AS class_name;
5、hive命令行中删除函数
Drop [temporary] function [if exists] [dbname.]function_name;
6、注意事项
UDF必须要有返回类型,可以返回null,但是返回类型不能为void;
3.4 自定义UDF函数案例实战
此处省略三千字
4. hive客户端jdbc操作
4.1 引人依赖
4.2 代码开发
此处省略三千字
5. hive的SerDe
5.1 hive的SerDe是什么
HDFS files –> InputFileFormat –> <key, value> –> Deserializer –> Row object
Row object –> Serializer –> <key, value> –> OutputFileFormat –> HDFS files
5.2 hive的SerDe类型
Hive 中内置==org.apache.hadoop.hive.serde2== 库,内部封装了很多不同的SerDe类型。
hive创建表时, 通过自定义的SerDe或使用Hive内置的SerDe类型指定数据的序列化和反序列化方式。
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...)
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]
- 如上创建表语句, 使用==row format 参数说明SerDe的类型。==
这一部分没什么
===========一些练习题
省略,下一阶
以上是关于Hive1.2.2的主要内容,如果未能解决你的问题,请参考以下文章