写点什么

大数据训练营一期毕业作业

作者:张大彪
  • 2022 年 8 月 21 日
    北京
  • 本文字数:1959 字

    阅读完需:约 6 分钟

题目一: 分析一条 TPCDS SQL(请基于 Spark 3.1.1 版本解答)

SQL 从中任意选择一条:https://github.com/apache/spark/tree/master/sql/core/src/test/resources/tpcds

(1)运行该 SQL,如 q38,并截图该 SQL 的 SQL 执行图

(2)该 SQL 用到了哪些优化规则(optimizer rules)

(3)请各用不少于 200 字描述其中的两条优化规则

(1) 执行命令:

./spark-3.1.1-bin-hadoop2.7/bin/spark-submit --class org.apache.spark.sql.execution.benchmark.TPCDSQueryBenchmark --jars spark-core_2.12-3.1.1-tests.jar,spark-catalyst_2.12-3.1.1-tests.jar spark-sql_2.12-3.1.1-tests.jar --data-location tpcds-data-1g --query-filter "q38" > ~/tmp/spark.query.log 2>&1
复制代码


(2) 优化规则:

=== Applying Rule org.apache.spark.sql.catalyst.optimizer.CollapseProject ===

=== Applying Rule org.apache.spark.sql.catalyst.optimizer.ColumnPruning ===

=== Applying Rule org.apache.spark.sql.catalyst.optimizer.ConstantFolding ===

=== Applying Rule org.apache.spark.sql.catalyst.optimizer.EliminateLimits ===

=== Applying Rule org.apache.spark.sql.catalyst.optimizer.InferFiltersFromConstraints ===

=== Applying Rule org.apache.spark.sql.catalyst.optimizer.PushDownLeftSemiAntiJoin ===

=== Applying Rule org.apache.spark.sql.catalyst.optimizer.PushDownPredicates ===

=== Applying Rule org.apache.spark.sql.catalyst.optimizer.RemoveNoopOperators ===

=== Applying Rule org.apache.spark.sql.catalyst.optimizer.ReorderJoin ===

=== Applying Rule org.apache.spark.sql.catalyst.optimizer.ReplaceDistinctWithAggregate ===

=== Applying Rule org.apache.spark.sql.catalyst.optimizer.ReplaceIntersectWithSemiJoin ===

=== Applying Rule org.apache.spark.sql.catalyst.optimizer.RewritePredicateSubquery ===

(3) 优化规则描述:

CollapseProject:Project 合并规则,该规则可以对多个 select 操作,或是聚合加 select 操作时的列选择或运算进行优化。通过这种方式来简化逻辑执行计划,并使得在生成物理计划时产生最优化的代码。


ColumnPruning:列裁剪规则,该逻辑计划优化规则,尝试从逻辑计划中去掉不需要的列,从而减少读取数据的量。该规则会根据各种操作的目标列,对列进行裁剪的逻辑计划优化,并尽可能把这种优化推到数据源处。


PushDownPredicates:这个规则通过其他的操作把 filter 操作下推到离数据源更近的地方,这样做可以将计算转移至数据源端,减少 spark 加载和计算的数据量,但不是所有的操作都支持。比如,如果表达式不是确定性的,这就不行,假如我们使用类似 first,last,collect_set,collect_list,rand 等,filters 操作就不能通过这些操作而进行下推,因为这些函数是不确定性的。


题目二:架构设计题

你是某互联网公司的大数据平台架构师,请设计一套基于 Lambda 架构的数据平台架构,要求尽可能多的把课程中涉及的组件添加到该架构图中。并描述 Lambda 架构的优缺点,要求不少于 300 字。

1、架构图:


2、什么是 Lambda 架构

Lambda 架构是一种数据处理架构,通过利用批处理和流处理方法来处理大量数据。这种架构方法通过使用离线批处理来提供批处理数据的全面和准确的视图,同时使用实时流处理来提供在线数据的视图来平衡延迟、吞吐量和容错性,两个视图输出可以在呈现之前合并。

Lambda 架构的兴起与大数据的增长、实时分析以及减少延迟的驱动力相关。

流处理计算的指标批处理也会计算,最终以批处理为准,即每一次批处理计算之后的结果会覆盖流处理的结果,这是对流处理引擎的一种补充方式(实时计算的结果一般来说没有离线计算的准确)。

Lambda 架构包含三层,分别是 Batch Processing Layer(批处理层)、Speed (Real-Time) Processing Layer(速度处理层)、Serving Layer(服务层)。

3、Lambda 优缺点

优点:

Lambda 架构的好处就是架构比较简单

对数据修正纠错也很友好,如果后期数据统计口径发生了变化,可以通过重新运行离线任务,从而很快的将历史数据修正纠错为最新的口径

缺点:

使用 Lambda 架构时,架构师需要维护两个复杂的分布式系统,并且保证他们逻辑上产生相同的结果输出到服务层中。

我们都知道,在分布式框架中进行编程其实是十分复杂的,尤其是我们还会针对不同的框架进行专门的优化。所以几乎每一个架构师都认同,Lambda 架构在实战中维护起来具有一定的复杂性。

那要怎么解决这个问题呢?我们先来思考一下,造成这个架构维护起来如此复杂的根本原因是什么呢?

维护 Lambda 架构的复杂性在于我们要同时维护两套系统架构:批处理层和速度层。我们已经说过了,在架构中加入批处理层是因为从批处理层得到的结果具有高准确性,而加入速度层是因为它在处理大规模数据时具有低延时性。

用户头像

张大彪

关注

还未添加个人签名 2018.04.25 加入

还未添加个人简介

评论

发布
暂无评论
大数据训练营一期毕业作业_张大彪_InfoQ写作社区