Spark——Chapter2:Spark's Basic Architecture

翻译:《Spark: The Definitive Guide 》
Author:Bill Chambers and Matei Zaharia
译者: 雨钓(有增改)

Spark Applications

一個spark应用程序包含一个driver process 程序和一系列 executor processes,driver process负责在你集群的一个节点上执行你的main()方法,他的主要功能如下:

  • 维护Spark Application的一些信息;
  • 响应用户的程序或者输入;
  • 分析分配以及调度executors之间的工作(稍后讨论);

Driver process 是至关重要的——他在Spark Application整个生命周期中维护应用信息的核心。
Executors负责实际执行driver分配给他的任务。这就意味着每一个executor仅仅负责两件事:

  • 执行driver分配(assigned)给他的任务;
  • 报告当前executor的计算状态给driver node。

Figure 2-1示范了Cluster Manager如何控制物理服务器,以及给Spark Application分配资源。常见的Cluster Manger有:Spark·s standalone cluster manager,Yarn 以及Mesos。通过Cluster Manger可以同时有多个Spark Application在集群上并发执行,第四部分我们将讨论更多的关于Cluster Manger的内容。

Figure 2-1

上图Figure 2-1 中我们可以看到左边的一个Driver和右边的四个Executors,在这个图(diagram)中,我们移除了集群节点的概念。用户通过配置可以指定(specify)每个节点上有多少个executors.

Note:
Spark 除了集群模式(cluster mode)之外,也存在本地模式(local mode),此时Driver和Executor是非常相似的程序,二者作为线程运行在你的个人电脑上而非集群上,此书中主要以local mode为主,所以你可以在单一的机器上运行本书提到的所有的内容

这里有关于理解Spark Application的几个关键点:

  • Spark 使用(employs)一个Cluster Manger来检测跟踪集群可用资源;
  • Driver process主要负责执行drivevr程序命令并通过Executors去完成给定的任务。

Executors 通常将执行Spark code;然而,driver通过Spark 的API可以支持自多种不同的语言。下一节介绍。

Spark`s Lnaguage APIs

它使得你可以使用多种语言运行Spark code。大多数情况下,Spark在每个语言中都有一些核心的概念;这些概念被翻译成可以运行在集权上的Spark代码。如果你按照规范使用这些API,你可以期望所有的语言都有类似的特性:

Scala
  Spark主要由scala写的,这使得它成为Spark的默认语言。这本数据将包含Scala语言代码。
Java
  虽然Spark是使用Scala写的,Spark的作者们确保你可以使用Java写SparkCode。本书主要以Scala为主,但也会涉及Java代码。
Python
 Python 支持的结构与Scala非常相似,本书包含python 代码和Python API
SQL
 Spark 支持标准的ANSISQL2003标准。这就使得分析师和非程序猿也可以利用Spark的大数据优势。
R
 Spark有两个通用的R 库:SparkR,sparklyr(R community-driven package)

Figure 2-2对这种关系给出了一个简单的说明:

Figure 2-2

每一种语言的API都维护着我们前面提到的几个核心概念,其中SparkSession类是对用户可用的,它是运行Spark代码的入口。当使用Python或者R编写Spark程序时,你不需要编写明确的JVM指令;取而代之的是,你只需要编写Python和R代码,Spark会将它翻译成可以在executor 的JVM上执行的代码。

Spark`s APIs

虽然你可以通过多种语言来使用Spark,但是不同的语言间可以提供哪些特性是值得一提的。Spark有两组基本的API:low-level 非结构化API,和higher-level 的结构化API。我们在本书中都将讨论,但是重点讨论higher-level结构化APIS.

Starting Spark

至此我们提到了Spark基本的概念,这些都是概念性的,但我们实际编写我们Spark程序的时候,我们需要一个方法发送我们的命令和数据给它。这就需要我们首先创建一个SparkSession

Note
我们以Spark的Local mode为例介绍,这也就意味着运行./bin/spark-shell,即通过Scala控制台去启动一个交互式连接,当然你也可以通过./bin/pyspark启动一个Python的控制台。这样就可以启动一个交互式的Spark Application。同时spark通过一个程序提交standalone application到Spark的,这个程序的名字叫做:spark-submit;通过spark-submit你可以提交一个预编译的程序到spark,我们之后会详细介绍。

当你使用交互模式启动Spark的时候,后台会创建一个SparkSession用来管理Spark Application。但是,如果你通过Standalone application启动spark的时候你就必须在你的应用程序代码中创建一个SparkSession 类。

The SparkSession

前面介绍了,你可以通过一个名叫SparkSession的类控制你的Spark Application,这个SparkSession instance是Spark在集群上执行用户自定义程序的途径。在Scala和Python中,当你启动一个控制台时,Spark这个变量是可用的。我们来看看SparkSession在Python和 Scala中的情况:

IN Scala你将看到如下的内容:

res0: org.apache.spark.sql.Spark Session = org.apache.spark.sql.Spark Session@...

IN Python你将看到如下:

<pyspark.sql.session.Spark Session at 0x7efda4c1ccd0>

现在我们执行一个简单的任务:创建一个range of number,这个range of number相当于电子表格中的一个列。

//in Scala 
va
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值