Spark的一大好处就是可以通过增加机器数量并使用集群模式运行,来扩展计算能力。Spark可以在各种各样的集群管理器(Hadoop YARN , Apache Mesos , 还有Spark自带的独立集群管理器)上运行,所以Spark应用既能够适应专用集群,又能用于共享的云计算环境。

  • Spark运行时架构

Spark在分布式环境中的架构如下图:

  在分布式环境下,Spark集群采用的是主/从结构。在Spark集群,驱动器节点负责中央协调,调度各个分布式工作节点。执行器节点是工作节点,作为独立的Java进行运行,可以和大量的执行器节点进行通信,作为独立的Java进程运行。驱动器节点和所有的执行器节点一起被称为一个Spark应用。

  Spark应用通过一个叫做集群管理器的外部服务在集群上的机器上启动。Spark自动的集群管理器称为独立集群管理器。Spark也能运行在Hadoop YARN和Apache Mesos两大开源集群管理器上。

  详细说明驱动器节点和执行器节点的作用:

1、驱动器节点

Spark驱动器是执行程序中main()方法的进程。它执行用户编写的用来创建SparkContext ,创建RDD,以及进行RDD转化操作和行动操作的代码。

驱动器进程在Spark应用中有以下两个职责:

  • 把用户程序转为任务

Spark驱动器程序负责把用户程序转为多个物理执行的单元,这些单元称为任务。任务是Spark中最小的工作单元,用户程序通常要启动成百上千的独立任务。

  • 为执行器节点调度任务

Spark驱动器在各执行器进程间协调任务的调度,驱动器进程对应用中所有的执行器节点有完整的记录。每个执行器节点代表一个能够处理任务和存储RDD数据的进程。

2、执行器节点

Spark执行器节点是一种工作进程,负责在Spark作业中运行任务,任务间相互独立。执行器节点在Spark应用启动时启动,伴随着整个Spark应用的生命周期而存在。

执行器节点负责运行组成Spark应用的任务,并将结果返回给驱动器进程。

执行器节点通过自身的块管理器为用户程序中要求缓存的RDD提供内存式存储。

  • spark-submit部署应用

使用Spark提供的统一脚本spark-submit将应用提交到集群管理器上。

spark-submit提供了各种选项可以控制应用每次运行的各项细节。这些选项分为两类:第一类是调度信息,比如你希望为作业申请的资源量。第二类是应用的运行时依赖,比如需要部署到所有工作节点的库和文件。

spark-submit的一般格式:

  bin/spark-submit [options]  <app jar | python file>  [app options]

[options]是要传给spark-submit的标记列表,运行spark-submit --help 可以列出所有可以接收的标记。

<app jar | python file>表示包含应用入口的JAR包或Python脚本。

[app options]是传给应用的选项。

spark-submit一些常用的标记如下:

  • 使用Maven依赖
<properties>
<scala.version>2.10.4</scala.version>
<spark.version>1.6.3</spark.version>
<hadoop.version>2.6.0</hadoop.version>
</properties> <dependencies>
<!-- scala -->
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala.version}</version>
</dependency>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-compiler</artifactId>
<version>${scala.version}</version>
</dependency>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-reflect</artifactId>
<version>${scala.version}</version>
</dependency> <!-- spark -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_2.10</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.10</artifactId>
<version>${spark.version}</version>
</dependency> <!-- hive -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_2.10</artifactId>
<version>${spark.version}</version>
</dependency> <!-- hadoop -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>${hadoop.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>${hadoop.version}</version>
</dependency> <!-- JDBC -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.35</version>
</dependency>
</dependencies>
  •   Spark应用内与应用间调度

在调度多用户集群时,Spark主要依赖集群管理器来在Saprk应用间共享资源。Spark内部的公平调度器会让长期运行的应用定义调度任务的优先级队列。

Spark学习笔记5:Spark集群架构的更多相关文章

  1. Redis学习笔记八:集群模式

    作者:Grey 原文地址:Redis学习笔记八:集群模式 前面提到的Redis学习笔记七:主从复制和哨兵只能解决Redis的单点压力大和单点故障问题,接下来要讲的Redis Cluster模式,主要是 ...

  2. ZooKeeper学习笔记一:集群搭建

    作者:Grey 原文地址:ZooKeeper学习笔记一:集群搭建 说明 单机版的zk安装和运行参考:https://zookeeper.apache.org/doc/r3.6.3/zookeeperS ...

  3. spark学习笔记总结-spark入门资料精化

    Spark学习笔记 Spark简介 spark 可以很容易和yarn结合,直接调用HDFS.Hbase上面的数据,和hadoop结合.配置很容易. spark发展迅猛,框架比hadoop更加灵活实用. ...

  4. rabbitmq系统学习(三)集群架构

    RabbitMQ集群架构模式 主备模式 实现RabbitMQ的高可用集群,一般在并发和数据量不高的情况下,这种模型非常的好用且简单.主备模式也称为Warren模式 HaProxy配置 listen r ...

  5. spark学习1(hadoop集群搭建)

    把原先搭建的集群环境给删除了,自己重新搭建了一次,将笔记整理在这里,方便自己以后查看 第一步:安装主节点spark1 第一个节点:centos虚拟机安装,全名spark1,用户名hadoop,密码12 ...

  6. spark学习5(hbase集群搭建)

    第一步:Hbase安装 hadoop,zookeeper前面都安装好了 将hbase-1.1.3-bin.tar.gz上传到/usr/HBase目录下 [root@spark1 HBase]# chm ...

  7. redis 学习笔记(6)-cluster集群搭建

    上次写redis的学习笔记还是2014年,一转眼已经快2年过去了,在段时间里,redis最大的变化之一就是cluster功能的正式发布,以前要搞redis集群,得借助一致性hash来自己搞shardi ...

  8. Hadoop学习笔记—13.分布式集群中节点的动态添加与下架

    开篇:在本笔记系列的第一篇中,我们介绍了如何搭建伪分布与分布模式的Hadoop集群.现在,我们来了解一下在一个Hadoop分布式集群中,如何动态(不关机且正在运行的情况下)地添加一个Hadoop节点与 ...

  9. Spark学习笔记-使用Spark History Server

    在运行Spark应用程序的时候,driver会提供一个webUI给出应用程序的运行信息,但是该webUI随着应用程序的完成而关闭端口,也就是 说,Spark应用程序运行完后,将无法查看应用程序的历史记 ...

  10. 开源流媒体服务器SRS学习笔记(4) - Cluster集群方案

    单台服务器做直播,总归有单点风险,利用SRS的Forward机制 + Edge Server设计,可以很容易搭建一个大规模的高可用集群,示意图如下 源站服务器集群:origin server clus ...

随机推荐

  1. xxx/labelKeypoint/utils/qt.py:81: RuntimeWarning: invalid value encountered in double_scalars

    原代码: return np.linalg.norm(np.cross(p2 - p1, p1 - p3)) / np.linalg.norm(p2 - p1) 出现报错: xxx/labelKeyp ...

  2. bug生命周期和bug状态处理

    首先,测试人员发现 BUG ,做好记录并上报至 BUG 数据库.接着,开发组长或经理确定该 BUG 是否有效 之后指定 BUG 的优先级并安排给相关开发人员.否则拒绝该 BUG 的修复. 然后,该 B ...

  3. LUN挂载到Linux主机后,如何对磁盘进行分区

    将阵列上的LUN挂载到Linux主机后,如何对磁盘进行分区,方法参考https://www.ibm.com/developerworks/cn/linux/l-lpic1-v3-104-1/ fdis ...

  4. 前端开发 —— js 常用工具函数(utilities)

    1. 时间 function getCurTime() { var date = new Date(); return date.toLocaleTimeString(); } date.toLoca ...

  5. led灯的驱动电流和电阻

     通常led灯条所采用的LED驱动电流都是20mA, 这网站里有led电阻的详细计算过程:http://www.bao1314.net/792.html

  6. BZOJ4872: [Shoi2017]分手是祝愿【概率期望DP】【思维好题】

    Description Zeit und Raum trennen dich und mich. 时空将你我分开.B 君在玩一个游戏,这个游戏由 n 个灯和 n 个开关组成,给定这 n 个灯的初始状态 ...

  7. 使用ioctl获取网卡统计信息

    ethtool -S获取接口统计信息总共分三步: 1.获取统计项个数,使用SIOCETHTOOL+ETHTOOL_GSSET_INFO 2.(可选)获取统计项名字,使用SIOCETHTOOL+ETHT ...

  8. log4net保存到数据库系列二:独立配置文件中配置log4net

    园子里面有很多关于log4net保存到数据库的帖子,但是要动手操作还是比较不易,从头开始学习log4net数据库日志一.WebConfig中配置log4net 一.WebConfig中配置log4ne ...

  9. tomcat源码阅读之StandardContext

    Context实例表示一个具体的web应用程序,其中包含一个或者多个Wrapper实例,每个Wrapper表示一个具体的servlet定义.StandardContext类是Context接口的标准实 ...

  10. 【转】朱兆祺教你如何攻破C语言学习、笔试与机试的难点(连载)

    原文网址:http://bbs.elecfans.com/jishu_354666_1_1.html 再过1个月又是一年应届毕业生应聘的高峰期了,为了方便应届毕业生应聘,笔者将大学四年C语言知识及去年 ...