美文网首页
hive的优化点,能够提升的效率差异

hive的优化点,能够提升的效率差异

作者: miss幸运 | 来源:发表于2018-07-05 10:02 被阅读29次

比较重要是头几个和后几个,尤其是最后两个,性能提升效果是最明显的。但是会同时开启更多的MR任务,这就需要一个平衡了。

嵌套SQL并行执行优化:

set hive.exec.parallel=true;

set hive.exec.parallel.thread.number=16;

效率可提升至少100%

某job需要11个stage:

非并行35分钟

并行8个job执行10分钟

并行16个job执行6分钟

Hive查询的优化:

一、数据量大的表和数据量小的表做关联的时候,把数据量小的表放到join前面去select。

原因是在 Join 操作的 Reduce 阶段,位于 Join 操作符左边的表的内容会被加载进内存,将条目少的表放在左边,可以有效减少发生内存溢出错误的几率。

二、Join优化

Join查找操作中如果存在多个join,且所有参与join的表中其参与join的key都相同,则会将所有的join合并到一个mapred程序中。

例:

SELECT a.val, b.val, c.val FROM a JOIN b ON (a.key = b.key1) JOIN c ON (c.key = b.key1) 在一个mapre程序中执行join

SELECT a.val, b.val, c.val FROM a JOIN b ON (a.key = b.key1) JOIN c ON (c.key = b.key2) 在两个mapred程序中执行join

Map join的关键在于join操作中的某个表的数据量很小

例:

SELECT /*+ MAPJOIN(b) */ a.key, a.value FROM a join b on a.key = b.key

三、用sum() group by的方式来替换count(distinct)。

四、排序优化

Order by 实现全局排序,一个reduce实现,效率低

Sort by 实现部分有序,单个reduce输出的结果是有序的,效率高,通常和DISTRIBUTE BY关键字一起使用(DISTRIBUTE BY关键字 可以指定map 到 reduce端的分发key)

CLUSTER BY col1 等价于DISTRIBUTE BY col1 SORT BY col1.

五、合并小文件

文件数目过多,会给 HDFS 带来压力,并且会影响处理效率,可以通过合并 Map 和 Reduce 的结果文件来尽量消除这样的影响

hive.merge.mapfiles = true是否和并 Map 输出文件,默认为 True

hive.merge.mapredfiles = false是否合并 Reduce 输出文件,默认为 False

hive.merge.size.per.task = 25610001000合并文件的大小。

这里的参数没有写到上面的表格里是因为这是可以根据任务不同临时设置的,而不一定非要是全局设置。有时候全局设置了反而对大文件的操作有性能影响。

六、使用分区,RCFile,lzo,ORCFile等

Hive中的每个分区都对应hdfs上的一个目录,分区列也不是表中的一个实际的字段,而是一个或者多个伪列,在表的数据文件中实际上并不保存分区列的信息与数据。Partition关键字中排在前面的为主分区(只有一个),后面的为副分区

静态分区:静态分区在加载数据和使用时都需要在sql语句中指定

例:(stat_date='20160625',province='hunan')

动态分区:使用动态分区需要设置hive.exec.dynamic.partition参数值为true,默认值为false,在默认情况下,hive会假设主分区时静态分区,副分区使用动态分区;如果想都使用动态分区,需要设置set hive.exec.dynamic.partition.mode=nostrick,默认为strick

例:(stat_date='20160625',province)

七、使用外部表而尽量少用内部表,这主要从数据的安全性上考量。
八、Hive参数优化:


image.png

相关文章

  • hive的优化点,能够提升的效率差异

    比较重要是头几个和后几个,尤其是最后两个,性能提升效果是最明显的。但是会同时开启更多的MR任务,这就需要一个平衡了...

  • Hive优化

    Hive HQL优化 Hive优化目标在有限的资源下,执行效率更高 常见问题数据倾斜map数设置reduce数设置...

  • 数仓--Hive-面试之Hive优化策略

    Hive的优化策略大致分为:配置优化(hive-site.xml和hive-cli执行前配置)、表优化、hive数...

  • hive性能优化

    Hive性能优化: hive分配map和reduce数量 m,r数据量,对效率影响较大,因为在启动和初始化阶段是很...

  • Hive优化

    Hive简单优化与定期ETL Hive优化 Hive的执行依赖于底层的MapReduce作业,因此对Hadoop作...

  • Hive优化

    Hive优化 今天的主要内容——Hive优化 Fetch抓取Hive 中对某些情况的查询可以不必使用 MapRed...

  • 时间管理 书摘

    1.从根源上优化自己的工作流程,提升效率的同时关注如何提升效能,节约时间。 2.找出隐形浪费的时间点,逐个击破。 ...

  • 浅析索引技术

    1. 认识索引 索引是一种常见的数据库优化手段,设计优良的索引能够大幅提升数据库的查询效率,提升并发能力。 举一个...

  • 躲在世界角落慢慢变强第24天

    希望能够提升自身的效率。

  • Java Web实战篇-代码之美

    对于提升代码的运行效率 优化一两处代码对于整体的运行效率意义不大,如果能够把写优质代码的习惯保持在一个项目中这样就...

网友评论

      本文标题:hive的优化点,能够提升的效率差异

      本文链接:https://www.haomeiwen.com/subject/cjvuuftx.html