• HiveQL:调优


    1.使用EXPLAN/EXPLAN EXTENDED查看执行计划

    -- 待补充

    2.本地模式

    /*
    有时候hive查询数据量是非常小的,这种情况下,为查询触发执行任务对的时间消耗有可能比实际job执行时间要多得多。对于大多数这种情况,Hive可以通过本地模式在单台机器上(或某些时候在单个进程中)处理所有的任务,这样对于小数据集,执行时间明显被缩短。
    */
    set mapred.tmp.dir = local

    3.并行执行

    /*Hive会将一个查询转化成一个或者多个阶段。默认情况下,Hive一次只会执行一个阶段。不过,某个特定的的job可能包含众多的阶段,而这些阶段并非是完全相互依赖的,也就是说有些阶段是可以并行执行的,这样坑使得整个job的执行时间缩短。
    */
    -- 设置参数
    hive.exec.parallel = true
    SET hive.exec.parallel.thread.number=16;

    4.严格模式

    /*
    Hive提供了一个严格模式,可以防止用户执行那些可能产生一些不合适的查询
    */
    -- 设置参数
    hive.mapred.mode = true
    /*
    可以进制三类查询
    1.对于分区表,除非WHERE语句中含有分区字段过滤条件来限制数据范围,否则不允许执行。避免全表扫描占用过大资源
    2.对于使用ORDER BY语句的查询,要求必须使用LIMIT语句,因为ORDER BY为了执行排序过程会将所有的结果数据分发到同一个reducer中进行处理,强制要求用户增加整个LIMIT语句可以防止reducer而外执行很长一段时间。
    3.限制笛卡尔积查询。对于关系行数据库,用户在JOIN时不用ON用WHERE语句,执行优化器会会将WHERE转化成ON,但是hive不会执行这种优化
    */

    5.调整mapper和reducer个数

    /*
    Hive是按照输入数据的数据量大小来确定reducer个数的,我们可以通过dfs -count命令来计算输入量的大小
    */
    hive.exec.reducers.bytes.per.reducer --默认是为1GB
    mapred.reduce.tasks -- 可以设置reduce task的大小,但是不推荐设置确定的,会导致会变慢。
    hive.exec.reducers.max -- 在共享集群上处理大任务时,为了控制资源控制情况,可以阻止某个查询消耗太多的reducer资源。

    6.JVM重用

    -- 待补充

    7.动态分区调整

    -- 设置参数
    hive.exec.dynamic.partition.mode = strict -- 严格模式时,至少有一个为静态分区
    hive.exec.max.dynamic.partitions -- 限制最大的动态分区的个数
    hive.exec.max.dynamic.partitions.pernode -- 

    8.推测执行

    /*
    推测执行是hadoop的一个功能,其可以触发执行一些重复的任务(task).目标是通过加快task的结果以及进行侦测将执行满的TaskTracker加入到黑名单的方式提高整体的效率。
    */
    mapred.map.tasks.speculative.execution = true
    mapred.reduce.tasks.speculative.execution = true
  • 相关阅读:
    ES6新特性
    浏览器兼容问题
    跨域
    箭头函数与普通函数的区别
    单页面应用
    vue试题
    Git 常用命令
    【分享代码】一个笨办法获取容器的剩余内存
    【笔记】thanos receiver的router模式
    【分享】让prometheus支持PUSH模式,可以使用remote write协议推送数据
  • 原文地址:https://www.cnblogs.com/lijingang/p/11395148.html
Copyright © 2020-2023  润新知