zoukankan      html  css  js  c++  java
  • 3.7-3.10 Hive 企业使用优化1

    一、Fetch Task

    在执行hive代码的时候,一条简单的命令大部分都会转换成为mr代码在后台执行,

    但是有时候我们仅仅只是想获取一部分数据而已,仅仅是获取数据,还需要转化成为mr去执行吗?

    那个也太浪费时间和内存啦,所以有一个hive的配置如下所示:

    #在hive-default.xml.template默认配置中可知:SELECT STAR, FILTER on partition columns, LIMIT only
     这些查询是不走MapReduce的
    <property>
      <name>hive.fetch.task.conversion</name>
      <value>minimal</value>
      <description>
        Some select queries can be converted to single FETCH task minimizing latency.
        Currently the query should be single sourced not having any subquery and should not have
        any aggregations or distincts (which incurs RS), lateral views and joins.
        1. minimal : SELECT STAR, FILTER on partition columns, LIMIT only
        2. more    : SELECT, FILTER, LIMIT only (TABLESAMPLE, virtual columns)
      </description>
    </property>
    
    
    #我们还可以添加一下更多不走MapReduce的配置
    hive-site.xml
        <property>
            <name>hive.fetch.task.conversion</name>
            <value>more</value>
            </property>


    二、hive高级优化

    1、大表拆分

    CREATE  [EXTERNAL]  TABLE  [IF NOT EXISTS] [db_name.] table_name 
    [AS select_statement];


    2、外部表、分区表

    结合使用

    多级分区


    3、数据

    存储格式(textfile、orcfile、parquet)

    数据压缩(snappy)

    4、SQL

    优化SQL语句;

    join,where


    5、MapReduce

    JVM重用

    推测执行


    三、join

    Common/Shuffle/Reduce Join
    
    Map Join
    
    SMB Join
    在编写带有 join 操作的代码语句时,应该将条目少的表/子查询放在 Join 操作符的左边。 
    因为在 Reduce 阶段,位于 Join 操作符左边的表的内容会被加载进内存,载入条目较少的表 
    可以有效减少 OOM(out of memory)即内存溢出。所以对于同一个 key 来说,对应的 value 值小的放前,大的放后,
    这便是“小表放前”原则。 若一条语句中有多个 Join,依据 Join 的条件相同与否,有不同的处理方法。


    1、Common/Shuffle/Reduce  Join

    连接发生的阶段,发生在Reduce Task
    大表对大表
    表的数据放都从文件中读取


    2、map Join

    #map Join
        连接发生的阶段,发生在Map Task
        小表对大表I
        大表的数据放从文件中读取cid
        小表的数据内存中id
        DistributedCache类:此类就是将小表缓存到内存中


    Map Join:在Map端完成Join

    自动的mapjoin:

    通过修改以下配置启用自动的mapjoin: set hive.auto.convert.join = true; (该参数为true时,Hive自动对左边的表统计量,如果是小表就加入内存,即对小表使用Map join)(默认左边的加载到内存中去)


    相关配置参数: hive.mapjoin.smalltable.filesize;   
    (大表小表判断的阈值,如果表的大小小于该值则会被加载到内存中运行) 
    hive.ignore.mapjoin.hint;(默认值:true;是否忽略mapjoin hint 即mapjoin标记) 
    hive.auto.convert.join.noconditionaltask; (默认值:true;将普通的join转化为普通的mapjoin时,是否将多个mapjoin转化为一个mapjoin) 
    hive.auto.convert.join.noconditionaltask.size; (将多个mapjoin转化为一个mapjoin时,其表的最大值)


    3、SMB Join

    ###
    set hive.auto.convert.sortmerge.join=true
    set hive.optimize.bucketmapjoin=true;
    set hive.optimize.bucketmapjoin.sortedmerge=true;
  • 相关阅读:
    ABP 框架第一篇 ABP框架入门
    SpringBoot+mybatis plus 框架搭建
    诺依框架 第一章 springboot+vue前后端分离版本部署
    常用Web Service汇总网页
    Singleton单例模式
    告别无止境的增删改查Java代码生成器
    Builder生成器模式
    细说Java IO相关
    AbstractFactory抽象工厂模式
    设计模式关于模式的一些很基本的知识点
  • 原文地址:https://www.cnblogs.com/weiyiming007/p/10784057.html
Copyright © 2011-2022 走看看