Spark

Learning Spark [1] - Spark的基础概念

2021-01-05  本文已影响0人  屹然1ran

术语:

Spark Application and SparkSession

每个Spark Application的核心为Spark Driver,他会创建一个SparkSession(在Spark Shell中,Spark Driver直接创建了一个SparkSession)。创建了SparkSession后,我们就可以使用API对Spark进行编程

Spark Jobs

Driver会把一个Application转换为一个或多个Jobs,然后会把每个Job转化为DAG(有向无环图)。每一个DAG里的node(环节),皆会是一个或多个Stages。


Spark Stages

作为DAG中一个node,Stages可以是平行或者序列的。


Spark Task

每个Stage都由一个或者多个Task组成,所以会使每个Executor联合起来;每个Task仅map(映射)一个Core和一块数据。所以,一个16核Executor可以拥有16个或更多的Task,且平行运行!


Trasnformations, Actions, and Lazy Evaluation

Spark的运行类型可以分为两种:Transformations和Actions。


Transformation将一个DataFrame转化为另一个DataFrame且使原数据属性为不可更改来保留原数据。例如select()和filter()将不会更改原数据,则会将结果保存为新的DataFrame,然后输出改DataFrame作为结果。
所有Transformations都是lazy evaluation(惰性计算)。他们的结果将不会直接得出,但是他们会被记录为lineage(血统)。血统会在后续的执行中,去重新对Transformation进行排序,组合,优化到Stages,使执行更加效率。在Action被触及或数据被“触碰”之前,Transformation的执行都会被推迟,即为Spark的惰性计算策略。在以下的例子中,在filtered.count()前没有任何发生。

strings = spark.read.text("../README.md")
filtered = strings.filter(strings.value.contains("Spark")) 
filtered.count()
# 20

惰性计算使查询在执行前可以大致的观望数据的转化链,与Lineage,以及原数据不可更改,共同为Spark提升了容错率。

Narrow and Wide Transformations

任何只有单一输出的Transformation即是Narrow Transformation。例如filter()和contains()。groupby()和orderby()则是Wide Transformation。


Spark UI

在Spark Web UI中,可以实时观测:

Reference
Learning Spark 2nd - Lightning Fast Big Data Analysis by Jules S. Damji, Brooke Wenig, Tathagata Das, and Denny Lee

上一篇下一篇

猜你喜欢

热点阅读