hive的企业级优化

hive的企业级优化

  • 说明:以下是常见的六个调优项

Fetch抓取

  • 说明:

    • 所谓fetch抓取hive中的某些查询可以不必使用mapreduce来计算,例如select * from emp这个语句就没有使用mapreduce ,这种情况下,hive可以简单的读取emp目录对应的数据文件。
  • 设置方法:

    • 设置地方:hive-default.xml
    <property>
        <name>hive.fetch.task.conversion</name>
        <value>more</value>
        <description>
          Expects one of [none, minimal, more].
          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.
          0. none : disable hive.fetch.task.conversion
          1. minimal : SELECT STAR, FILTER on partition columns, LIMIT only
          2. more    : SELECT, FILTER, LIMIT only (support TABLESAMPLE and virtual columns)
    	</description>
    </property>
    
    • 设置属性:hive.fetch.task.conversion
  • 设置的参数讲解:

    1. none: 禁用fetch抓取,当禁用fetch抓取之后,所有的操作都会进行MR的运行

    2. minimal: select * 分区表中的分区列的过滤条件, 以及limit 不会运行MR

    3. more: 查询,提交过滤 limit 限制查询 ,包括 抽样查询 虚拟列 都不会运行MR

  • 注意:什么时候使用fetch抓取以及什么时候不用是根据数据量来的。

本地模式

  • 说明:

    • Hadoop的任务,是可以提供一个可扩展性来处理大数据集的优势,但是有时hive输入的数据量非常的小,在这种情况下,任务的资源分配与调度的消耗时间,可能会比数据的分析时间要多的多,所以在这种情况下,hive可以在本地单台节点上处理任务。对于小的数据可明显提高执行的速度。
  • 开启方式:

    • 设置必要属性:开启本地模式
    set hive.exec.mode.local.auto=true;
    
    • 以上的属性的意思为:本地模式自动识别,当输入的数据量大于128M本地模式是关闭的状态,数据提交到集群上运行。
  • 可以设置的属性:

    • 设置本地模式输入的最大数据量:
    set hive.exec.mode.local.auto.inputbytes.max=128M;
    
    • 设置本地模式最多只能输入的文件个数
    set hive.exec.mode.local.auto.input.files.max=4
    

并行执行

  • 说明:在MapReduce阶段中,map的输入阶段,map的输出阶段,shuffle阶段,reduce输入阶段,以及reduce的输出阶段。根据以上的阶段hive对应的是: 抽样阶段,合并阶段,limit阶段或者其他阶段,默认的情况下hive一次只会执行一个阶段,但是要注意某个特定的任务中可能包含多个阶段,这些任务是不完全相互依赖的是可以并行执行的。并行的执行可以把任务的时间缩短。

  • 开启方式:

    • 设置必要属性:开启并行模式
    set hive.exec.parallel=true; 
    
  • 可以设置的属性:

    • 设置同一个sql可以并行执行的数量:
    set hive.exec.parallel.thread.number=8;
    
  • 注意:对于并行的执行,对服务器的资源要求是比较空闲的时候,或者性能比较好的集群上才可以发挥优势。

严格模式

  • 说明:

    • Hive提供了一个严格模式,可以防止用以执行一些影响不好的查询语句。
  • 开启方式:

    • 设置必要属性:开启严格模式(注意默认的是非严格模式)
    set hive.mapred.mode=nonstrict;
    
  • 可以设置的属性:

    • nonstrict:非严格模式

    • strict:严格模式

  • 开启严格模式可以禁止三种类型的查询:

    1. 对于分区表: 除非where子句中必须存在分区字段来继续过滤限制,否则不允许执行。

    2. 使用order by 进行排序必须使用limit子句进行限制,否则不允许执行。

    3. 限制笛卡尔积的查询

JVM重用

  • 说明:

    • JVM的调优参数是属于Hadoop部分的设置,Hadoop默认的配置是使用JVM来执行map和reduce任务的,而对于JVM启动的时候就会造成相当大的资源的开销。尤其是一个MR任务中运行的子任务例如maptask或者reducetask 的数量很多时候,JVM启动的时候资源的开销就会更大。

    • 所谓JVM重用在一个JVM的进程中,对一个任务(job) 可以重新使用N次;N是重用的次数,可以在mapred-site.xml配置文件中进行设置。

  • 开启方式:

    • 设置必要属性:重用数
    set mapreduce.job.jvm.numtasks=n;
    
    • n的意思为:N是重用的次数。
  • 注意:对于JVM重用的值通常设置在10-20之间,具体需要设置多少最好根据业务需求,以及服务器的性能来继续测试得出结果。

推测执行

  • 说明:

    • 在分布式的环境下,因为程序的BUG,或者负载的不均衡,或者资源分布不平均,就会造成一个job中多个任务运行的速度不一致,有且任务的运行速度可能明显慢于其他任务,这些任务就拖慢job的整体执行速度。为了避免这种事情发生,所有Hadoop采用了一种推测执行的机制,根据一定的法则来推测出拖后腿的任务,并且为这样的任务启动一个备份任务,这个任务与原始任务处理同一份数据,并且选用最先成功运行完成的任务的结果作为最终输出结果。
  • 开启方式:

    • 设置必要属性:开启推测执行(默认是开启的)
    set mapreduce.map.speculative=true;
    set mapreduce.reduce.speculative=true;
    
    • 控制推测执行
    hive.mapred.reduce.tasks.speculative.execution=true;
    #如果说用户输入的数据非常大,执行需要很长时间,这个时候开启推测执行,就会造成很大的资源消耗
    
  • 前提:

    • 任务必须执行超过5% 的时候才会启动推测执行。

    • 如果处理的数据出现了数据倾斜则开启推测执行是没有意义的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值