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

网站建站前期准备工作广州住房公积金建设银行预约网站

网站建站前期准备工作,广州住房公积金建设银行预约网站,安徽省建设工程信息网实名制,天津电子商务网站建设公司导读#xff1a;SQL 诞生于 20 世纪 70 年代#xff0c;至今已有半个世纪。SQL 语言具有语法简单#xff0c;低学习门槛等特点#xff0c;诞生之后迅速普及与流行开来。由于 SQL 具有易学易用的特点#xff0c;使得开发人员容易掌握#xff0c;企业若能在其计算机软件中支…导读SQL 诞生于 20 世纪 70 年代至今已有半个世纪。SQL 语言具有语法简单低学习门槛等特点诞生之后迅速普及与流行开来。由于 SQL 具有易学易用的特点使得开发人员容易掌握企业若能在其计算机软件中支持 SQL则可顺应当今降本增效的行业发展趋势。Spark 早期的 0.6 版本主要围绕着 Spark Core 的功能比如支持用户在 Spark Context 下用 RDD API 去写一些应用程序代码当时还没有更简单的方式通过 Spark 去操纵数据。2012 年加州大学伯克利分校在 Spark 基础上通过兼容 Hive 语法推出了 Shark 功能。并于 2014 年 5 月在 Spark1.0 版本正式发布的时候推出了 Spark 社区自身实现的 Spark SQL。当时的 Spark SQL 在解析层是通过 Scala 模式匹配来进行实现的不够灵活也没有开源的解析方案强大、稳健。Spark 在 2016 年 7 月改用 Antlr4 重新实现 Parser。2016 年 7 月至今Spark 社区发展的最为稳健和活跃的功能模块即为 Spark SQL。 本期是 DataFun 深入浅出 Apache Spark 第二期的分享主要介绍 Apache Spark SQL 原理包括 1. Apache Spark SQL 基本概念 2. Apache Spark SQL 核心组件 3. Apache Spark SQL API 一、Apache Spark SQL 基本概念 1.TreeNode 2. AST(Abstract Syntax Tree) 3. QueryPlan SQL 本身有一套理论上比较成熟的架构比如需要将 SQL 文本转换成抽象语法树Abstract Syntax Tree。TreeNode 代表了抽象语法树里面的某个节点如 Limit 算子或者 Join 算子通过大量 TreeNode 的不同实现最后组成了一棵抽象语法树AST。QueryPlan 是 TreeNode 基础上扩展的一个查询计划既可以是逻辑的也可以是物理的里面定义了一些查询计划节点的基本属性包括转换 API可以对生成的 AST 进行遍历遍历的方法类比树的深度优先/广度优先遍历通过这样的方式对其实现访问和转换。 4. LogicalPlan vs 5. Physical Plan LogicalPlan 是 QueryPlan 的实现用于表示逻辑计划在 Spark 中是类的实现。PhysicalPlan 是纯逻辑的概念表示物理计划实际的实现是 SparkPlan用于执行物理算子。 6. Rule 规则 7. Rule Executor 规则执行器 规则应用于 LogicalPlan 构建的逻辑的抽象语法树比如把属性绑定到某个表的某个字段或者通过元数据绑定的分析过程找到某个表是位于 MySQL 数据库还是位于 Hive 中某一个 HDFS 存储目录也可以是在编译理论里面会有的常量表达式折叠这样的优化。以上这些优化或者分析的工作可以在 Spark 中抽象成规则。每种规则都会对 AST 通过调用 QueryPlan 里面的转换 API 应用一些转换。 Rule 规则类似模板里面定义了一些逻辑实际触发规则需要能执行它的 RuleExecutor。在 Spark 中会将规则组织成批每批 Rule 会有其处理的迭代策略包括需要执行一次的Once和需要执行多次的FixedPoint。 如上图左边是规则 Batches右边是 LogicalPlan 代表逻辑的抽象语法树AST在 RuleExecutor 里结合到一块执行器帮助 AST 应用规则之后生成一个新的 LogicalPlan。 8. Generic Strategy 9. QueryPlanner 以上的分析和优化阶段主要针对的是逻辑计划需要有阶段将逻辑计划翻译成物理计划来实际执行物理算子。这个阶段主要由 GenericStrategy 和 QueryPlanner 配合完成。其中 GenericStrategy 策略类似 Rule是一些行为模板也有多种实现可能。GenericStrategy和QueryPlanner的关系类似Rule和RuleExecutor。GenericStrategy 由 QueryPlanner 去触发执行把逻辑计划转化成物理计划如上图所示。当 GenericStrategy 不能应用到 LogicalPlan时返回空列表。 二、Apache Spark SQL 核心组件 1. SparkSqlParser 解析器 负责将输入的 SQL 文本解析成一个 AST。SparkSqlParser 包含 AstbuilderVariableSubstitutionSparkSqlAstBuilder。 Astbuilder 围绕 Antlr4 进行扩展和实现将由 Antlr4 解析得到的 ParseTree 进而转化为 Catalyst ExpressionLogicalPlan 或者 CatalystIdentifier。举个例子Catalyst ExpressionSQL 文本中的 SUM 函数可以在 Spark 中转化为 Catalyst SQL Expression。LogicalPlanSQL 里面有 SELECT 可以生成 Project 之类的逻辑计划。CatalystIdentifierSELECT columns FROM table 中的表名会转化为 Spark SQL CatalystIdentifier是身份表示的一种抽象。这些总体会形成最初的 AST。 此刻的 AST 只是通过 Antlr4 的帮助解析出来。还没有和数据字典进行绑定称之为 Parsed Logical Plan。此时尚不知道SELECT 的某个属性是一个字段还是自定义的表达式FROM table 的表是一个数据库的表还是某个目录文件。 SparkSQLAstBuilder 的主要功能和 Astbuilder 类似并在其基础上进行了一些扩展。 VariableSubstitution 兼容了 Hive 中变量声明的方式。 2. Analyzer 分析器 Analyzer 是 RuleExecutor 的具体实现之一可以帮助 Parsed Logical Plan 进行数据字典的绑定。举个例子在 SQL 中 SELECT id FROM tableSparkSqlParser 会将 id 转化为 UnresolvedAttribute, 将 table 转化为 UnresolvedRelation。分析器会从数据字典中将元数据信息填充进去。经过分析器处理后AST 已经和数据字典绑定成为分析后的逻辑计划Analyzed Logical Plan。理论上可以基于其执行物理计划并读取和查询数据此时的逻辑计划并不是最优的需要对分析后的逻辑计划进行优化。 3. Optimizer 优化器 Optimizer 在分析器结果之上对分析后的逻辑计划应用优化规则。这些优化规则除了极少数都是围绕 Spark 的性能优化展开的应用后生成 Optimized Logical Plan优化后的逻辑计划。Optimizer 的应用过程和 Analyzer 类似都是 RuleExecutor 架构下的成员。 举个例子SparkSQL 数据库有很多类型对于类型转化而言有些类型转换是安全的有些类型转换会丢失一些精度有些类型之间不能进行转换。比如用户将 String 类型的变量通过 Cast 表达式转成 Int如果错误地判断了数据的值或者随着时间流逝字段发生变化出现了非数字字符可能会出现一些问题。Spark 在简化 Cast 上做了一些工作如数据本身是整型转化为长整型这在很多语言层面是隐式转化是安全的而 Cast 会在物理执行阶段占用 CPU 资源对于这种不必要的转换Spark 会进行 Cast 消除。对于一些有问题的转换可以检测出来对有些转换进行更进一步的优化。 在 Spark 3.0.0 之前Optimized Logical Plan 属于逻辑计划的最后使命之后被转换为 Physical Plan 用于提交 Job 并执行查询或计算。Spark 3.0.0 发布了一个十分重要的优化框架 AQEAdaptive Query Execution用于在执行阶段利用运行期收集到的统计信息对 Logical Plan 进行渐进式的运行时优化并适时改变物理执行计划。AQE 框架提供了 AQEOptimizer专门针对 AQE 的场景对 Logical Plan 进行优化。 4. SparkPlanner Optimized Logical Plan优化后的逻辑计划已经可以转化为物理计划需要 SparkPlanner 来进行介入。SparkPlan 继承了 QueryPlan是 PhysicalPlan 的实际实现代表物理计划。最终可执行的物理计划都继承自 SparkPlan。比如用户在 SQL 里写了 Limit 10 的语法逻辑计划里有 Limit 节点在物理计划阶段会转化成不同的物理算子。比如 Limit 的结果 Spark SQL 执行完毕需要把结果收集上来会生成 CollectLimitExec 物理算子。 5. SparkStrategy SparkStrategy 是 GenericStrategy 的抽象扩展将 LogicalPlan 转化为零个或多个 SparkPlan所有的执行策略实际继承 SparkStrategy 即可。像刚刚提到的 Limit 10 的例子如果执行 collect 会生成 CollectLimitExec 算子把结果拉取到 Driver 端但是也有一些别的情况比如 Limit 伴随 Offset随着 SQL 语法的不同生成的算子是不一样的。 6. SQLConf 用于设置和获取可变的配置参数/提示。可供用户基于自己的使用场景对于参数进行调整和优化。 7. FunctionRegistry 函数的注册表 内建函数及用户自定义函数的数据字典。包括 Spark 兼容 Hive 的函数ANSI 标准相关的函数同时 Spark 也支持自定义函数的功能。注册表主要用于分析器Analyzer使用比如将 SparkSqlParser 解析后 unresolved 的 SUM 函数与注册表比对确定其含义和所需参数等。 8. DataSourceManager 数据源管理器 用户定义数据源的管理器。它用于按数据源的短名称或完全限定名称注册和查找数据源。目前主要是迎合 Python 用户的需要用 Python 的方法去注册一些数据源。 9. Spark CatalogPlugin 用于为 Spark 提供 Catalog 实现的接口。它的子接口包括FunctionCatalog、SupportsNamespaces、TableCatalog、ViewCatalog 等。举个例子最早的时候接入数据源需要 Provider 和 Connector以 MySQL 为例需要有 MySQL 驱动程序的 jar 包还需要有 MySQL 对应的 Connector 的实现当时用户必须使用编程的方式实现和维护成本较高。Spark3.0 推出了 Spark DataSource V2 API用户可以借助这样的一个 Catalog Plugin 把数据源注册在 Spark 里面之后可反复使用极大提高了生产效率。 10. CatalogManager 跟踪所有通过 Catalog Plugin 注册的 Catalog。 11. SessionCatalog SparkSession 使用的内部数据字典。该字典充当底层元存储例如 Hive 元存储的代理还管理其所属 SparkSession 的临时视图和功能。早期围绕 Hive 实现代理了 Hive 元数据。SessionCatalog 可将核心组件串在一起来解析 SQL。 如上图用户输入 SQL 文本首先经过 Spark Parser 形成解析后的 AST, 之后分析器利用一些函数注册表和 SessionCatalog 提供的 Hive 相关信息或者第三方的 Catalog 元数据信息对元数据信息进行绑定生成分析后的 LogicalPlan经过优化器生成优化后的 LogicalPlan再经过物理计划的 planner 转化成物理计划这个物理计划被提交到 Spark 计算节点。 以一条 SQL 为例来展示 Spark SQL 的执行流程。用户输入 SQL 文本 SELECT sum(distinct val) FROM cyber首先解析为 Parsed Logical Plan其中 Sum(distinct val)解析为 UnresolvedAlias(sum(distinct val))cyber 解析为 UnresolvedRelation(cyber)之后经过分析器转化为分析后知道元数据信息的 AST之后经过优化器进行优化比如此处优化器通过增加 Project 避免 scan cyber 整表最后在规划器中生成真正的物理计划。如上图 Sum 在 Spark 中需要 Shuffle 过程在物理计划中会伴随 Exchange 算子Exchange 算子代表 shuffle。Spark 本身支持 DISTINCT 语法可以额外增加一次聚合所以在物理计划里面有两次 Shuffle 过程。例子里面还有一个 ColumnarToRow 运算是因为 Parquet 是列式存储但是 Select 在输出时是按照行来输出的所以会有一个列转行的运算。 三、Apache Spark SQL API 1. Spark Session Spark Session 方便接入数据源执行转换添加算子。通过 SparkSession 会生成 Dataset可以在 Dataset 基础上进一步进行 API 调用。Spark Session 内部封装了 SparkContext 来调用 Spark Core 的一些能力结合 SparkSQLParserAnalyserOptimizerSparkPlanner 等组件完成对执行计划的转换通过间接持有 SQLConf, FunctionRegistryDataSourceManager, CatalogManagerSessionCatalog 等组件完成对元数据或者数据的访问。 2. DatasetDataFrame Dataset 是特定对象的强类型集合可以使用函数或关系操作并行转换每个 Dataset 还有一个称为 DataFrame 的非类型化视图它是 row 的数据集。 3. DataFrameReader 用于从外部存储系统如文件系统、键值存储等加载 Dataset 的 API。SparkSession的read 方法可以获得对 DataFrameReader 的访问。在 SparkSession 里面需要读取 Parquet 文件会生成临时的 DataFrameReader进一步对文件进行访问操作。 4. Writer 写的 API DataFrameWriter 用于将非流式 Dataset 的内容保存到外部存储器的 APIDataset 的 write 方法可以获得对 DataFrameWriter 的访问。 DataFrameWriterV2 为 V2 数据源创建一个写入配置生成器。 MergeIntoWriter 提供了根据指定条件定义和执行合并操作的方法。 DataStreamWriter 用于将流式 Dataset 写入外部存储系统如文件系统键值存储等的 API。使用 Dataset 的 write Stream 方法可以获得对 DataStreamWriter 的访问。
http://www.zqtcl.cn/news/593515/

相关文章:

  • 免费建站优化网站基本设置
  • 网站建设需要上传数据库吗seo自己做网站吗
  • 网站制作ppt杭州网站的特点
  • 美丽寮步网站建设价钱杭州网站设计询问蓝韵网络
  • 毕节网站建设公司网站职业技术培训学校
  • 果洛wap网站建设比较好17岁在线观看免费高清完整版
  • 一级a做爰片在线看免播放器网站一个网站突然打不开
  • 聊城网站开发培训wordpress实时预览载入中
  • 网站设计文章国际转运网站建设
  • 南充市建设厅官方网站购物网站设计说明
  • 防疫网站网页设计wordpress不同侧边栏
  • 网站的建设多少钱长春市招标建设信息网
  • 网站加速代码百度浏览器app
  • 关于配色的网站企业宣传册文案范文
  • 免费推广网站教程湖南中核建设工程公司官方网站
  • 莱阳网站建设公司彩票类网站是如何做代理的
  • 食品公司网站建设广州做网站制作公司
  • 网站上传服务器教程搜索网站存在的关键字
  • 天河建设网站多少钱网络公司网站样本
  • 做的精美的门户网站推荐附近编程培训机构
  • 台州黄岩做网站太原网站建设王道下拉惠
  • 深圳设计网站公司互联网服务平台投诉中心
  • 做seo网站优化哪家强济南网站建设公司排名
  • tp5网站文档归档怎么做手机虚拟机哪个好用
  • 网站建设公司的业务范围万网做网站多少钱
  • 做网站要用写接口6wordpress 汽车租赁
  • 网站开发方向paypal账号注册
  • 如何选择做pc端网站重庆平台网站建设企业
  • 一个人做网站好累电子商城采购流程
  • 网站制作维护价格信息网站建设方案