hive优化策略

 

hive优化策略:
    1.表的优化:数据量大时,可以拆分表,大表拆分为小表,拆分为分区表,外部表。
           小表和大表join,把数据量小的表放在join左边,先缓存,减少表join时的内存消耗量
    2.数据倾斜:hive.map.aggr=true  (默认true) 这个配置项代表是否在map端进行聚合,相当于Combiner
          在mapreduce程序中合理设置切片大小 job.setInputFormatClass(CombineTextInputFormat.class);        
                              CombineTextInputFormat.setMinInputSplitSize(job, 2048);        
                              CombineTextInputFormat.setMaxInputSplitSize(job, 4096);
         设置reduce个数
         根据业务自定义分区规则
    3.并行执行:没有依赖性的MR任务,可以使用并行执行,同时间执行多个MR任务,以提高效率
           set hive.exec.parallel=true  ; // 开启任务并行执行
           set hive.exec.parallel.thread.number=8; //默认值为8个任务可以同时运行
    4.严格模式:防止一些查询出现不好影响(笛卡尔积等)    hive.mapred.mode =strict/nostrict
           分区表必须存在where语句;对于orderby必须使用limit以减少reduce处理的数据量
    5.jvm重用:每次运行任务就会开启一个jvm,提交任务频繁会频繁开启jvm,浪费资源,对于小文件
         可以减少jvm开启次数   mapreduce.job.jvm.numtasks 值代表处理任务的个数,例如10
    6.推测执行:默认是开启的,防止任务卡死。开启任务运行5%以上才会开启推测执行
          mapreduce.map.speculative
    7.fetch抓取:把不需要MR任务计算的查询语句设置成不执行mr任务。
            none---------禁用fecth,禁用之后所有查询都会执行mr任务
            more---------进行select filter limit 查询时不执行mr任务
               minimal------进行select limit查询时不运行mr任务,filter会执行mr任务
    8.本地模式:把小文件的处理放在hive本地节点上进行处理。通过判断文件大小,输入文件个数判断
           是否在本地执行。文件默认值大小为128M,文件个数默认为4个。
           hive.exec.mode.local.auto=true;(默认为false)
           当一个job满足如下条件才能真正使用本地模式:
           1.job的输入数据大小必须小于参数:hive.exec.mode.local.auto.inputbytes.max(默认128MB)
           2.job的map数必须小于参数:hive.exec.mode.local.auto.tasks.max(默认4)
           3.job的reduce数必须为0或者1
                        报错,各种找不到jar包时运行一个语句:set fs.defaultFS=file:///
    9.执行计划:把复杂hql语句简单化处理,例如多表join,hql语句前加explain可查看hql语句语法树即执行计划

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值