赵广陆_1.docx
《赵广陆_1.docx》由会员分享,可在线阅读,更多相关《赵广陆_1.docx(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、赵广陆s:/1Explain1.1功能HiveQL是一种类SQL的语言,从编程语言标准来讲是一种声明式语言,用户会根据查询需求提交声明式的HQL查询,而Hive会根据底层计算引擎将其转化成Mapreduce/Tez/Spark的job。大多数情况下,用户不需要解析Hive内部是怎样工作的,不过,当用户对于Hive具有越来越多的经历后,尤其是需要在做性能优化的场景下,就要学习下Hive背后的理论知识和底层的一些实现细节,会让用户更加高效地使用Hive。explain命令就可以帮助用户解析一条HQL语句在底层的实现经过explain会解析HQL语句,将整个HQL语句的实现步骤、依赖关系、实现经过都
2、会进展解析返回,可以帮助更好的解析一条HQL语句在底层是怎样实现数据的查询及处理的经过,这样可以辅助用户对Hive进展优化。官网:s:/cwiki.apache.org/confluence/display/Hive/LanguageManual+Explain1.2语法常用语法命令如下:EXPLAINFORMATTED|EXTENDED|DEPENDENCY|AUTHORIZATION|queryFORMATTED:对执行方案进展格式化,返回JSON格式的执行方案EXTENDED:提供一些额外的信息,比方文件的途径信息DEPENDENCY:以JSON格式返回查询所依赖的表以及分区的列表AUT
3、HORIZATION:列出需要被受权的条目,包括输入与输出1.3组成解析后的执行方案一般由三个局部构成,分别是:TheAbstractSyntaxTreeforthequery抽象语法树:Hive使用Antlr解析生成器,可以自动地将HQL生成为抽象语法树ThedependenciesbetweenthedifferentstagesoftheplanStage依赖关系:会列出运行查询所有的依赖和stage的数量ThedescriptionofeachofthestagesStage内容:包含了非常重要的信息,比方运行时的operator以及sortorders等详细的信息4.1.4例如1:过
4、滤explainselectcount(*)ascntfromtb_empwheredeptno=10;组成解释1.5例如2:分组排序explainselectdeptno,count(*)ascntfromtb_empwheresalary2000groupbydeptnoorderbycntdesc;2MapReduce属性优化2.1本地形式使用Hive的经过中,有一些数据量不大的表也会转换为MapReduce处理,提交到集群时,需要申请资源,等待资源分配,启动JVM进程,再运行Task,一系列的经过比拟繁琐,本身数据量并不大,提交到YARN运行返回会导致性能较差的问题。Hive为解析决这
5、个问题,延用了MapReduce中的设计,提供本地计算形式,允许程序不提交给YARN,直接在本地运行,以便于进步小数据量程序的性能。配置开启本地形式sethive.exec.mode.local.auto=true;限制条件Hive为了防止大数据量的计算也使用本地形式导致性能差的问题,所以对本地形式做了以下限制,假如以下任意一个条件不知足,那么即使开启了本地形式,将照旧会提交给YARN集群运行。处理的数据量不超过128MMapTask的个数不超过4个ReduceTask的个数不超过1个2.2JVM重用JVM正常指代一个Java进程,Hadoop默认使用派生的JVM来执行map-reducer,
6、假如一个MapReduce程序中有100个Map,10个Reduce,Hadoop默认会为每个Task启动一个JVM来运行,那么就会启动100个JVM来运行MapTask,在JVM启动时内存开销大,尤其是Job大数据量情况,假如单个Task数据量比拟小,也会申请JVM资源,这就导致了资源紧张及浪费的情况。为解析决上述问题,MapReduce中提供了JVM重用机制来解决,JVM重用可以使得JVM实例在同一个job中重新使用N次,当一个Task运行完毕以后,JVM不会进展释放,而是继续供下一个Task运行,直到运行了N个Task以后,就会释放,N的值可以在Hadoop的mapred-site.xm
7、l文件中进展配置,通常在10-20之间。配置Hadoop3之前的配置,在mapred-site.xml中添加以下参数Hadoop3中已不再支持该选项mapreduce.job.jvm.numtasks=102.3并行执行Hive在实现HQL计算运行时,会解析为多个Stage,有时候Stage彼此之间有依赖关系,只能挨个执行,但是在一些别的场景下,很多的Stage之间是没有依赖关系的,例如Union语句,Join语句等等,这些Stage没有依赖关系,但是Hive照旧默认挨个执行每个Stage,这样会导致性能非常差,我们可以通过修改参数,开启并行执行,当多个Stage之间没有依赖关系时,允许多个S
8、tage并行执行,进步性能。配置开启Stage并行化,默认为falseSEThive.exec.parallel=true;指定并行化线程数,默认为8.SEThive.exec.parallel.thread.number=16;注意:线程数越多,程序运行速度越快,但同样更消耗CPU资源3Join优化3.1Hive中的Join方案表的Join是数据分析处理经过中必不可少的操作,Hive同样支持Join的语法,HiveJoin的底层还是通过MapReduce来实现的,Hive实现Join时,为了进步MapReduce的性能,提供了多种Join方案来实现,例如合适小表Join大表的MapJoin,
9、大表Join大表的ReduceJoin,和大表Join的优化方案BucketJoin等。3.2MapJoin应用场景合适于小表join大表或小表Join小表原理将小的那份数据给每个MapTask的内存都放一份完好的数据,大的数据每个局部都可以与小数据的完好数据进展join底层不需要经过shuffle,需要占用内存空间存放小的数据文件使用尽量使用MapJoin来实现Join经过Hive中默认自动开启了MapJoin默认已经开启了MapJoinhive.auto.convert.join=trueHive中判断哪张表是小表及限制LEFTOUTERJOIN的左表必须是大表RIGHTOUTERJOIN
10、的右表必须是大表INNERJOIN左表或者右表均可以作为大表FULLOUTERJOIN不能使用MAPJOINMAPJOIN支持小表为子查询使用MAPJOIN时需要引用小表或者是子查询时,需要引用别名在MAPJOIN中,可以使用不等值连接或使用OR连接多个条件在MAPJOIN中最多支持指定6张小表,否那么报语法错误Hive中小表的大小限制2.0版本之前的控制属性hive.mapjoin.smalltable.filesize=25M2.0版本开场由以下参数控制hive.auto.convert.join.noconditionaltask.size=5120000003.3ReduceJoin应
11、用场景合适于大表Join大表原理将两张表的数据在shuffle阶段利用shuffle的分组来将数据按照关联字段进展合并必须经过shuffle,利用Shuffle经过中的分组来实现关联使用Hive会自动判断是否知足MapJoin,假如不知足MapJoin,那么自动执行ReduceJoin3.4BucketJoin应用场景合适于大表Join大表原理将两张表按照一样的规那么将数据划分,根据对应的规那么的数据进展join,减少了比拟次数,进步了性能使用BucketJoin语法:clusteredbycolName参数开启分桶joinsethive.optimize.bucketmapjoin=true
12、;要求分桶字段=Join字段,桶的个数相等或成倍数SortMergeBucketJoinSMB:基于有序的数据Join语法:clusteredbycolNamesortedby(colName)参数开启分桶SMBjoinsethive.optimize.bucketmapjoin=true;sethive.auto.convert.sortmerge.join=true;sethive.optimize.bucketmapjoin.sortedmerge=true;sethive.auto.convert.sortmerge.join.noconditionaltask=true;要求分桶字段
13、=Join字段=排序字段,桶的个数相等或成倍数4优化器4.1关联优化在使用Hive的经过中经常会遇到一些特殊的问题,例如当一个程序中假如有一些操作彼此之间有关联性,是可以放在一个MapReduce中实现的,但是Hive会不智能的选择,Hive会使用两个MapReduce来完成这两个操作。例如:当我们执行以下SQL语句:selectfromtablegroupbyidorderbyiddesc;该SQL语句转换为MapReduce时,我们可以有两种方案来实现:方案一第一个MapReduce做groupby,经过shuffle阶段对id做分组第二个MapReduce对第一个MapReduce的结果
14、做orderby,经过shuffle阶段对id进展排序方案二因为都是对id处理,可以使用一个MapReduce的shuffle既可以做分组可以以排序在这种场景下,Hive会默认选择用第一种方案来实现,这样会导致性能相对较差,我们可以在Hive中开启关联优化,对有关联关系的操作进展解析时,可以尽量放在同一个MapReduce中实现。配置sethive.optimize.correlation=true;4.2CBO优化器引擎在使用MySQL或Hive等工具时,我们经常会遇到一个问题,默认的优化器在底层解析一些聚合统计类的处理的时候,底层解析的方案有时候不是最正确的方案。例如:当前有一张表【共10
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 赵广陆 _1
限制150内