zoukankan      html  css  js  c++  java
  • 大数据框架Hive优化方法

    常规调优手段

    • Fetch抓取
      • 某些情况查询不必用MapReduce计算,比如select*,可以直接读取文件
    • 本地模式
      • 有时数据量比较小,hive可以通过本地模式在单台机器上处理所有任务,对于小数据集,执行时间可以被明显缩短。
    • JVM重用  
      • 对于大量小文件,可开启JVM重用,即多个任务共用一个JVM而不用频繁开启和关闭
    • 推测执行
      • 对于一些bug或者资源分配不均等情况拖后腿的MapReduce任务,会推测出这样的任务并且开启备份任务,与该任务处理同一份数据,最终选用快的那个作为结果
    • 严格模式(开启后Hive自动对某些操作做一定的限制,以免过低的查询效率)
      • 开启后where中必须有分区过滤条件,不允许扫描所有分区
      • 使用order by 必须有limit
      • 限制笛卡尔积查询
    • count distinct 用 group by替换
    • key过滤(大表join大表)
      • 若空key不需要,则在join之前把空值的key过滤掉
      • 如果空key需要包括在结果集里,则要把它加上一些散列数,分配到不同的reducer中防止数据倾斜
    • join的时候尽量将小表放大表左边(现版本Hive对其进行自动的优化。)

    数据倾斜的解决

    • 开启数据倾斜时均衡负载,同一个key分道不同的reduce处理,然后开启第二个MR根据与处理数据结果再按照groupbykey分不到reduce中完成最终的聚合操
    • 合理设置map、reduce个数;小文件合并等常规MR优化
      • 增大map数:减少切片大小
      • 增大reduce个数
        • 1.设置调小每个reduce处理最大数据量/2.增大每个任务最大的reduce个数(reduce个数:N=min(参数2,总数据量/参数1))
        • 直接设置set mapreduce.job.reduces = 15;
    • 开启map端预先聚合,combine
    • 小表存入内存,将reduce join转化为map join
        • 许指定mapjoin参数为true,然后调整小表的阈值让hive自动判断小表情况进行map join转换
  • 相关阅读:
    第一次c++团队合作项目第三篇随笔
    第一次c++团队合作项目第二篇随笔
    第一次c++团队合作作业期间第一篇随笔
    电梯调度程序
    给我留下深刻印象的三位老师
    一个带有富文本功能的记事本
    我也忘了第几次团队作业
    关于复数输入输出的一点见解
    c++团队作业工作笔记
    又要开始新的征程了hhh(这次内容比较感兴趣)
  • 原文地址:https://www.cnblogs.com/cun-yu/p/12762784.html
Copyright © 2011-2022 走看看