首页 > 其他分享 >Hive学习路线-优化

Hive学习路线-优化

时间:2023-11-25 10:04:49浏览次数:29  
标签:map set maptask exec hive 路线 job Hive 优化

十、优化

1. 数据倾斜

maptask和reducetask的个数

1.1 maptask的个数: 文件的大小、文件的个数、集群上blocksize的大小

问题:小文件过多的问题 ( maptask并不是越多越好 )

在map执行前进行合并,减少maptask的个数

//配置文件修改配置 <property> <name>hive.input.format</name> <value>org.apache.hadoop.hive.ql.io.CombineHiveInputFormat</value> </property> //命令行修改配置 set hive.input.format = org.apache.hadoop.hive.ql.io.CombineHiveInputFormat

问题:字段少,数据量,大小于128M的文件数据处理,造成一个maptask压力过大

添加maptask的个数( 127.999M<128M — maptask )

computeSpliteSize(){ 50 128 return Math.max( 0, Math.min(maxSize,blockSize)) } //命令行修改配置 set mapreduce.input.fileinputformat.split.maxsize=50 # 默认是256M 127.999 50 ----maptask 50 ----maptask 27.999 ----maptask

1.2 reducetask的个数,合理的设计

设置reduce的个数:

set mapreduce.job.reduces=10; # 一个job中的

reduce的个数决定的输出文件的个数,参考当前环境下的数据量和数据分布

2. JVM的重用(性能提升的力度很大50%)

在hadoop的配置文件mapred-site.xml,添加jvm配置:

mapreduce.job.jvm.numtasks

15

JVM的创建和启动会消耗大量的性能,不建议频繁的创建和启动

重用:一个jvm实例在同一个job作业中重用15次。

3.Fetch 抓取

Hive对某些操作不执行MapReduce计算

select * from user_tb; //查询语句没有必要去开启mr运算

配置文件:hive-site.xml <property> <name>hive.fetch.task.conversion</name> <value>more</value> <description> 0. none : 所有操作都执行mr 1. minimal : 全表查询,字段查询,limit,分区等操作 2. more : 查询和limit语句不走mr (不需要执行mr计算) </description> </property>

命令行修改:

set hive.fetch.task.conversion ; 查看默认值 set hive.fetch.task.conversion = more ; 查看默认值 select * from tbName;//不需要使用mr计算

4.本地模式

处理数据量非常小,hive可以在本地模式下的一台机器上处理当前job的所有的任务,减少执行时间。

开启本地模式:

//开启本地模式 <property> <name>hive.exec.mode.local.auto</name> <value>true</value> </property> //设置本地模式下能够处理的数据的数量规模 128M <property> <name>hive.exec.mode.local.auto.inputbytes.max</name> <value>134217728</value> </property> //设置本地模式下能够处理的数据的个数 <property> <name>hive.exec.mode.local.auto.input.files.max</name> <value>4</value> </property>

命令行:

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

5. 并发执行

Hive将命令划分成多个阶段执行,默认hive一次只执行一个阶段,减少执行时间

设置Hive的并发操作:

//是否并发的执行一个job作业 <property> <name>hive.exec.parallel</name> <value>false</value> </property> //一个job的并发度,默认 8 (此大小的设置和当前机器的硬件配置有关) <property> <name>hive.exec.parallel.thread.number</name> <value>8</value> </property>

命令行:

set hive.exec.parallel = true; //开启任务的并发执行 set hive.exec.parallel.thread.number = 10; //设置一个job的并发度

6.表的设计和查询优化

mapjoin:在map阶段进行数据的合并

默认情况下,join操作在reduce阶段完成。

开启Mapjoin: //开启mapjoin <property> <name>hive.auto.convert.join</name> <value>true</value> </property> //如果文件小于25M则是要被合并小表 <property> <name>hive.mapjoin.smalltable.filesize</name> <value>25000000</value> </property> set hive.auto.convert.join = true; set hive.mapjoin.smalltable.filesize = 20000000; 案例: order_tb join user_tb 总结:在map阶段进行合并操作,避免reduce数据的倾斜和压力 group by: map阶段切割的同一个key------------->一个reduce处理----------->outputFile (数据倾斜) 同一个key的数量级大 默认聚合操作在reduce端处理 在map阶段对key进行聚合操作 实现:在map端开启聚合操作 //开启map阶段聚合操作 <property> <name>hive.map.aggr</name> <value>true</value> </property> //map阶段能够聚合的数据量 <property> <name>hive.groupby.mapaggr.checkinterval</name> <value>100000</value> //十万条 </property> //如果存在数据倾斜,启动均衡负载 ,默认是关闭 <property> <name>hive.groupby.skewindata</name> <value>true</value> </property> 启动均衡负载原理: job-----添加一个新的MR JOB,在当前job的map中将处理结果 随机 交给reduce,避免数据发生倾斜 然后使用第二个MR JOB实现对结果数据的分组在合并。 总结:使用两个job,一个实现负载均衡,一个实现最终数据的聚合操作。

标签:map,set,maptask,exec,hive,路线,job,Hive,优化
From: https://blog.51cto.com/u_16270801/8556577

相关文章

  • Hive学习路线-自定义函数
    九、自定义函数1.查看系统提供的函数列表showfunctions;2.查看具体某一个函数的描述信息descfunction[extended]函数名称;3.自定义函数Userdefinedfunction/UDF3.1创建一个java项目,导入hive的libs3.2创建类,继承org.apache.hadoop.hive......
  • .NET8极致性能优化Non-GC Heap
    前言.NET8里面JIT引入了一个新的机制,叫做Non-GCHeap。JIT可以确保相关对象分配在Non-GCHeap上,该堆像其名称一样,不受GC管理。JIT需要保证这个对象没有被GC引用,并且在这个对象的生命周期内一直是根对象(不会被GC消灭的对象)的状态。原文:.NET8极致性能优化Non-GCHeap概述为什......
  • 3-Hive学习路线-软件的基本操作
    2.3.软件的基本操作2.3.1.进入hive[root@localhost~]hive回车2.3.2.操作showdatabases;//显示所有数据库usedatabaseName;//切换到指定数据库showtables;//显示数据中所有表createtable.......
  • 线段树优化建图
    CF786B题意:定义\((u,v,w)\)表示\(u\)向\(v\)连了边权为\(w\)的边。有三种连边操作\((u,v,w)\)\(\foralli\in[l,r],(u,i,w)\)\(\foralli\in[l,r],(i,u,w)\)求最短路。暴力加边是\(O(nm)\)的,考虑优化。可以把图建到线段树上,线段树每个结点向左右儿子连\(w......
  • 优化 AWS 云成本:降本增效的实用指南
    引言AWS云提供了广泛的服务,但有效地管理成本对于企业至关重要。通过实施一系列的最佳实践,你可以降低成本,提高效率,同时保持灵活性。本文将重点介绍如何实施和监控AWS云成本的优化措施。实施阶段1. 选择适当的实例类型和规格首先,仔细评估你的工作负载需求,并选择最适合的实例类型......
  • DP优化技巧
    感谢https://www.luogu.com.cn/user/249973#main老师。DP优化技巧矩阵优化DP1.矩阵快速幂(优化dp)2.四边形不等式优化dp(a,b,c,d)(ac+bd<=ad+bc)3.数据结构优化dp(线段树)4.单调队列、二分栈优化dp5.斜率优化dp矩阵定义矩阵乘法(更常见),矩阵加法矩阵加法一般式:\(C_{i,j}=A_{i,......
  • 后端的性能优化有哪些方面?
    Java的性能优化可以从多个方面入手,从影响性能的方面考虑一下。包括以下几个方面:线程池调优:适当地调整线程池的大小和线程数,可以提高程序的并发性能和响应速度。内存管理:合理地管理内存使用,包括对象的创建和销毁,可以提高程序的执行效率。IO操作优化:采用NIO方式可以减少IO......
  • blender布线优化
    在雕刻模式下选中滑动松弛(拓补)笔刷进行使用:该笔刷将网格的拓扑滑移到细节更多的区域,同时尽可能少地改变网格的集合形状。当按下Shift键时,该笔刷进入平滑模式该模式下笔刷将在不改变网格的体积的情况下使四边面的分布更平均。编辑模式下按A全选点然后按M选择按距离合并......
  • mysql 一些优化参数
     大批量数据加载优化load数据加载格式:loaddatalocalinfile'文件路径'intotable表名fieldsterminatedby'[分隔符]'lineterminatedby'[换行符]'11、首先,检测全局变量‘local_infile’的状态,如果是off状态则是不可用showglobalvariableslike'local_infile';......
  • Centos系统udp丢包&内核参数优化
    echo0>/proc/irq/31/smp_affinity_listecho1>/proc/irq/33/smp_affinity_list这两个命令是用于设置Linux中中断处理程序的亲和性,以提高系统的性能和稳定性。在Linux系统中,系统中断(IRQ)是由硬件触发的,它们通常被用于处理来自硬件设备的请求(例如,网络接口卡、磁盘控制器......