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

青岛网站策划微信调用wordpress

青岛网站策划,微信调用wordpress,安徽工建设信息网站,洛阳网站建设首选洛阳铭信科技转载#xff1a;http://www.cnblogs.com/yaojingang/p/5446310.html 在了解了MapReduce实现SQL基本操作之后#xff0c;我们来看看Hive是如何将SQL转化为MapReduce任务的#xff0c;整个编译过程分为六个阶段#xff1a; Antlr定义SQL的语法规则#xff0c;完成SQL词法http://www.cnblogs.com/yaojingang/p/5446310.html 在了解了MapReduce实现SQL基本操作之后我们来看看Hive是如何将SQL转化为MapReduce任务的整个编译过程分为六个阶段 Antlr定义SQL的语法规则完成SQL词法语法解析将SQL转化为抽象语法树AST Tree遍历AST Tree抽象出查询的基本组成单元QueryBlock遍历QueryBlock翻译为执行操作树OperatorTree逻辑层优化器进行OperatorTree变换合并不必要的ReduceSinkOperator减少shuffle数据量遍历OperatorTree翻译为MapReduce任务物理层优化器进行MapReduce任务的变换生成最终的执行计划下面分别对这六个阶段进行介绍 Phase1 - SQL词法语法解析 Antlr Hive使用Antlr实现SQL的词法和语法解析。Antlr是一种语言识别的工具可以用来构造领域语言。这里不详细介绍Antlr只需要了解使用Antlr构造特定的语言只需要编写一个语法文件定义词法和语法替换规则即可Antlr完成了词法分析、语法分析、语义分析、中间代码生成的过程。 Hive中语法规则的定义文件在0.10版本以前是Hive.g一个文件随着语法规则越来越复杂由语法规则生成的Java解析类可能超过Java类文 件的最大上限0.11版本将Hive.g拆成了5个文件词法规则HiveLexer.g和语法规则的4个文件 SelectClauseParser.gFromClauseParser.gIdentifiersParser.gHiveParser.g。 抽象语法树AST Tree 经过词法和语法解析后如果需要对表达式做进一步的处理使用 Antlr 的抽象语法树语法Abstract Syntax Tree在语法分析的同时将输入语句转换成抽象语法树后续在遍历语法树时完成进一步的处理。 下面的一段语法是Hive SQL中SelectStatement的语法规则从中可以看出SelectStatement包含select, from, where, groupby, having, orderby等子句。在下面的语法规则中箭头表示对于原语句的改写改写后会加入一些特殊词标示特定语法比如TOK_QUERY标示一个查询块) Phase2 - SQL基本组成单元QueryBlock AST Tree仍然非常复杂不够结构化不方便直接翻译为MapReduce程序AST Tree转化为QueryBlock就是将SQL进一部抽象和结构化。 QueryBlock QueryBlock是一条SQL最基本的组成单元包括三个部分输入源计算过程输出。简单来讲一个QueryBlock就是一个子查询。 下图为Hive中QueryBlock相关对象的类图解释图中几个重要的属性 QB#aliasToSubq表示QB类的aliasToSubq属性保存子查询的QB对象aliasToSubq key值是子查询的别名QB#qbp 即QBParseInfo保存一个基本SQL单元中的给个操作部分的AST Tree结构QBParseInfo#nameToDest这个HashMap保存查询单元的输出key的形式是inclause-i由于Hive 支持Multi Insert语句所以可能有多个输出value是对应的ASTNode节点即TOK_DESTINATION节点。类QBParseInfo其余 HashMap属性分别保存输出和各个操作的ASTNode节点的对应关系。QBParseInfo#JoinExpr保存TOK_JOIN节点。QB#QBJoinTree是对Join语法树的结构化。QB#qbm保存每个输入表的元信息比如表在HDFS上的路径保存表数据的文件格式等。QBExpr这个对象是为了表示Union操作。AST Tree生成QueryBlock AST Tree生成QueryBlock的过程是一个递归的过程先序遍历AST Tree遇到不同的Token节点保存到相应的属性中主要包含以下几个过程 TOK_QUERY 创建QB对象循环递归子节点TOK_FROM 将表名语法部分保存到QB对象的TOK_INSERT 循环递归子节点TOK_DESTINATION 将输出目标的语法部分保存在QBParseInfo对象的nameToDest属性中TOK_SELECT 分别将查询表达式的语法部分保存在destToAggregationExprs、TOK_WHERE 将Where部分的语法保存在QBParseInfo对象的destToWhereExpr属性中最终样例SQL生成两个QB对象QB对象的关系如下QB1是外层查询QB2是子查询 QB1 \ QB2 Phase3 - 逻辑操作符Operator Operator Hive最终生成的MapReduce任务Map阶段和Reduce阶段均由OperatorTree组成。逻辑操作符就是在Map阶段或者Reduce阶段完成单一特定的操作。 基本的操作符包括TableScanOperatorSelectOperatorFilterOperatorJoinOperatorGroupByOperatorReduceSinkOperator 从名字就能猜出各个操作符完成的功能TableScanOperator从MapReduce框架的Map接口原始输入表的数据控制扫描表的数据行数标记是从原表中取数据。JoinOperator完成Join操作。FilterOperator完成过滤操作 ReduceSinkOperator将Map端的字段组合序列化为Reduce Key/value, Partition Key只可能出现在Map阶段同时也标志着Hive生成的MapReduce程序中Map阶段的结束。 Phase4 - 逻辑层优化器 大部分逻辑层优化器通过变换OperatorTree合并操作符达到减少MapReduce Job减少shuffle数据量的目的。 ② MapJoinProcessor ② GroupByOptimizer ① PredicatePushDown ColumnPruner 名称 作用 ② SimpleFetchOptimizer 优化没有GroupBy表达式的聚合查询 MapJoin需要SQL中提供hint0.11版本已不用 ② BucketMapJoinOptimizer BucketMapJoin Map端聚合 ① ReduceSinkDeDuplication 合并线性的OperatorTree中partition/sort key相同的reduce 谓词前置 ① CorrelationOptimizer 利用查询中的相关性合并有相关性的JobHIVE-2206 字段剪枝 表格中①的优化器均是一个Job干尽可能多的事情/合并。②的都是减少shuffle数据量甚至不做Reduce。 CorrelationOptimizer优化器非常复杂都能利用查询中的相关性合并有相关性的Job参考 Hive Correlation Optimizer 对于样例SQL有两个优化器对其进行优化。下面分别介绍这两个优化器的作用并补充一个优化器ReduceSinkDeDuplication的作用. Phase5 -  OperatorTree生成MapReduce Job的过程 OperatorTree转化为MapReduce Job的过程分为下面几个阶段 对输出表生成MoveTask从OperatorTree的其中一个根节点向下深度优先遍历ReduceSinkOperator标示Map/Reduce的界限多个Job间的界限遍历其他根节点遇过碰到JoinOperator合并MapReduceTask生成StatTask更新元数据剪断Map与Reduce间的Operator的关系Phase6 - 物理层优化器 这里不详细介绍每个优化器的原理单独介绍一下MapJoin的优化器 SortMergeJoinResolver CommonJoinResolver MapJoinResolver 名称 作用 Vectorizer HIVE-4160将在0.13中发布 与bucket配合类似于归并排序 SamplingOptimizer 并行order by优化器在0.12中发布 MapJoin优化器 MapJoin原理 MapJoin简单说就是在Map阶段将小表读入内存顺序扫描大表完成Join。 上图是Hive MapJoin的原理图出自Facebook工程师Liyin Tang的一篇介绍Join优化的slice从图中可以看出MapJoin分为两个阶段 通过MapReduce Local Task将小表读入内存生成HashTableFiles上传至Distributed Cache中这里会对HashTableFiles进行压缩。 MapReduce Job在Map阶段每个Mapper从Distributed Cache读取HashTableFiles到内存中顺序扫描大表在Map阶段直接进行Join将数据传递给下一个MapReduce任务。 如果Join的两张表一张表是临时表就会生成一个ConditionalTask在运行期间判断是否使用MapJoin CommonJoinResolver优化器 CommonJoinResolver优化器就是将CommonJoin转化为MapJoin转化过程如下 深度优先遍历Task Tree找到JoinOperator判断左右表数据量大小对与小表 大表 MapJoinTask对于小/大表 中间表 ConditionalTask遍历上一个阶段生成的MapReduce任务发现JOIN[8]中有一张表为临时表先对Stage-2进行深度拷贝由于需要保留原始执行计划为BackupPlan所以这里将执行计划拷贝了一份生成一个MapJoinOperator替代JoinOperator然后生成一个MapReduceLocalWork读取小表生成HashTableFiles上传至DistributedCache中。 Operator在Map Reduce阶段之间的数据传递都是一个流式的过程。每一个Operator对一行数据完成操作后之后将数据传递给childOperator计算。 Operator类的主要属性和方法如下 RowSchema表示Operator的输出字段InputObjInspector outputObjInspector解析输入和输出字段processOp接收父Operator传递的数据forward将处理好的数据传递给子Operator处理Hive每一行数据经过一个Operator处理之后会对字段重新编号colExprMap记录每个表达式经过当前Operator处理前后的名称对应关系在下一个阶段逻辑优化阶段用来回溯字段名由 于Hive的MapReduce程序是一个动态的程序即不确定一个MapReduce Job会进行什么运算可能是Join也可能是GroupBy所以Operator将所有运行时需要的参数保存在OperatorDesc 中OperatorDesc在提交任务前序列化到HDFS上在MapReduce任务执行前从HDFS读取并反序列化。Map阶段 OperatorTree在HDFS上的位置在Job.getConf(“hive.exec.plan”) “/map.xml” QueryBlock生成Operator Tree QueryBlock生成Operator Tree就是遍历上一个过程中生成的QB和QBParseInfo对象的保存语法的属性包含如下几个步骤 QB#aliasToSubq 有子查询递归调用QB#aliasToTabs TableScanOperatorQBParseInfo#joinExpr QBJoinTree ReduceSinkOperator JoinOperatorQBParseInfo#destToWhereExpr FilterOperatorQBParseInfo#destToGroupby ReduceSinkOperator GroupByOperatorQBParseInfo#destToOrderby ReduceSinkOperator ExtractOperator由于Join/GroupBy/OrderBy均需要在Reduce阶段完成所以在生成相应操作的Operator之前都会先生成一个ReduceSinkOperator将字段组合并序列化为Reduce Key/value, Partition Key 接下来详细分析样例SQL生成OperatorTree的过程 先序遍历上一个阶段生成的QB对象 转载于:https://www.cnblogs.com/yyy-blog/p/7077748.html
http://www.pierceye.com/news/960841/

相关文章:

  • 有关网站开发的文章做微商网站的软文
  • 做网站公司起什么名字西安官网seo技术
  • zepto网站开发用帝国cms做的网站首页
  • 手机影视网站制作一站式服务大厅官网
  • 创意网站展示汕尾百度seo公司
  • 网站被spider重复抓取自主建站网站平台
  • 网站打开小企业网站建设哪里做得好
  • 网站开发+进度表什么牛网站建设
  • 不同类型网站比较及网站域名设计整站优化
  • 高端企业网站建设规定陕西关键词优化推荐
  • 做图表的网站推荐简单的个人网站模板
  • 淄博瓷砖网站建设中企动力永久免费虚拟主机
  • 厦门网站建设创建有哪些python wordpress采集
  • 如何建立网站链接百度账号设置
  • 网站的申请淄博市住房和城乡建设厅网站
  • 重庆网站设计开发杂志网站模板
  • 网站建设需要营业执照吗建站之星源码下载
  • 网站建设需要基础吗做游戏的软件app
  • 网站建设费用分几年摊销网站建设动态
  • 企业网站的网址通常包含网站建设总结会上 领导讲话稿
  • 营销型网站五大系统 单仁网站开发个人简历
  • 网站内容的编辑和更新怎么做的免费的网站制作
  • 做网站 0元代理下载站源码cms
  • 台州市建设局招聘网站wordpress更新计划
  • 有教做路桥质检资料的网站吗企业画册印刷
  • 四川省营山县西城建筑公司网站租服务器 wordpress
  • 绿色蔬菜网站模板昆明软件开发公司排名
  • 东台做淘宝网站爱站seo工具包免费版
  • 做网站运营的简历学做家庭树网站
  • 专业做企业网站网页制作与网站建设 在线作业