impala的具体操作2-hive的分区分桶解释
JDBC
在解释一下什么是分区什么是分桶?
hive的分区、分桶
什么叫做分区
什么叫做表
分区:
hdfs 表 就是目录
一级目录 就a目录是其中的一张表
分区表 他的子目录
1 号数据来了 就是将1数据放入1目录
2号数据来了 就是将2数据放入2目录
假如说 sql来了 from table where 日期 date =1
只有这个1目录下的数据 参与mr的计算inputpath计算
分区就是规避io量 ······
假如说这些1 2 目录全量数据为10个T
如果你做了分区
那么where条件 等于1天 那么计算就是1T
9t不参与计算
===================================
什么叫做分桶
a目录 变成一张表 t表
分桶干什么用的
假设分成3个桶
目录成 0桶一个目录 1桶一个目录 2桶一个目录
又是1号数据来了
现在将1号数据每条记录 做哈希取模对着三个桶
那么就是每条数据在不同的桶
1号去这三个桶
2号通样 做取模
同样放到不同的桶
好处:相同省份的数据都会去一个桶里
就是去一个目录了 相同省份数据一定缅街在一起了
如果你的sql 对省份
做count sum avg 聚合操作
效果会非常好。。。。。
=====================================
例:
假设数据源没有分桶
数据源分成俩个块 很多列
上下都有很多sxt
计算的时候 一块产生一个切片
一块产生一个切片
会做shuffler 拉取数据
shuffler的时候 io的时候 数据量比较大
====================================
大数据的情况下
都不可能避免读入io和shuffler(拉取数据) IO的情况
不管你是 内存计算 还是磁盘io计算
还是流式计算或批次计算(离式计算)
都避免不了
读取IO 用分区
计算shuffler io 用分桶
结合使用 整合在一起用