hive中提高代码运行效率的参数配置及代码优化

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_37536446/article/details/82462742

今天整理下平时hive中用以提高代码运行效率的几个参数,和大家分享一下:

1、set mapreduce.map.memory.mb=5120;

      此参数是设置每个map使用内存的大小,默认1024M,这个参数是控制map数量的关键参数。如果需要处理的文件较多或             较大时,则分开处理效率会较快,如果文件较少或较小时会造成map资源的浪费。

2、set mapreduce.reduce.memory.mb=10240;

      此参数是每个MapReduce作业的reduce任务可申请的内存资源数量,默认1024M,这个参数是控制reduce数量的关键参数。

3、set mapreduce.map.java.opts=-Xmx4096m;

      在执行map任务的时发生java heap space问题任务会被杀掉。其可以配置比mapreduce.map.memory.mb的内存还要大,当         设置的比物理可用内存还要大时,会使用虚拟内存。当设置内存数大于虚拟可用内存时会因为申请了超过门限的内存而被             yarn干掉。

4、set mapreduce.reduce.java.opts       =-Xmx9000m;

       这个参数设置同set mapreduce.map.java.opts

5、set mapreduce.task.timeout=1800000;
      这个参数主要是控制job执行的时间。

6、set hive.exec.parallel=true;

      此参数是开启并发执行。当某个job中可能含有众多的阶段,其中某些没有依赖关系的阶段可以并发执行,开启并发执行后job        任务可以更快的完成。

7、在执行hive SQL进行多个表连接时,应是小表连大表。原因是:hive在对每行记录操作时会把其他表先缓存起来,直到扫描         最后的表进行计算。

8、在使用三个以上的表进行join操作时,如果每个on使用相同的字段连接时只会产生一个MapReduce。

9、在执行SQL时如用distinct进行去重时,应尽量避免而选择groupby来进行替代。

10、当遇到一个大表去连接一个小表时,可以使用mapjoin将小表加载到内存中。案例:
       

select /*+ MAPJOIN(a)*/
       a.name
      ,b.class
  from a
  join b on a.name=b.name

以上是工作中遇到的提高代码运行效率的方法,如有错误的地方欢迎指正,后续遇到会继续更新~

猜你喜欢

转载自blog.csdn.net/weixin_37536446/article/details/82462742