hive工作中的一些优化策略
2019-09-17 10:40:09来源:博客园 阅读 ()
hive工作中的一些优化策略
1、hive抓取策略 hive.fetch.task.conversion = more/none more不走mr,none走mr 2、explain 显示执行计划 3、设置本地运行模式 set hive.exec.mode.local.auto = true hive.exec.mode.local.inputbytes.max 默认128M,表示加载文件的最大值,若大于该配置仍会以集群方式运行 4、并行计算 Set hive.exec.parallel = true/falses Set hive.exec.parallel.thread.number 默认8个5、严格模式 set hive.mapred.mode = strict/nonstrict 限制查询:
- 对于分区表,必须添加where对于分区字段的过滤条件
- order by语句必须包含limit输出限制
- 限制执行笛卡尔积的查询
- order by:对于查询结果做全排序,只允许一个reduce处理(当数据量较大时,慎用。严格模式下,必须结合limit来使用)
- sort by:对于单个reduce的数据进行排序
- distribute by:分区排序,经常和sort by结合使用
- cluster by:相当于sort by+distribute by
- cluster by不能通过asc、desc的方式指定排序顺序,可通过distribute by column sort by column asc|desc的方式
- join计算时,将小表(驱动表)放在join的左边
- Map join:在map端完成join
- SQL方式:在sql语句中添加map join的标记(mapjoin hint)
- 语法:select /* MAPJOIN(b) */ a.key, a.value from a join b on a.key = b.key
-
自动的mapjion
- 通过以后配置启用自动的mapjion
-
- set hive.auto.convert.join = true (为true时,hive自动对左边的表统计量,如果时小表就加入内存,即对小表启动mapjion)
- hive.mapjion.smalltable.filesize 默认25M
- Hive.ignore.mapjion.hint 是否忽略maojoin hint的标
-
- 通过以后配置启用自动的mapjion
- SQL方式:在sql语句中添加map join的标记(mapjoin hint)
- 尽可能使用相同的连接键(转化为一个mr)
- 大表join大表 (不一定有用)
- 空key过滤:有时join超时是因为某些key对应的数据太多,而相同key对应的数据都会发送到相同的reducer上,从而导致内存不够。此时我们应该仔细分析这些异常的key,很多情况下,这些key对应的数据是异常数据,我们需要在SQL语句中进行过滤。
- 空key转换:有时虽然某个key为空对应的数据很多,但是相应的数据不是异常数据,必须要包含在join的结果中,此时我们可以表a中key为空的字段赋一个随机的值,使得数据随机均匀地分不到不同的reducer上
- 通过设置参数开启map端的聚合:set hive.map.aggr=true
- hive.groupby.mapaggr.checkinterval —map端gourp by执行聚合时处理的多少行数据(默认100000)
- hive.map.aggr.hash.min.reduction —进行聚合的最小比例(预先对100000条数据做聚合,若聚合之后的数据量/100000的值大于配置的0.5,则不会聚合)
- hive.map.aggr.hash.percentmemory —map端聚合使用的内存最大值
- hive.map.aggr.hash.force.flush.memory.threshold —map端做聚合操作时hash表的最大可用内容,大于该值出发flush
- hive.groupby.skewindata — 是否对groupby产生的数据倾斜做优化。默认false,当选项设定为 true,生成的查询计划会有两个 MR Job。第一个 MR Job 中,Map 的输出结果集合会随机分布到 Reduce 中,每个 Reduce 做部分聚合操作,并输出结果,这样处理的结果是相同的 Group By Key 有可能被分发到不同的 Reduce 中,从而达到负载均衡的目的;第二个 MR Job 再根据预处理的数据结果按照 Group By Key 分布到 Reduce 中(这个过程可以保证相同的 Group By Key 被分布到同一个 Reduce 中),最后完成最终的聚合操作。
- 设置合并属性
- 是否合并map输出文件:hive.merge.mapfiles=true
- 是否合并reduce输出文件:hive.merge.mapredfiles=true
- 合并文件的大小:hive.merge.size.per.task=256*1000*1000
- Map数量相关的参数
- mapred.max.split.size 每个split的最大值,即每个map处理文件的最大值
- mapred.min.split.size.per.node 一个节点上split的最小值
- mapred.min.split.size.per.rack 一个机架上split的最小值
- reduce数量相关的参数
- mapred.reduce.tasks 强制指定reduce任务的数量
- hive.exec.reducers.bytes.per.reduce 每个reduce任务处理的数据量
- hive.exec.reduce.max 每个任务最大的reduce书
- 适用场景
- 小文件个数过多
- task个数过多
- 通过set mapred.job.reuse.jvm.num.tasks=n来设置
- 缺陷:设置开启之后,task插槽会一直占用资源,无论是否有task运行,直到所有的task即整个job全部执行完成时,才会释放所有的task插槽的资源
原文链接:https://www.cnblogs.com/liufei-yes/p/11518338.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- MyBatis中的$和#,用不好,准备走人! 2020-06-11
- 构造函数中的this()和super() 2020-06-10
- 怎么用Java 高效提取、替换、删除PDF文档中的图片 2020-06-09
- Spring12_Spring中的事务控制 2020-06-07
- 深入理解:设计模式中的七大设计原则 2020-06-07
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash