1、基础知识
2、基础操作
$HOME/.hiverc
历史命令在$HOME/.hivehistory
在hive CLI 中执行hadoop的dfs命令,只要将hadoop去掉,结尾加分号
3、数据类型和文件格式
4、HiveQL:数据定义
内部表、外部表、管理表、分区表
5、HiveQL:数据操作
导入数据:
insert into
insert overwrite
create table as select
6、HiveQL:查询
select ... from
数学运算、聚合函数、嵌套select、case when then
like、rlike支持正则表达式
group by、having
join:inner join、left outer join、outer join、right outer join、full outer join、left semi-join、笛卡尔积join
保证连续查询的表的大小从左到右依次增加。
order by、sort by只会在每个reducer中排序&是局部的、
distribute by控制map的输出在reducer中是如何划分的
cluster by:确保类似的数据可以分发到同一个reduce task中,而且保证数据是有序的。
类型转换case(value as type)
抽样查询
select * from tab tablesample(bucket 3 out of 10 on rand()) s ;
数据块抽样
select * from tab tablesample(0.1 percent) s;
union/union all
7、HiveQL:视图
使用视图来降低查询复杂度
使用视图来限制基于条件过滤的数据
8、HiveQL:索引
9、模式设计
10、调优
Explain 关键字
explain extended 输出信息更多
limit:
hive.limit.optimize.enable设置为true、hive.limit.row.max.size和hive.limit.optimize.limit.file
JOIN优化:最大的表放在join语句最右边
本地模式:适用于小数据集,设置hive.exec.mode.local.auto为true
并行执行:不依赖的stage可以并行执行,设置hive.exec.parallel为true
严格模式:设置hive.mapred.mode为strict,可以禁止3种查询:
- 对于分区表,where语句必须含有分区字段过滤数据范围
- 对于使用order by的语句必须使用limit
- 限制笛卡尔积的查询
调整mapper和reducer个数:
- 按照输入数据量大小调整reducer个数,set hive.exec.reducers.bytes.per.reducer=750000000 这是750MB,默认是1GB
- hive的默认reducer是3
- hive.exec.reducers.max,计算公式【集群总reduce槽位个数*1.5/执行中的查询的平均个数】,1.5是经验系数
JVM重用:mapred.job.reuse.jvm.num.tasks ,可以使得JVM实例在同一个job中重新使用N次
索引:可以加快含有group by语句的查询速度
动态分区调整:
推测执行:
单个mapreduce中多个group by:
虚拟列:
11、其他文件格式和压缩方法
压缩可以最小化所需磁盘的存储空间,减少磁盘和网络的IO操作。
开启中间压缩可以减少job中map和reduce task间的数据传输量。
- hive.exec.compress.intermediate 默认是false,设置为true
- mapred.map.output.compression.codec 设置编解码器
最终输出结果压缩
- hive.exec.compress.output默认是false,设置为true
- mapred.output.compression.codec 设置编解码器
sequence file存储格式:可以将一个文件划分成多个块,然后采用一种分割的方式对块进行压缩。
- create table...stored as sequencefile
- 3种压缩方式:none、record(记录级别)、block(块级别,性能最好)
- mapred.output.compression.type
存档分区:HAR归档文件
压缩包扎:
12、开发
13、函数
show functions
describe function concat
describe function extended concat
UDF:用户自定义函数,继承并实现evaluate函数
HDAF:用户自定义聚合函数,avg
UDTF:用户自定义表生成函数,array、explode、lateral view,继承GenericUDTF
14、Streaming
在streaming job中,会为外部进程开启一个IO管道。
15、自定义Hive文件和记录格式
RCfile二进制
记录格式:SerDe 序列化和反序列化
CSV:逗号分隔
TSV:回车分隔
XML UDF
JSON SerDe:
Avro Hive SerDe:
二进制输出:
16、Hive的Thrift服务
Thrift是一个软件框架,用于跨语言的服务开发。10000
启动hiveserver:hive --service hiveserver &
hive的thriftmetastore应该和实际使用jdbc的元数据存储进行通信:9083
启动:hive --service metastore &
17、存储处理程序和NoSQL
hive可以将底层数据以文本形式存储在hdfs,以列簇方式存储在hbase、cassandra、amazon dynamoDB。
支持hbase表之间连接,也支持hbase表和非hbase表之间连接。
18、安全
和hadoop安全功能相结合
使用hive进行验证
hive中的权限管理
- 用户、组、角色
- grant、revoke
分区级别的权限
自动授权
19、锁
hive结合zookeeper支持锁功能
显式锁和独占锁:lock table people exclusive
20、Hive和Oozie整合
oozie是一个工作流引擎服务器。
oozie提供的多种动作:mapreduce、shell、java、pig、hive、distcp
oozie网页控制台:http://ip:11000/oozie
21、Hive和亚马逊网络服务系统AWS
22、HCatalog
不同工具之间共享元数据
23、案例研究
-------------《Hive编程指南》