Spark集群模式概述

作者:foreyou
出处:http://www.foreyou.net/2015/06/22/spark-cluster-mode-overview/
声明:本文采用以下协议进行授权: 署名-非商用|CC BY-NC 3.0 CN ,转载请注明作者及出处。


本篇文章作为理解Spark框架的入门文章,对《Spark Cluster Mode Overview》的翻译。

集群模式概述

为了便于理解Spark框架的组件,这篇文章对Spark是如何运行在集群上做了概述。如果想要知道如何提交应用程序给Spark集群可以通读《application submission guide》

组件

Spark应用程序以一组独立的进程的运行在集群上,由在主程序(称之为DriverProgram)中的SparkContext对象来协调这些进程。SparkContext可以连接到多种跨应用程序的资源分配集群管理器(比如,Spark自己的StandaloneMesos/Yarn等),以运行Spark集群。一旦连接到集群,Spark便能获得了集群内部节点上的Executor。每个Executor都是集群节点上的一个为应用程序提供计算和数据存储的进程。然后,SparkContext会将代码发送给Executor。最后,SparkContext会把任务发给Executor执行。

img

关于这个架构,有几个值得注意的细节:

  1. 每个应用程序都会得到属于自己的一组Executor进程,这些进程伴随在应用程序的整个生命周期内,会一直以多线程的方式执行任务。这得益于应用程序彼此之间在调度和执行两端的都是分离的,因为每个driver program都只会调度自己应用程序的任务,同时不同应用程序的任务都会运行在不同的JVM中。这也意味着,除非将数据写到外部存储,否则Spark应用程序(SparkContext实例)之间没法共享数据。
  2. Spark对于底层的集群管理器是不可见的。只要获得Executor并让他们之间能够彼此通信,在集群管理器(例如,Mesos/Yarn)上运行Spark应用程序就会变得相对容易,这些集群管理器还可以运行其他类型的应用程序。
  3. Driver program的整个生命周期内,它都要接听和接受来自Executor的连接请求(详见spark.driver.port and spark.fileserver.port in the network config section)。这样Driver program必须是从工作节点网络可寻址的。
  4. 因为Driver program是用来调度任务在集群上执行的,所以它运行的节点应该尽量靠近工作节点,最好是同一个局域网。如果你想远程发送请求到集群,最好开一个RPC到driver,并把它提交到一个靠近集群的driver而不是一个远离工作节点的driver

集群管理器类型

Spark系统目前支持三种类型的集群管理器:

  • Standalone - Spark框架提供的便于其创建集群的一种集群管理器。
  • Apache Mesos - 一个也可以运行Hadoop MapReduce和服务程序的通用集群管理器。
  • Hadoop YARN - Hadoop 2的资源管理器。

除此之外,Spark还提供了EC2 launch scripts便于其在Amazon EC2之上建立Standalone集群。

提交应用程序

应用程序可以使用spark-submit脚本提交到集群上去运行。《application submission guide》介绍了详细步骤。

监控(Monitoring)

每个Driver program都有一个对应的网络UI,应用程序端口为4040,用于显示有关正在运行的任务,Executor,以及存储使用情况的信息。在浏览器内通过http://<driver-node>:4040链接访问此网络UI。《monitoring guide 》还介绍了其他监控选项。

作业调度(Job Scheduling)

Spark框架下,既有跨应用程序的资源分配(集群管理器级别),也有应用程序内资源分配(如果在同一个SparkContext上发生了多个计算)。详见《job scheduling overview》

术语(Glossary)

下表汇总了Spark框架下的概念术语:

术语意思
ApplicationSpark上构建的程序,由Driver program和集群上的Executor组成
Driver program运行main()函数和创建SparkContext的进程
Cluster manager用于获取集群上资源的外部服务(例如,StandaloneMesosYARN
Worker node集群中任意可以运行应用的节点
Executor在工作员节点上为应用所启动的一个进程,可以运行任务以及可以在内存或是硬盘中保存数据。每一个应用都有属于自己的一组Executor
Task一个可以被发送给Executor的工作单元
Job一个用于响应Spark action(例如,savecollect)的多任务组成的并行计算;你可以在驱动日志中看到这个术语
Stage每个工作被分为较小相互依赖的Task集合称为Stage (和MapReduce中的mapreduce阶段相似); 你可以在驱动日志中看到这个术语

转载于:https://www.cnblogs.com/forzhongyou/p/4593464.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值