【原】Spark Standalone如何通过start-all.sh启动集群
1.start-all.sh脚本分析

我们可以从start-all.sh脚本源文件中看到它其实是start-master.sh和start-slaves.sh两个脚本的组合。

由图2可见,start-master.sh最终是通过类org.apache.spark.deploy.master.Master来完成的,待会儿我们分析.

由图3可见,start-slaves.sh是由slaves.sh和start-slave.sh来组成的。

由图4可见,可以看到slave节点是由org.apache.spark.deploy.worker.Worker类来完成的,master和slave的start都是由spark-daemon.sh脚本来运行的
2.具体执行类分析
脚本最后的执行者其实是类。我们具体看一下Master、Worker的执行过程。
2.1 Master节点启动分析
Master.scala文件由一个Master类和其伴生对象组成。
从main函数开始,主要启动Rpc环境,目前Spark中提供了两种Rpc环境:Akka和Netty
def main(argStrings: Array[String]) {
SignalLogger.register(log)
val conf = new SparkConf
//命令转换器,将通过脚本传递过来的参数转化为类Master的变量
val args = new MasterArguments(argStrings, conf)
//启动master并返回一个三元组:(1)Master Rpc环境(2)web UI绑定的端口号(3)REST server绑定的端口号
val (rpcEnv, _, _) = startRpcEnvAndEndpoint(args.host, args.port, args.webUiPort, conf)
//等待直到RpcEnv退出
rpcEnv.awaitTermination()
}
(1)master参数主要是通过MasterArguments类来完成的,如下所示,由代码可见master默认的端口是7070,web端口是8080

(2)通过startRpcEnvAndEndpoint方法实现启动Master并返回三元组,由Master RpcEnv、绑定的web UI端口号和REST server绑定的端口号
def startRpcEnvAndEndpoint(
host: String,
port: Int,
webUiPort: Int,
conf: SparkConf): (RpcEnv, Int, Option[Int]) = {
val securityMgr = new SecurityManager(conf)
//通过RpcEnvFactory生成RpcEnv,这里默认使用的是NettyRpcEnvFactory
val rpcEnv = RpcEnv.create(SYSTEM_NAME, host, port, conf, securityMgr)
//返回一个Master的远程调用masterEndpoint
val masterEndpoint = rpcEnv.setupEndpoint(ENDPOINT_NAME,
new Master(rpcEnv, rpcEnv.address, webUiPort, securityMgr, conf))
//绑定端口的请求
val portsResponse = masterEndpoint.askWithRetry[BoundPortsResponse](BoundPortsRequest)
(rpcEnv, portsResponse.webUIPort, portsResponse.restPort)
}
2.2 Worker节点启动分析
Worker节点的启动和Master的很类似,如下所示:
def main(argStrings: Array[String]) {
SignalLogger.register(log)
val conf = new SparkConf
//命令转换器,将通过脚本传递过来的参数转化为类Worker的变量
val args = new WorkerArguments(argStrings, conf)
//启动Worker Rpc环境
val rpcEnv = startRpcEnvAndEndpoint(args.host, args.port, args.webUiPort, args.cores,
args.memory, args.masters, args.workDir)
//等待直到RpcEnv退出
rpcEnv.awaitTermination()
}
(1)启动Worker Rpc环境如下所示
def startRpcEnvAndEndpoint(
host: String,
port: Int,
webUiPort: Int,
cores: Int,
memory: Int,
masterUrls: Array[String],
workDir: String,
workerNumber: Option[Int] = None,
conf: SparkConf = new SparkConf): RpcEnv = {
// The LocalSparkCluster runs multiple local sparkWorkerX RPC Environments
//LocalSparkCluster启动多个本地的sparkWorker RPC环境,系统名为sparkWorker1,sparkWorker2.。。
val systemName = SYSTEM_NAME + workerNumber.map(_.toString).getOrElse("")
val securityMgr = new SecurityManager(conf)
//通过RpcEnvFactory生成RpcEnv,这里默认使用的是NettyRpcEnvFactory
val rpcEnv = RpcEnv.create(systemName, host, port, conf, securityMgr)
//从RpcAddress得到master的地址,即从spark://host:port解析得到host和port封装到RpcAddress
val masterAddresses = masterUrls.map(RpcAddress.fromSparkURL(_))
//返回一个Worker的远程调用
rpcEnv.setupEndpoint(ENDPOINT_NAME, new Worker(rpcEnv, webUiPort, cores, memory,
masterAddresses, systemName, ENDPOINT_NAME, workDir, conf, securityMgr))
rpcEnv
}
下一篇我们继续了解Spark Rpc,了解Master、Worker和Client是如何通信的。
【原】Spark Standalone如何通过start-all.sh启动集群的更多相关文章
- Spark Tachyon编译部署(含单机和集群模式安装)
Tachyon编译部署 编译Tachyon 单机部署Tachyon 集群模式部署Tachyon 1.Tachyon编译部署 Tachyon目前的最新发布版为0.7.1,其官方网址为http://tac ...
- spark第三篇:Cluster Mode Overview 集群模式预览
Spark applications run as independent sets of processes on a cluster, coordinated by the SparkContex ...
- Spark集群管理器介绍
Spark可以运行在各种集群管理器上,并通过集群管理器访问集群中的其他机器.Spark主要有三种集群管理器,如果只是想让spark运行起来,可以采用spark自带的独立集群管理器,采用独立部署的模式: ...
- 【原】Spark Standalone模式
Spark Standalone模式 安装Spark Standalone集群 手动启动集群 集群创建脚本 提交应用到集群 创建Spark应用 资源调度及分配 监控与日志 与Hadoop共存 配置网络 ...
- Spark Standalone
环境:CentOS 6.6 x64 选用Spark版本 1.4.1.Zookeeper 3.4.6 一.安装 1.Spark运行模式 Local:使用于windows和linux平台(多用于测试,细 ...
- Spark standalone运行模式
Spark Standalone 部署配置 Standalone架构 手工启动一个Spark集群 https://spark.apache.org/docs/latest/spark-standalo ...
- Spark standalone模式的安装(spark-1.6.1-bin-hadoop2.6.tgz)(master、slave1和slave2)
前期博客 Spark运行模式概述 Spark standalone简介与运行wordcount(master.slave1和slave2) 开篇要明白 (1)spark-env.sh 是环境变量配 ...
- [会装]Spark standalone 模式的安装
1. 简介 以standalone模式安装spark集群bin运行demo. 2.环境和介质准备 2.1 下载spark介质,根据现有hadoop的版本选择下载,我目前的环境中的hadoop版本是2. ...
- 04、Spark Standalone集群搭建
04.Spark Standalone集群搭建 4.1 集群概述 独立模式是Spark集群模式之一,需要在多台节点上安装spark软件包,并分别启动master节点和worker节点.master节点 ...
随机推荐
- AngularJS(3)-过滤器
过滤器可以通过一个管道字符(|)和一个过滤器添加到表达式中.. 1.uppercase/lowercase 大小写过滤器 2.currency过滤器 3.向指令添加过滤器 过滤器可以通过一个管道字符( ...
- 简单的NHibernate学习笔记
NHibernate是.NET平台下的ORM框架,与ADO.NET一样实现项目中数据库与项目系统的交互. .首先要用NHibernate框架就要有第三方的dll库来作为支持,附上百度云下载地址:(链接 ...
- PHP输出
样例: $a = true;$b = false;$c = 086;$d = 0x86;echo "$a hase value: ".$a; echo "<br/& ...
- PHP中如何设置error_reporting错误报告级别
错误报告级别:指定了在什么情况下,脚本代码中的错误(这里的错误是广义的错误,包括E_NOTICE注意.E_WARNING警告.E_ERROR致命错误等)会以错误报告的形式输出. 设置错误报告级别的 ...
- 详解MySQL中EXPLAIN解释命令(转)
explain显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. 使用方法,在select语句前加上explain就可以了: 如: expla ...
- testlink的下载地址
http://sourceforge.jp/projects/sfnet_testlink/downloads/TestLink%201.9/TestLink%201.9.12/testlink-1. ...
- opengl Test
LIBS += -lGL -lGLU -lglut -lGLEW #include <GL/glut.h> #include <iostream> using namespac ...
- Hadoop常见的45个问题解答
(大讲台:国内首个it在线教育混合式自适应学习) 1.Hadoop集群可以运行的3个模式 单机(本地)模式 伪分布式模式 全分布式模式 2. 单机(本地)模式中的注意点? 在单机模式(standal ...
- 开发设计模式(二) ActiveObject模式
ActiveObject模式: ActiveObject模式和Command模式的配合使用是实现多线程控制的一项古老的技术,该模式有多种使用方式,为许多工业系统提供了一个简单的多任务核心. // 活动 ...
- STL set_difference set_intersection set_union 操作
以下是STL algorithm的几个函数,使用的条件是有序容器,所以 vector在被sort了之后是可以使用的,set也是可以使用的. set_difference 这个是求得在第一个容器中有,第 ...