zoukankan      html  css  js  c++  java
  • Hive查询优化

    1.先过滤,再查询,因为每次生成中间表都会存储到Linux磁盘上 , 记住 , 不是HDFS

    2.注意数据倾斜 , 倾斜的原因是reduce端数据的大量富集, 可适度增加reduce , 会着开启

    Reduce自己判断 , 某一比较大 , 自己再分开点.也就是合理设置

    reduce数量

    hive.exec.reducers.bytes.per.reducer(每个reduce任务处理的数据量,默认为1000^3=1G)

    hive.exec.reducers.max    每个人物最多Reduce任务,默认999

    3.小文件优化

    用于设置合并的参数有:

      • 是否合并Map输出文件:hive.merge.mapfiles=true(默认值为true)
      • 是否合并Reduce端输出文件:hive.merge.mapredfiles=false(默认值为false)
      • 合并文件的大小:hive.merge.size.per.task=256*1000*1000(默认值为256000000)

      

    4.小文件产生原因

    1,动态分区插入过多数据,产生小文件

    2.数据源自己本身包含很多小文件

    3.reduce数量越多 , 小文件也越多.

    小文件太多会造成 map 多 ,耗内存

    4.小文件解决方案.

      使用Sequencefile作为表存储格式,不要用textfile,在一定程度上可以减少小文件;

    1. join操作, 把小表放在左边 , 否则会OOM

    2.要写SQL先了解数据本身的特点 , 否则如果有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

    5. hive 查询的时候 , 其中 , GROUP BY , 结果中必须包含此字段, 否则无法查询,

    但是比如age>20   其列可以 不在查询中

    6.

  • 相关阅读:
    最短路小变形
    最短路
    bfs + 路径输出
    优先队列
    dijkstra
    重载运算符-operator
    最短路
    二分图匹配
    依赖型的关系建立
    string 类
  • 原文地址:https://www.cnblogs.com/alpha-cat/p/12635817.html
Copyright © 2011-2022 走看看