当前位置: 首页 > news >正文

自助建设外贸网站长春网站建设论坛

自助建设外贸网站,长春网站建设论坛,河南郑州app建设网站,电子设计全国网站建设目录 一、前言 二、hive执行计划 2.1 hive explain简介 2.1.1 语法格式 2.1.2 查询计划阶段说明 2.2 操作演示 2.2.1 不加条件的查询计划分析 2.2.2 带条件的查询计划分析 三、MapReduce属性优化 3.1 本地模式 3.1.1 本地模式参数设置 3.1.2 本地模式操作演示 3.2 …目录 一、前言 二、hive执行计划 2.1 hive explain简介 2.1.1 语法格式 2.1.2 查询计划阶段说明 2.2 操作演示 2.2.1 不加条件的查询计划分析 2.2.2 带条件的查询计划分析 三、MapReduce属性优化 3.1 本地模式 3.1.1 本地模式参数设置 3.1.2 本地模式操作演示 3.2 JVM重用 3.2.1 什么是JVM重用 3.3 并行执行 四、join优化 4.1 hive sql的join执行简介 4.2 Map Join 4.2.1 执行原理 4.2.2 使用方式 4.3 Reduce Join 4.3.1 使用场景 4.3.2 执行原理 4.3.3 使用方式 4.4 Bucket Join 4.4.1 使用场景 4.4.2 执行原理 4.4.3 使用方式1 4.4.4 使用方式2 五、优化器 5.1 关联优化 5.2 优化器引擎 5.2.1 背景 5.2.2 优化器引擎 —— RBO 5.2.3 优化器引擎 —— CBO 5.3 Analyze分析器 5.3.1 Analyze 功能 5.3.1 Analyze 语法 5.3.2 实际操作 六、谓词下推 6.1 谓词下推概述 6.1.1 谓词下推案例总结 6.2 谓词下推常用规则总结 七、数据倾斜 7.1 概述 7.2 数据倾斜场景一 7.2.1 方案一 7.2.2 方案二 7.2.3 方案三 7.3  数据倾斜场景二 7.3.1 方案一 7.3.2 方案二 7.3.3 方案三 一、前言 上一篇我们分享了hive表数据常用的优化策略本篇再从hive的job执行层面来聊聊可以优化的常用的一些手段。 二、hive执行计划 在正式分享job优化之前有必要先了解下hive的一条sql执行时经历的事情即explain执行计划在学习mysql的时候DBA或者开发人员经常通过explain关键字来分析一条慢sql的执行计划从而指导sql优化。 2.1 hive explain简介 HiveQL是一种类SQL语言从编程语言规范来说是一种声明式语言用户会根据查询需求提交声明式的HQL查询而Hive会根据底层计算引擎将其转化成Mapreduce/Tez/Spark的job hive explain 补充说明 使用hive的explain命令可以帮助用户了解一条HQL语句在底层的实现过程通俗来说就是Hive打算如何去做这件事explain会解析HQL语句将整个HQL语句的实现步骤、依赖关系、实现过程都会进行解析返回可以了解一条HQL语句在底层是如何实现数据的查询及处理的过程辅助用户对Hive进行优化官网hive sql官网地址 2.1.1 语法格式 EXPLAIN [FORMATTED|EXTENDED|DEPENDENCY|AUTHORIZATION|] query 参数说明 FORMATTED对执行计划进行格式化返回JSON格式的执行计划EXTENDED提供一些额外的信息比如文件的路径信息DEPENDENCY以JSON格式返回查询所依赖的表和分区的列表 AUTHORIZATION列出需要被授权的条目包括输入与输出 2.1.2 查询计划阶段说明 每个查询计划由以下几个部分组成 The Abstract Syntax Tree for the query 抽象语法树ASTHive使用Antlr解析生成器可以自动地将HQL生成为抽象语法树 The dependencies between the different stages of the plan Stage依赖关系会列出运行查询划分的stage阶段以及之间的依赖关系 The description of each of the stages Stage内容包含了每个stage非常重要的信息比如运行时的operator和sort orders等具体的信息 2.2 操作演示 2.2.1 不加条件的查询计划分析 使用explain关键分析如下查询sql explain extended select * from tb_login; 执行结果如下重点关注下图中TableScan后面的信息 2.2.2 带条件的查询计划分析 执行下面的sql根据主键字段查询 explain extended select count(*) from tb_emp01 where empno7369; 使用explain分析执行计划此时将会看到更复杂的执行语法树 关于执行计划的结果分析中的各个参数作用可以结合官网或者其他资料进行深入的学习这里就不过多展开了 三、MapReduce属性优化 通过上面的执行计划分析其实可以知道hive在大多数情况下其得到的查询结果底层会走MR的job所以可以理解为MR与hive结合相关的属性调优也是整个job优化中非常重要的内容。 3.1 本地模式 在使用Hive过程中有一些数据量不大的表也会转换为MapReduce处理提交到集群时需要申请资源等待资源分配启动JVM进程再运行Task一系列的过程比较繁琐本身数据量并不大提交到YARN运行返回会导致性能较差的问题。 Hive为了解决这个问题延用了MapReduce中的设计提供本地计算模式允许程序不提交给YARN直接在本地运行以便于提高小数据量程序的性能。 3.1.1 本地模式参数设置 如果要使用本地模式只需要开启下面的参数即可也就是说当开启这个参数之后hive在提交一条查询sql之后会被MR自动识别并解析到从而走本地模式 -- 开启本地模式 set hive.exec.mode.local.auto true;注意该参数默认为false要使用的话需要手动开启如下即显示了hive要是走本地模式的几个条件即条件都满足的情况下才会走本地模式 3.1.2 本地模式操作演示 设置参数 set hive.exec.mode.local.auto true; 执行查询 select count(*) from tb_emp01; 可以看到在这种情况下140多万的数据只需要不到2秒的时间就统计出了结果 同时在执行日志中也看到job的执行中使用了local即走了本地模式 3.2 JVM重用 Hadoop默认会为每个Task启动一个JVM来运行而在JVM启动时内存开销大Job数据量大的情况如果单个Task数据量比较小也会申请JVM这就导致了资源紧张及浪费的情况 3.2.1 什么是JVM重用 JVM重用可以使得JVM实例在同一个job中重新使用N次当一个Task运行结束以后JVM不会进行释放而是继续供下一个Task运行直到运行了N个Task以后就会释放 N的值可以在Hadoop的mapred-site.xml文件中进行配置通常在10-20之间 参数设置如下 -- Hadoop3之前的配置在mapred-site.xml中添加以下参数 -- Hadoop3中已不再支持该选项 mapreduce.job.jvm.numtasks10 3.3 并行执行 Hive在实现HQL计算运行时会解析为多个Stage有时候Stage彼此之间有依赖关系只能挨个执行但是在一些别的场景下很多的Stage之间是没有依赖关系的 例如Union语句Join语句等等这些Stage没有依赖关系但是Hive依旧默认挨个执行每个Stage这样会导致性能非常差我们可以通过修改参数开启并行执行当多个Stage之间没有依赖关系时允许多个Stage并行执行提高性能。 并行执行关键参数设置 -- 开启Stage并行化默认为false SET hive.exec.paralleltrue; -- 指定并行化线程数默认为8 SET hive.exec.parallel.thread.number16; 四、join优化 join在mysql的日常编写sql过程中可以说是非常常见了也是数据分析处理过程中必不可少的操作Hive同样支持Join的语法 4.1 hive sql的join执行简介 Hive Join的底层是通过MapReduce来实现的Hive实现Join时为了提高MapReduce的性能提供了多种Join方案来实现 例如适合小表Join大表的Map Join大表Join大表的Reduce Join以及大表Join的优化方案Bucket Join等。 4.2 Map Join 即没有reduce阶段的task的场景适合于小表join大表或者小表Join小表如下图执行流程所示在这种情况下减少了reduce阶段task带来的执行时的资源开销 4.2.1 执行原理 将小的那份数据给每个MapTask的内存都放一份完整的数据大的数据每个部分都可以与小数据的完整数据进行join 底层不需要经过shuffle需要占用内存空间存放小的数据文件 4.2.2 使用方式 尽量使用Map Join来实现Join过程Hive中默认自动开启了Map Joinhive.auto.convert.jointrueHive中小表的大小限制在不同的版本中主要设置参数如下 -- 2.0版本之前的控制属性 hive.mapjoin.smalltable.filesize25M -- 2.0版本开始由以下参数控制 hive.auto.convert.join.noconditionaltask.size512000000 4.3 Reduce Join 如果map端的join处理不了的情况下比如两个join表的数据量都比较大的时候就要考虑使用Reduce Join 4.3.1 使用场景 适合于大表Join大表 4.3.2 执行原理 如下图所示将两张表的数据在shuffle阶段利用shuffle的分组来将数据按照关联字段进行合并 必须经过shuffle利用Shuffle过程中的分组来实现关联 4.3.3 使用方式 Hive会自动判断是否满足Map Join如果不满足Map Join则自动执行Reduce Join 4.4 Bucket Join 顾名思义即利用分桶表进行join从之前的学习中我们了解到使用分桶表在进行join操作的时候可以减少笛卡尔乘积的值从而达到提升性能的目的 4.4.1 使用场景 适合于大表Join大表 4.4.2 执行原理 将两张表按照相同的规则将数据划分 根据对应的规则的数据进行join 减少了比较次数提高了性能如下图所示 4.4.3 使用方式1 基于某个字段语法clustered by colName参数设置 set hive.optimize.bucketmapjoin true; 使用要求分桶字段 Join字段 桶的个数相等或者成倍数 4.4.4 使用方式2 使用Sort Merge Bucket JoinSMB基于有序的数据Join语法 clustered by colName sorted by (colName) 具体参数设置 set hive.optimize.bucketmapjoin true; set hive.auto.convert.sortmerge.jointrue; set hive.optimize.bucketmapjoin.sortedmerge true; set hive.auto.convert.sortmerge.join.noconditionaltasktrue;使用要求 分桶字段 Join字段 排序字段 桶的个数相等或者成倍数 五、优化器 5.1 关联优化 当一个程序中如果有一些操作彼此之间有关联性是可以在一个MapReduce中实现的但是Hive会不智能的选择Hive会使用两个MapReduce来完成这两个操作。 例如当我们执行  select …… from table group by id order by id desc。该SQL语句转换为MapReduce时我们可以有两种方案来实现 方案一 第一个MapReduce做group by经过shuffle阶段对id做分组第二个MapReduce对第一个MapReduce的结果做order by经过shuffle阶段对id进行排序 方案二 因为都是对id处理可以使用一个MapReduce的shuffle既可以做分组也可以排序 在这种场景下Hive会默认选择用第一种方案来实现这样会导致性能相对较差可以在Hive中开启关联优化对有关联关系的操作进行解析时可以尽量放在同一个MapReduce中实现关键配置参数如下 set hive.optimize.correlationtrue; 5.2 优化器引擎 5.2.1 背景 Hive默认的优化器在解析一些聚合统计类的处理时底层解析的方案有时候不是最佳的方案例如当前有一张表【共1000条数据】id构建了索引id 100值有900条我们的需求是 查询所有id 100的数据SQL语句为select * from table where id 100; 对于这个需求可以考虑下面的方案进行实现 方案一 由于id这一列构建了索引索引默认的优化器引擎RBO会选择先从索引中查询id 100的值所在的位置再根据索引记录位置去读取对应的数据但是这并不是最佳的执行方案。 方案二 有id100的值有900条占了总数据的90%这时候是没有必要检索索引以后再检索数据的可以直接检索数据返回这样的效率会更高更节省资源这种方式就是CBO优化器引擎会选择的方案。 5.2.2 优化器引擎 —— RBO rule basic optimise 基于规则的优化器根据设定好的规则来对程序进行优化 5.2.3 优化器引擎 —— CBO cost basic optimise 基于代价的优化器根据不同场景所需要付出的代价来合适选择优化的方案对数据的分布的信息【数值出现的次数条数分布】来综合判断用哪种处理的方案是最佳方案 Hive中支持RBO与CBO这两种引擎默认使用的是RBO优化器引擎很明显CBO引擎更加智能所以在使用Hive时我们可以配置底层的优化器引擎为CBO引擎配置参数如下 set hive.cbo.enabletrue; set hive.compute.query.using.statstrue; set hive.stats.fetch.column.statstrue; 思考CBO引擎是基于代价的优化引擎那么CBO如何知道每种方案的计算代价的呢接下来就要说说Analyze分析器了。 5.3 Analyze分析器 5.3.1 Analyze 功能 用于提前运行一个MapReduce程序将表或者分区的信息构建一些元数据【表的信息、分区信息、列的信息】搭配CBO引擎一起使用。 5.3.1 Analyze 语法 构建分区信息元数据 ANALYZE TABLE tablename [PARTITION(partcol1[val1], partcol2[val2], ...)] COMPUTE STATISTICS [noscan]; 构建列的元数据 ANALYZE TABLE tablename [PARTITION(partcol1[val1], partcol2[val2], ...)] COMPUTE STATISTICS FOR COLUMNS ( columns name1, columns name2...) [noscan]; 查看元数据 DESC FORMATTED [tablename] [columnname]; 5.3.2 实际操作 比如我们按照下面的操作步骤分析 tb_login_part 这张表 --分析优化器 use tb_part; -- 构建表中分区数据的元数据信息 ANALYZE TABLE tb_login_part PARTITION(logindate) COMPUTE STATISTICS;-- 构建表中列的数据的元数据信息 ANALYZE TABLE tb_login_part COMPUTE STATISTICS FOR COLUMNS userid;-- 查看构建的列的元数据 desc formatted tb_login_part userid;可以看到如下信息 六、谓词下推 什么是谓词 用来描述或判定客体性质、特征或者客体之间关系的词项。比如3 大于 2中大于是一个谓词。 6.1 谓词下推概述 谓词下推Predicate PushdownPPD基本思想将过滤表达式尽可能移动至靠近数据源的位置以使真正执行时能直接跳过无关的数据。简单点说就是在不影响最终结果的情况下尽量将过滤条件提前执行。 Hive中谓词下推后过滤条件会下推到map端提前执行过滤减少map到reduce的传输数据提升整体性能。 开启下面的参数来使用默认开启 hive.optimize.ppdtrue; 比如有下面的2个执行sql哪一个更好呢推荐形式1的写法先过滤再join select a.id,a.value1,b.value2 from table1 a join (select b.* from table2 b where b.ds20181201 and b.ds20190101) c on (a.idc.id);select a.id,a.value1,b.value2 from table1 a join table2 b on a.idb.id where b.ds20181201 and b.ds20190101;6.1.1 谓词下推案例总结 通过下面这些日常经常可能涉及到的sql可以检验自己在编写sql的时候有没有满足谓词下推的规则 6.2 谓词下推常用规则总结 下面整理了一些关联sql中关于谓词下推的优化参考规则 对于Join(Inner Join)、Full outer Join条件写在on后面还是where后面性能上面没有区别对于Left outer Join 右侧的表写在on后面、左侧的表写在where后面性能上有提高对于Right outer Join左侧的表写在on后面、右侧的表写在where后面性能上有提高当条件分散在两个表时谓词下推可按上述结论2和3自由组合 七、数据倾斜 7.1 概述 分布式计算中最常见的最容易遇到的问题就是数据倾斜数据倾斜的现象是 当提交运行一个程序时这个程序的大多数的Task都已经运行结束了只有某一个Task一直在运行迟迟不能结束导致整体的进度卡在99%或者100%这时候就可以判定程序出现了数据倾斜的问题。 而造成数据倾斜的原因大多是数据分配的不均匀比如下面这张图太多相同的单词被分配到某一个任务上去处理导致这个任务所在的节点压力非常大这个任务的执行将会非常慢这就是发生了数据倾斜 7.2 数据倾斜场景一 当程序中出现group by或者countdistinct等分组聚合的场景时如果数据本身是倾斜的根据MapReduce的Hash分区规则肯定会出现数据倾斜的现象。 根本原因是因为分区规则导致的所以可以通过以下几种方案来解决group by导致的数据倾斜的问题。 7.2.1 方案一 开启Map端聚合通过减少shuffle数据量和Reducer阶段的执行时间避免每个Task数据差异过大导致数据倾斜 hive.map.aggrtrue; 7.2.2 方案二 实现随机分区比如下面这种写法distribute by用于指定底层按照哪个字段作为Key实现分区、分组等 通过rank函数随机值实现随机分区避免数据倾斜 select * from table distribute by rand(); 7.2.3 方案三 数据倾斜时自动负载均衡通过开启如下参数 hive.groupby.skewindatatrue; 开启该参数以后当前程序会自动通过两个MapReduce来运行 第一个MapReduce自动进行随机分布到Reducer中每个Reducer做部分聚合操作输出结果第二个MapReduce将上一步聚合的结果再按照业务group by key进行处理保证相同的分布到一起最终聚合得到结果 7.3  数据倾斜场景二 Join操作时如果两张表比较大无法实现Map Join只能走Reduce Join那么当关联字段中某一种值过多的时候依旧会导致数据倾斜的问题面对Join产生的数据倾斜核心的思想是尽量避免Reduce Join的产生优先使用Map Join来实现 但往往很多的Join场景不满足Map Join的需求那么可以以下几种方案来解决Join产生的数据倾斜问题 7.3.1 方案一 提前过滤将大数据变成小数据实现Map Join如下sql select a.id,a.value1,b.value2 from table1 a join (select b.* from table2 b where b.ds20181201 and b.ds20190101) c on (a.idc.id); 7.3.2 方案二 使用Bucket Join 如果使用方案一过滤后的数据依旧是一张大表那么最后的Join依旧是一个Reduce Join,这种场景下可以将两张表的数据构建为桶表实现Bucket Map Join避免数据倾斜; 7.3.3 方案三 使用Skew JoinSkew Join是Hive中一种专门为了避免数据倾斜而设计的特殊的Join过程 这种Join的原理是将Map Join和Reduce Join进行合并如果某个值出现了数据倾斜就会将产生数据倾斜的数据单独使用Map Join来实现 其他没有产生数据倾斜的数据由Reduce Join来实现这样就避免了Reduce Join中产生数据倾斜的问题 最终将Map Join的结果和Reduce Join的结果进行Union合并 Skew Joi实现原理示意图 Skew Join使用需要开启下面的参数配置 -- 开启运行过程中skewjoin set hive.optimize.skewjointrue;-- 如果这个key的出现的次数超过这个范围 set hive.skewjoin.key100000;-- 在编译时判断是否会产生数据倾斜 set hive.optimize.skewjoin.compiletimetrue;-- 不合并提升性能 set hive.optimize.union.removetrue;-- 如果Hive的底层走的是MapReduce必须开启这个属性才能实现不合并 set mapreduce.input.fileinputformat.input.dir.recursivetrue;
http://www.zqtcl.cn/news/5516/

相关文章:

  • 营销型网站建设哪家好怎样做网站初中生
  • 设计 p网站个人crm管理系统
  • 广西开网站信息公司深圳服务好的网页设计
  • 长沙网站到首页排名网站备案信息页面
  • angular2.0网站制作网站支付宝怎么做的
  • 承德网站建设怎么建设的个人做外贸网站平台
  • 全球网站排行兰州手机网站制作公司哪家好
  • 佛山市品牌网站建设哪家好阿里网站建设需要准备什么软件
  • 网站建设 选猴王网络郑州视频网站建设大概多少钱
  • 国外的建筑设计网站wordpress 国家列表
  • 江苏建设网站首页it外包公司好不好
  • 和硕网站建设提高工作效率的方法
  • 徐州网站建设新闻南阳seo招聘
  • 那个网站做外贸最好wordpress excel插件
  • app网站开发哪里有大型网站建设网站推广
  • 公司网站模板下载湛江建设培训学校网站
  • 外贸推广网站公司wordpress怎样建站
  • 做一个网站需要多大的空间进入网站前如何做环境检测
  • 廊坊app网站制作网站html优化
  • 单页式网站珠海市网站开发公司
  • 钓鱼网站在线下载十大营销策略有哪些
  • 最好的做网站公司有哪些曲靖app制作公司
  • 比如做百度知道 .html,这些都是我们不可控制的网站!做网站的背景怎么做
  • 网站如何做跳板泰安毕业生档案查询
  • 60天做网站网站建设需要会一些啥
  • 2017优秀网站设计凡科建设网站如何对话框
  • 马鞍山网站建设制作百度西安
  • 园区门户网站建设广东哪家网站建
  • 龙华网站建设销售员公众号微网站建设认证
  • 2013影响网站百度搜索排名关键因素统计网页设计公司注册