zoukankan      html  css  js  c++  java
  • hive中的优化问题

    一、fetch抓取
    fetch 抓取是指,hive中对某些情况的查询可以不必使用MapReduce计算。
    (1)把hive.fetch.task.conversion 设置成none,然后执行查询语句,都会执行mapreduce程序。

    hive(default)>set hive.fetch.task.conversion=none;
    (2) 把hive.fetch.task.conversion 设置成more,然后执行查询语句。

    二、本地模式

    用户可以通过设置 hive.exec.mode.local.auto的值为true,来让Hive在适当的时候自动启动这个优化。
    set hive.exec.mode.local.auto=true; //开启本地 mr

    //设置 local mr 的最大输入数据量,当输入数据量小于这个值时采用 local mr 的方式, 默认为 134217728,即 128M
    set hive.exec.mode.local.auto.inputbytes.max=50000000;

    //设置 local mr 的最大输入文件个数,当输入文件个数小于这个值时采用 local mr 的方式, 默认为 4
    set hive.exec.mode.local.auto.input.files.max=10;
    (1) 开启本地模式,并执行查询语句
    hive(default)>set hive.exec.mode/local.auto=true;
    hive (default)> select * from emp cluster by deptno;
    Time taken:1.328seconds,Fetched:14 row(s)
    三、表的优化
    小表,大表Join
    (1)小表,大表Join 将key相对分散,并且数据量小的表放在join的左边,这样可以有效减少内存溢出错误发生的几率;再进一步,可以使用Group让小的维度表(1000条以下的记录条数)先进内存。在map端完成reduce.
    (2) 大表 Join 大表 空key过滤
    有时join超时是因为某些key对应的数据太多,而相同key对应的数据都会发送到相同的reducer上,从而大宋中内存不够。此时需要分析异常的key,很多情况下,这些key我们需要在SQL语句中进过滤
    (3)MapJoin
    如果不指定MapJoin或者不符合MapJoin的条件,那么Hive解析器会将join操作转换成Common Join,即:在Reduce阶段完成join。容易发生数据倾斜。可以用Map Join把小表全部加载到内存在map端进行join,避免reducer处理。
    1、设置自动选择MapJoin
    set hive.auto.convert.join=true;默认为true
    (4) Group by
    1.开启Map端进行聚合,默认为True
    hive.map.agger=true
    2.在Map端进行聚合操作的条目数目
    hive.groupby.mapagger.checkinterval=100000
    3.有数据倾斜的时候进行负载均衡(默认是false)
    hive.groupby.skewindata=true
    当选项设定为true,生成的查询计划会有两个 MR Job。第一个 MR Job中,Map的输出结果会随机分布到Reducce中,每个Reduce做部分聚合操作,并输出结果,这样处理的结果是相同的Group By Key 有可能被分发到不同的Reduce中,从而达到负载均衡的目的;第二个MR Job再根据预处理的数据结果按照Group By Key分布到Reduce中(这个过程可以保证相同的Group By Key 被分布到同一个Reduce中),最后完成最终的聚合操作。
    (5)Count (Distinct)去重统计
    (6)笛卡尔积
    尽量避免笛卡尔积,join的时候不加on 条件,或者无效的on 条件,Hive只能使用1个reducer 来完成笛卡尔积。
    (7)行列过滤
    (8)动态分区调整
    (9)分桶
    (10)分区
    (11)合理设置Map数
    (12)小文件进行合并
    在map执行前合并小文件,减少map 数:CombineHiveInoutFormat具有对小文件进行合并的功能(系统默认的格式)。HiveInputFormat没有对小文件合并功能。
    (13)复杂文件增加Map数
    (14)合理设置REduce数
    (15)并行执行
    (16)严格模式
    set hive.mapred.mode=strict
    (17)JVM 重用
    (18)压缩
    (19)执行计划

  • 相关阅读:
    Unreal Engine 4 —— Post Process Shader练手(第二弹)
    Unreal Engine 4 —— 冷却UI的制作
    C++ —— 自动Singleton的实现
    Unreal Engine 4 —— 可交互绳索的构建
    Unreal Engine 4 —— 基于Kajiya-Kay的材质迭代
    Unreal Engine 4 —— Kajiya-Kay Shading在UE4中的实现
    Technical Artist的不归路 —— Kajiya-Kay Shading
    C++ —— RAII编程思想
    C++ —— 宏对于简化类接口的奇技淫巧
    C++ —— 对象指针比较
  • 原文地址:https://www.cnblogs.com/zmoumou/p/10181339.html
Copyright © 2011-2022 走看看