Hive性能调优实战 总结三

第7章 Hive数据处理模式

过滤模式

  • 普通的where的在map端过滤,map端的任务在执行时尽可能将计算逻辑发送到数据所在的机器中执行,多机同时过滤。对一个作业应尽量将其放在前面进行数据过滤

  • having子句过滤发生在数据聚合后,MR引擎中在Reduce阶段过滤,在Reduce 和Group by操作之后

  • distinct 在Reduce阶段,和用group by的执行计划类似,分组聚合的方式不是Hive去重的唯一方式,有时还会用到Hash表

  • multi-group-by-insert语法 ,表在读取一次后,可以被多个查询语句使用

    from student_tb_txt
    insert into table student_stat partition(tp)
    select s_age,max(s_birth) stat, 'max' tp
    group by s_age
    insert into table student_stat partition(tp)
    select s_age,min(s_birth) stat, 'min' tp
    group by s_age
    
  • 分区列筛选,能够在Map之前进行数据过滤,得益于分区表存储格式——分区表|分区列(part = ?)

  • 分桶列筛选,能够对数据重新组织,快速过滤不需要的文件,分区是对目录的过滤**,分桶是对文件的过滤**,记录所存储的桶 = mod(hash(分桶列的值),16) 把所有文件按照hash值分到16个桶

  • 在列过滤中,ORC/Parquet格式中存储了文件定义的Schema,可以直接读取表所在的列,比一般的格式先取整行数据,再通过列的偏移量得到对应的列值更快。

聚合模式

  • distinct模式,在map端开启聚合,会在Map中进行数据局部聚合,再在Reduce中开启全局聚合
  • **COUNT(*)和COUNT(1)会得到包含NULL的数据行数,在数据统计时,不会读取表中的数据,只是使用到HDFS文件中每一行的行偏移量(**HDFS添加的),
  • 而COUNT(<列名>)会得到NULL之外的数据行数。针对列的计数,涉及字段的筛选和数据序列化和反序列化
  • 在ORC文件中,这三者相差不多
  • 可计算中间结果的聚合模式,sum、max、min、avg等 在本地处理阶段被聚合成少量数据,之后再做计算可以减少网络和下游节点处理的数据量
  • 不可计算中间结果的聚合模式,collect_list collect_set,和前面的类似,不同的是Map阶段Reduce Output Operator 中 value输出的是个集合数组

连接模式

  • Repartition连接,发生在shuffle和Reduce阶段,Map读取两个表的数据,将按照连接条件发往相同的Reduce,在Reduce中计算合并

  • Replication连接(map join),发生在Map阶段,减少从HDFS中读取表的次数,在操作时将一个表的数据复制到各个Map任务所在的节点并存储在缓存中,适用于有小表的情况

  • map join

    • 先启动一个作业读取小表的数据,在内存中构建哈希表,把哈希表写入本地磁盘,然后把哈希表上传到HDFS并添加到分布式缓存中。
    • 再启动一个任务读取B表的数据,在连接时map会获取缓存中的数据并存入哈希表中,B表会和哈希表的数据匹配
    • 时间复杂度是O(1)
    • 开启hint命令 set hive.ignore.mapjoin.hint = false /*+mapjoin(b)*/ hint操作
    • 推荐:
      • hive.auto.convert.join = true 是否根据文件大小把repartition 转为 replication;
      • hive.smalltable.filesize = 25000000 byte 小表数据小与阈值时,将转换 和上面的一起用
  • 使用桶的Map连接要保证连接的两张表的分桶数之间是倍数关系

  • 倾斜连接

    • set hive.optimize.skewjoin = true 是否优化有倾斜键的表连接

    • set hive.skewjoin.key = 100000 相同键的行数多于指定值 认为该键是倾斜连接键

    • -- 可以通过创建表时制定数据倾斜键,将制定的数据键分割成单独的数据文件或目录
      create table a(s_no string,s_score bigint)
      skewed by (s_score) on (99,97)
      stored as directories
      
  • 表连接与基于成本的优化器

    • 一开始 Hive使用的是基于规则的优化器 Rule Based Optimizer
    • 后来使用Calcite 是一个开源的基于成本优化器(CBO),根据Hive收集到表、列的统计信息,估算成本
    • CBO优点
      • 表连接的顺序优化,不需要特别制定大小表的顺序,会根据收到的情况,自动算出
      • Bushy Tee连接的执行,可以估算出每个表连接的组合,两两结合生成中间结果,未引入的时候所有表连接都被表示成左深树,内部节点都至少有一个叶子作为子节点
      • 简化表的连接,多表连接时,识别并抽取相同的连接谓词,构造一个隐式的连接谓词作为替换

第8章 YARN日志

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值