Hive优化

 

1.Fetch抓取 :

目的:让hive sql 能不走MR 尽量不走MR

通过hive的参数来配置, 决定哪些sql可以不走MR:
set hive.fetch.task.conversion  :
可选值: none | minimal | more  默认值 more
none: 如果配置了此值, 表示所有的查询操作, 都会执行MR
minimal : 如果配置了此操作, 执行查询 全部数据 和根据字段查询操作 和 limit , 可以不走MR 其他都走MR
more:  如果配置了此操作, 执行 查询全部数据, 根据字段查询, 简单的条件查询 以及 limit 都是可以不走MR的
此优化无需配置

 

2.本地模式:

目的:在执行MR的时候, 优先采用本地模式 (能走本地MR模式, 尽量走本地MR )

配置操作 :
set hive.exec.mode.local.auto=true;  默认值为false  
判断在什么情况下走本地MR: 
set hive.exec.mode.local.auto.inputbytes.max=134217728;  数据量的大小 128M
set hive.exec.mode.local.auto.input.files.max=4;  文件的个数
以上两个条件, 必须全部满足 才会走本地MR  否则都走yarn集群
请思考: 是否所有MR走本地都比走yarn集群效率高    
肯定不对, 如果数据量比较少, 走本地要比走yarn 效率高一些, 当数据量比较大的时候, 走yarn的效率要比本地要高
因为本地模式是一种单进程模式
故: 此操作一般在测试环境下需要配置, 在生产环境下, 配不配已经没有太大的作用了

3.Join的优化 :

在进行多表操作的时候, 就会出现join
当大表 与 小表进行join的优化: 可以采用 map join 来实现
解决:
    提升join的效率
    可以解决join的数据倾斜的问题
弊端: 
    对内存消耗提升
如何配置呢? 
    set hive.auto.convert.join = true;  默认开启的
    set hive.mapjoin.smalltable.filesize= 25000000; 约 25M
在编写sql的时候, 大表和小表放置位置是否有要求呢? 
    在hive 1.0以前老版本, 要求必须将小表放置在最前面才可以实施 , 在 1.0以后的版本中, hive为了简化操作, 不做此要求, 不用放置在什么位置上, hive自己会判断那个表是大表那个是小表
​
当大表和 大表 进行join  如何优化呢? 
优化方案一
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值