hive的优化

一:hadoop框架的特征:

    1,不怕数据量大,就怕数据倾斜

    2,Jobs 数比较多的作业运行效率相对比较低,如子查询比较多

    3,sum,count,max,min 等聚集函数,通常不会有数据倾斜问题

二:数据倾斜

    由于数据分布不均匀,造成数据大量的key的集中到某一台服务器,造成数据热点

三:容易造成数据倾斜的情况

   1,group by 不和聚集函数搭配使用的时候

   2,count(distinct),在数据量大的情况下,容易数据倾斜,因为 count(distinct)是按 group

        by 字段分组,按 distinct 字段去重

   3,join操作

四:主要表现:
        任务进度长时间维持在 99%或者 100%的附近,查看任务监控页面,发现只有少量 reduce
    子任务未完成,因为其处理的数据量和其他的 reduce 差异过大
        单一 reduce 处理的记录数和平均记录数相差太大,通常达到好几倍之多,最长时间远大

    于平均时长

五:业务场景

    1,空值产生的数据倾斜

    2,不同数据类型关联产生数据倾斜

    3,大小表关联查询

            map join  概念:将其中 做 连接 的小 表(全量 数据 )分发到所有 MapTask  端进行 Join ,从

        而避免了 reduceTask

六:hive的执行过程

         Hive 将 HQL 转换成一组操作符(Operator),比如 GroupByOperator, JoinOperator 等
         操作符 Operator 是 Hive 的最小处理单元
         每个操作符代表一个 HDFS 操作或者 MapReduce 作业
        Hive 通过 ExecMapper 和 ExecReducer 执行 MapReduce 程序,执行模式有本地模式和分

        布式两种模式

七:hive的优化策略

    1,好的设计模型事半功倍

    2, 解决数据倾斜问题

    3,减少job数

    4, 设置合理的mapreduce的task数

    5, 了解的业务的数据分布情况

    6, 数据量较大的情况下,慎用 count(distinct),group by 容易产生倾斜问题

    7,小文件的合并

    8,全局的优化观念

    9,如何做笛卡尔积  MapJoin 在子查询中可能出现未知 BUG  这时 MapJoin 才是最好的解决办法  扩充小表

    10,怎样写 in/exists  语句  用left semi join

    11,设置合理的 maptask 个数

    12,小文件合并

    13, 设置合理的 reduceTask  的 数量  依据 Hadoop  的经验,可以将参数 2  设定为 0.95*( 集群中 datanode  个数) 

    14, 合理利用分区:Partition 

    15, 合理利用分桶:Bucketing 和 和 Sampling

    16,Join  优化
            总体原则:
            1、 优先过滤后再进行 Join 操作,最大限度的减少参与 join 的数据量
            2、 小表 join 大表,最好启动 mapjoin

            3、 Join on 的条件相同的话,最好放入同一个 job,并且 join 表的排列顺序从小到大

    17,Group By 优化 可以在map端做聚合

    18,合理利用文件存储格式

    19,job并行化处理

    20 ,合理利用压缩格式


        


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值