HIVE之优化

HIVE优化


1、表和sql语句的优化

思想:
大表拆分成小表,分区表,(动态分区)有可能产生大量的分区,外部表(保证数据安全),临时表是将表的数据清洗,获得想要的字段。

2、MR优化

思想:
HIVE中底层运行的是MR程序,所以也要对MR进行优化。

并行执行:
在map运行过程中,有的时候需要存在依赖关系。
例如:做单词统计,一个map做完单词统计,下一个map的输入正好是上一个map的输出,这时候就是一个map依赖于另一个map的时候。
在很多时候map task之间是没有关系的,那么就可以一起并行运行。Map的并行功能默认是关闭的,首先先开启并行功能:

set hive.exec.parallel=true;

设置并行执行的线程个数:

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

PS: 一般在工作中,都会选择开启这个功能。

3、JVM重用

思想:
对于job程序来说,频繁使用开关JVM,在这个过程中会造成大量的资源浪费,可以设置JVM重用在开启的时候可以多跑一些程序。
经过测试选择合理的数目:

set Mapreduce.job.jvm.numbertasks=4;

推测执行:
当某个任务出现迟迟不结束的情况下,可以开启推测执行,开启一个同样的任务,任务谁先完成谁就会去关闭另一个同样的任务。
缺点:
1、过多的占用资源
2、有可能发生重复写入的情况,发生异常。

4、HIVE的本地模式

概述:
如果在HIVE中运行的job数据量不大,提交到集群中,拉去资源的时候很浪费时间,这个时候就可以考虑使用本地模式
例如:
HIVE在3个集群中的任意一个集群上,提交的job就在HIVE本地的机器上。
前提:
1、处理小数据集。
2、输入1的数据块大小不能超过128MB。
3、Reduce的个数不超过1个。
设置本地模式的参数:

set hive.exec.mode.local.auto=true;

猜你喜欢

转载自blog.csdn.net/aaaaajiboke/article/details/82733045