Hive提高查询效率的八条军规_第1页
Hive提高查询效率的八条军规_第2页
Hive提高查询效率的八条军规_第3页
Hive提高查询效率的八条军规_第4页
Hive提高查询效率的八条军规_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、01开启FetchTask一个简单的查询语句,是指一个没有函数、排序等功能的语句,当开启一个Fetch Task功能,就执行一个简单的查询语句不会生成MapRreduce作业,而是直接使用FetchTask,从hdfs文件系统中进行查询输出数据,从而提高效率。设置的方式:Hive.fetch.task.conversion默认为minimal修改配置文件hive-site.xmlhive.fetch.task.conversionmoreSomeselectqueriescanbeconvertedtosingleFETCHtaskminimizinglatency.Currentlytheq

2、ueryshouldbesinglesourcednothavinganysubqueryandshouldnothaveanyaggregationsordistincts(whichincurrsRS),lateralviewsandjoins.1.minimal:SELECTSTAR,FILTERonpartitioncolumns,LIMITonly2.more:SELECT,FILTER,LIMITonly(+TABLESAMPLE,virtualcolumns)或者当前session修改hivesethive.fetch.task.conversion=more;执行SELECTi

3、d,moneyFROMmlimit10;不走mr02合并中间表一个日志文件中,每一行记录,会有很多很多字段,四五十个字段很正常。实际分析中,常常使用少数几个字段将原始的表中数据,依据业务需求提取出要分析的字段,数据放入到对应的业务表(子表)中,实际的业务针对业务表进行分析。在实际中,我们会发现,有些业务处理,会有共同数据集用户表、订单表、商品表,三个表需要进行join的操作,join 会产生一个结果集,会有很多的业务是针对此jion结果集进行分析。优化:将众多的业务中相同的中间结果集,抽取到一个Hive中的表中去。03合理使用分区表外部表、分区表,结合使用,采用多级分区。数据采用存储格式(te

4、xtfile、orcfile、parquet)或者数据压缩(snappy)。明细数据我们一般采用按天分区,对于特别大的表,可以采用子分区,每个分区其实对应到HDFS上就是一个目录。数据存储方式我们可以采用parquet列式存储,同时具有很好的压缩性能;同时可以减少大量的表扫描和反序列化的时间。在OLAP查询场景下,我们选择需要的列信息进行查询,而不是直接select * 查询所有字段。04jvm重用JVM重用是hadoop调优参数的内容,对hive的性能具有非常大的影响,特别是对于很难避免小文件的场景或者task特别多的场景,这类场景大多数执行时间都很短。hadoop默认配置是使用派生JVM来

5、执行map和reduce任务的,这是jvm的启动过程可能会造成相当大的开销,尤其是执行的job包含有成千上万个task任务的情况。JVM重用可以使得JVM实例在同一个JOB中重新使用N次,N的值可以在Hadoop的mapre-site.xml文件中进行设置。mapred.job.reuse.jvm.num.tasks 1也可在hive的执行设置:setmapred.job.reuse.jvm.num.tasks = 10;JVM的一个缺点是,开启JVM重用将会一直占用使用到的task插槽,以便进行重用,直到任务完成后才能释放。如果某个“不平衡“的job中有几个reduce task 执行的时间

6、要比其他reduce task消耗的时间多得多的话,那么保留的插槽就会一直空闲着却无法被其他的job使用,直到所有的task都结束了才会释放。05年Speculative execution(推测执行)所谓的推测执行,就是当所有task都开始运行之后,Job Tracker会统计所有任务的平均进度,如果某个task所在的task node机器配置比较低或者CPU load很高(原因很多),导致任务执行比总体任务的平均执行要慢,此时Job Tracker会启动一个新的任务(duplicate task),原有任务和新任务哪个先执行完就把另外一个kill掉。推测执行需要设置Job的两个参数:map

7、red.map.tasks.speculative.execution=truemapred.reduce.tasks.speculative.execution=true06合理设置reduce个数reduce个数参数1:hive.exec.reducers.bytes.per.reducer=256000000/每个reduce任务处理的数据量参数2:hive.exec.reducers.max=1009/每个任务最大的reduce数目计算公式:reducer个数=min(参数2,总输入数据量/参数1)set mapred.reduce.tasks =N:每个任务默认的reduce数目。典

8、型为0.99* reduce槽数,hive默认为-1,即自动确定reduce数目。reduce个数并不是越多越好同map一样,启动和初始化reduce也会消耗时间和资源;另外,有多少个reduce,就会有多少个输出文件,如果生成了很多个小文件,那么如果这些小文件作为下一个任务的输入,则也会出现小文件过多的问题。小文件过多会非常影响查询效率,文件越多造成的IO就越多,同时还会增加元数据(namenode)的压力。在生产环境中,一定要避免小文件问题,如果核查发现,及时合并文件!07开启并行执行并行执行,意思是同步执行hive的多个阶段,hive在执行过程,将一个查询转化成一个或者多个阶段。某个特定

9、的job可能包含众多的阶段,而这些阶段可能并非完全相互依赖的,也就是说可以并行执行的,这样可能使得整个job的执行时间缩短hive.exec.parallel.thread.number8/job并行执行的数目,一个SQL语句可能有很多mapreduce任务,限制hive.exec.parallelfalsehive执行开启:sethive.exec.parallel=true08优化sqlwhere条件优化优化前(关系数据库不用考虑会自动优化):selectm.cid,u.idfromordermjoincustomeruon(m.cid=u.id)wherem.dt=20180808;优化

10、后(where条件在map端执行而不是在reduce端执行):selectm.cid,u.idfrom(select*fromorderwheredt=20180818)mjoincustomeruon(m.cid=u.id);union优化尽量不要使用union (union 去掉重复的记录)而是使用 union all 然后在用group by 去重count distinct优化不要使用count (distinct cloumn) ,使用子查询。selectcount(1)from(selectidfromtablenamegroupbyid)tmp;用in 来代替join如果需要根据

11、一个表的字段来约束另为一个表,尽量用in来代替join 。selectid,namefromtb1ajointb2bon(a.id=b.id);selectid,namefromtb1whereidin(selectidfromtb2);in 要比join 快消灭子查询内的 group by 、 COUNT(DISTINCT),MAX,MIN。可以减少job的数量。join 优化:Common/shuffle/Reduce JOIN:连接发生的阶段,发生在reduce 阶段,适用于大表连接大表(默认的方式)Map join :连接发生在map阶段,适用于小表连接大表 大表的数据从文件中读取;小表的数据存放在内存中(hive中已经自动进行了优化,自动判断小表,然后进行缓存)。sethive.auto.convert.join=true;SMB join:Sort -Merge -Bucket Join 对大表连接大表的优化,用桶表的概念来进行优化。在一个桶内发送生笛卡尔积连接(需要是两个桶表进行join)se

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论