hive的优化
1.排序:
 order by 全局排序 默认hive中 1reducetask
 sort by 局部排序 每一个reducetask内部做排序
 set reducetasks=3
 字段.hash % 3 随机
 1 zs f 23 cs reducetask0
 1 zs f 23 cs reducetask1
 1 zs f 23 cs reducetask2
 distribute by 分桶|分组|分区
 进行数据分配的
 distribute by name + sort by
 name.hash % 3
 cluster by 字段
 distribute by 字段+ sort by 字段2.笛卡尔积
 select * from a join b;
 a表的每一条数据 关联b表的所有数据
 最终的数据条数 ab 1001000=100000
 在hive中有些需求 必须使用笛卡尔积
 select * from a join b;
 如何转换为mr的
 map端:
 key:“” null
 value:标记+数据记录
 reduce端:
 一组
 a表所有数据 b表所有的数据
 没有关联键 数据只能在一个reducetask中完成 效率低下
 解决:
 人为添加一个关联键
 1)先对相对大的表进行添加一列关联字段 指定一个范围 0-99
 select *,round(rand()*100) from a
 1000 1 2 4 7
 2) 将小表复制多份 取决于大表的关联键范围 100
 每一份小表 添加一个关联键 大表范围中的一个
 3)关联
 提升整体的并行度 减轻了数据倾斜总体占比
 select sum(package) sum_package from unicom;
 select
 province,sum(package) p_sum
 from unicom
 group by province;3)hive中不支持 in/exists 执行效率极低
 高效 left semi join | inner join面试:
 hive中如何实践 not in
 4)如何设计 maptask的数量
 当大量的小文件的时候
 启动过多的maptask任务
 任务的启动时间 远远大于 任务的执行时间 不划算
 jvm的重用
 一个maptsk---- 一个container ----> 1yarnhild (jps)—》1jvm
 一个container 中 执行多个maptask|reducetask
 set mapred.job.reuse.jvm.num.tasks=5
 一个container 运行5个maptask
 Job job_1565283590751_0008 running in uber mode : false
 uber: 默认10个maptask | reducetask 一个container5)reducetask的数量
 经验值 0.95datanode的个数 最大限制
 500 9zk 2namenode 4890.956)合理的分区
 减少数据的扫描范围 提升性能
 分区字段 过滤的字段
 dept
 select * from stu where dept=“CS”;
 select * from stu where age>18; 查询所有的分区
 生产上习惯 使用日期作为分区 按日期进行数据分析7)合理的分桶
 insert
 insert into table stu_buk
 select * from test_shell.stu;
 1)提升抽样的性能
 age %3
 —0 buket0
 —1 buket1
 —2 buket2
 TABLESAMPLE(BUCKET x OUT OF y)
 y:桶簇 一个或多个桶 半个桶 3 一个桶簇—一个桶
 x: 取得第几个桶簇的数据 1select * from stu_buk tablesample(bucket 1 out of 3);
y=6 一个桶簇半个桶
x=1  第一个桶簇   第一个桶前半
x=2  第二个桶簇   第二个桶后半
轮询

桶   12个
桶簇   3个    一个桶簇  4个桶
    桶簇1    1+4+7+10
2)提升join的性能 
分桶 字段   关联 
分桶个数 相同或倍数关系8)hql语句
 单条
 单重
 多重
 数据插入的时候 能用多重不用单重
 9)join
 先过滤 在join
 小表在前 大表在后hive重点:
 hql sql
 数据存储
 hive的数据组织形式 内部表 外部表 分区表 分桶表
 分区表:
 数据加载方式
 动态
 静态
 动态分区 静态分区区别
 hive查询
 语法
 join
 inner
 outer
 left outer join | left join
 semi join
 having
 where
 函数
 常用内置函数
 字符串 instr split substr concat concat_ws length
 数字:
 rand()
 round()
 收集函数:
 collect_set
 collect_list
 array_contains
 日期函数:
 from_unixtime
 unix_timestamp
 day month hour
 条件:
 if
 case when
 nvl
 炸裂函数
 explode自定义函数:
            实现  实现功能
            
        UDF    UDTF   UDAF