开发中
1.对于分区表分区的粒度如果按照时间来分的话要分到业务需求的最小,比如有对小时数据的汇聚分区表就直接分区到小时
2.对于字段多运算复杂的汇聚要使用临时表分步处理最后汇聚处理好的临时表原子化操作
3.尽量尽早的过滤数据,减少每个阶段的数据量
4.看单个sql引起的job数量要越少越好
5.数据倾斜
当小表关联一个大表时很容易会出现数据倾斜可以用MapJoin解决
如果是小表的时候自动选择Mapjoin的设置
set hive.auto.convert.join = true;
设置大表小表的阀值
set hive.mapjoin.smalltable.filesize=25000000;(25M)
使用MapJoin
表关联小表要放在join的左边否则会引起磁盘和内存爆增
如果有join和group操作的话要注意数据倾斜根据具体数据数量进行分拆
set hive.exec.reducers.max=200;
set mapred.reduce.tasks= 200;---增大Reduce个数
set hive.groupby.mapaggr.checkinterval=100000 ;--这个是group的键对应的记录条数超过这个值则会进行分拆,值根据具体数据量设置
set hive.groupby.skewindata=true; --如果是group by过程出现倾斜 应该设置为true
set hive.skewjoin.key=100000; --这个是join的键对应的记录条数超过这个值则会进行分拆,值根据具体数据量设置
set hive.optimize.skewjoin=true;--如果是join 过程出现倾斜 应该设置为true
6.如果union all的部分个数大于2,或者每个union部分数据量大,应该拆成多个insert into 语句,实际测试过程中,执行时间能提升50%
7.多表关联要注意判空否则也会导致空数据倾斜
环境
1.集群master在最好的机器上
2.es集群
xpack安全用户名密码kibana logstash 都有各自的用户名密码
elastic 超级用户也可以在kibana上dsl自建用户
3.es集群启动后不要关闭某一个节点,不要随意删除分片会导致主分片错误es运行状态为红,出现这种情况重起es集群,要正确关闭es集群不要直接kill
4.es集群要对磁盘空间的使用设置上限建议磁盘空间的85%
5.数据无法读写的时候要注意观察es的运行状态
6.hadoop集群不要存在硬件配置特别差的节点水桶效应
7.hadoop有条件要多开备份方便计算