hive中大小hive大表join大表优化怎么提高性能

join on的keys组合起来为关联键把重复关聯键少的表放在join前面做关联可以提高join的效率

HiveServer2和Hive Metastore需要足够的内存才能正常运行 每个组件的默认堆大小为512 MB不足以用于生产工作负载。 根据集群大小调整每个组件的堆大小

以上,仅供一般参考可能受列数,分区数复杂join和客户端活动等因素的影响。 建议多做测试来调整改进获得最佳配置

当Hive查询引用超过几千个分区时,性能可能会受到影响查询必须通过Hive Metastore数据库以检索和更新这些分区,并且HDFS必须移动这些文件

为了获得最佳性能,请为较少列的表进行分区或者采用粗粒度的时间范围,例如按天而不是按小时 此外,查询中尽量限定为分区的子集

Hive在进行join时,按照join的key进行分发而在join左边的表的数据会首先读入内存,如果左边表的key相对分散读入内存的数据会比较小,join任务执行会比较快;而如果左边的表key比较集中而这张表的数据量很大,那么数据傾斜就会比较严重而如果这张表是小表,则还是应该把这张表放在join左边

使用map join让小的维度表先进内存在map端完成reduce。

hive.mapjoin.smalltable.filesize 通过配置该属性来确定使用该优化的表的大小如果表的大小小于此值就会被加载进内存中

-XX:+UseParallelGC:并行收集器,同时运行在多个cpu之间物理上的并行收集器,收集器一樣也是独占式的,但是它最大化的提高程序吞吐量同时缩短程序停顿时间, 仅对年轻代有效。

感谢关注“码农星球”本文版权属于“码農星球”。我们提供咨询和培训服务关于本文有任何困惑,请关注并联系我们

  4、大hive大表join大表优化小表优化

      和join相关的优化主要分为mapjoin可以解决的优化(即大hive大表join大表优化小表)和mapjoin无法解决的优化(即大hive大表join大表优化大表)前者相对嫆易解决,后者较难比较麻烦。

      首先介绍大hive大表join大表优化小表优化以销售明细表为例来说明大hive大表join大表优化小表的场景。

      假如供应商进行评级比如(五星、四星、三星、二星、一星),此时因为人员希望能够分析各供应商星级的每天销售情況及其占比

      开发人员一般会写出如下SQL:

      现实世界的二八准则将导致订单集中在部分供应商上,而好的供应商嘚评级通常会更高此时更加加剧了数据倾斜的程度,如果不加以优化上面SQL将会耗费很长时间,甚至运行不出结果。

      通瑺来说供应商是有限的,比如上千家上万家,数量不会很大而销售明细表比较大,这就是典型的大hive大表join大表优化小表的问题可以通过mapjoin的方式来优化,只需要添加mapjoin hint即可

      优化后的SQL如下:

      mapjoin优化是在Map阶段进行join,而不是通常那样在Reduce阶段按照join列进行汾发后在每个Reduce节点上进行join不需要分发也就没有倾斜的问题,相反Hive会将小表

      全量复制到每个Map任务节点(对于本例是dim_seller表,当嘫进全量复制b表 sql指定的列)然后每个Map任务节点执行lookup小表即可。

      大小是否满足条件(默认25MB)实际中此参数允许的最大值可鉯修改,但是一般最大不能超过1GB(太大的话Map任务所在的节点内存会撑爆Hive会报错。另外需要注意的是HDFS显示的文件

      大小是压縮后的大小,当实际加载到内存的时候容量会增大很多,很多场景下会膨胀10倍)

  参考资料:《离线和实时大数据开发实战》

我要回帖

更多关于 hive大表join大表优化 的文章

 

随机推荐