版本:2.4.5
 

1. spark的几种执行方式

1)交互式shell:bin/spark-shell
bin/spark-shell --master <MasterURL> 可配置不同的执行器
 
例如:
bin/spark-shell --master local  # 本地单worker执行
bin/spark-shell --master local[K]  # 本地K个worker执行,K为"*"(星号)时表示本机CPU核数
bin/spark-shell --master local[K, F]  # spark.task.maxFailures = F,单个task失败F次后job失败,即task可以重试最多F-1次
bin/spark-shell --master spark://HOST:PORT  # 连接已有的standalone cluster,standalone模式就是手动部署一个测试用的集群,包含master和slave,可以为单机环境(standalone模式使用说明:https://spark.apache.org/docs/latest/spark-standalone.html)(standalone有client模式和cluster模式。client模式中driver和提交任务的client在一个进程中;而cluster模式中driver在cluster的一个worker中执行,client提交任务后就结束退出了,另外cluster模式还以配置为任务非0退出后立即重跑。)
bin/spark-shell --master spark://host1:port1,host2:port2  # 连接已有的基于ZK的standalone master(有多个master,其中一个是leader,挂了以后其他master恢复状态并上位)
bin/spark-shell --master mesos://host:port  # 连接已有的Mesos cluster(没细看)
bin/spark-shell --master yarn  # 连接一个Yarn集群,可以配置 --deploy-mode client/cluster (yarn的地址从hadoop配置中读取,不需要在命令中指定)
bin/spark-shell --master k8s://host:port  # 连接一个kubernetes集群(目前不支持client模式)
 
2)python: bin/pyspark & bin/spark-submit xx.py
3)R:bin/sparkR & bin/spark-submit xx.R

2. 任务的提交

spark-submit可以将任务提交到一个集群上,并且有统一的接口支持所有cluster manager(standalone、mesos、yarn、kubernetes)。
打包任务所有的依赖到一个jar包中,或者使用--py-files参数提交.py、.zip、.egg文件(多个文件需打包为一个.zip)
 
bin/spark-submit \
--class <main-class> \ # 任务入口
--master <master-url> \ # 支持多种cluster manager
--deploy-mode <deploy-mode> \ # cluster / client,默认为client
--conf <key>=<value> \
... # other options,如--supervise(非0退出立即重启), --verbose(打印debug信息), --jars xx.jar(上传更多的依赖,逗号分隔,不支持目录展开)
<application-jar> \ # main-class来自这个jar包,必须是所有节点都可见的路径,hdfs://或file://
[application-arguments] # 入口函数的参数 bin/spark-submit \
--master <master-url> \
<application-python> \
[application-arguments]
 
* 关于cluster / client模式:
如果任务提交机和worker执行机在同一个物理位置,可以用client模式;如果不再同一个位置,可以用cluster模式,让driver和worker一起执行,减少网络延迟。另外python没有standalone cluster模式。
* 很多配置可以放在spark-defaults.conf中,就不用在spark-submit中重复配置了
 

3. cluster模式

spark任务在集群上作为一个独立的资源集合运行,由driver的SparkContext对象进行管理。为了在集群上运行,SparkContext连接cluster manager让它来分配任务资源。一旦连接,spark从集群节点获取executors,用来进行计算和存储数据。之后,spark发送任务代码(jar或python)到executors中。最后,SparkContext发送tasks到executors执行。
 

 
另外,有几点细节值得一提:
1)每个任务的executors是独占的,在整个任务运行期间存活。这使得不同任务间的资源管理更容易,互不干扰;同时导致同一任务的不同executors无法共享数据,除非写到外部存储中。
2)spark不限定下层的cluster manager种类,只要cluster manager可以获取executor资源,并且executors可以互相通信,就可以在spark中轻松使用。
3)driver在整个生命周期中都需要不断与executors通信,因此必须能够被workers访问。
4)因为driver调度集群中的tasks,他必须在物理上离executors尽可能近,最好在同一个本地网络中。
 
cluster模式即可以从任务层面对资源进行调度(依赖SparkContext/Driver),也可以从集群层面进行调度(依赖cluster manager)。
 
术语表
术语
含义
Application
任务,用户的spark程序,包含位于集群的一个driver和多个executors
Application jar
一个包含用户spark任务和依赖的jar包,不应包含hadoop或spark库
Driver program
任务main()函数和SparkContext所在的进程
Cluster manager
获取集群资源的外部服务
Deploy mode
用来区分driver进程在cluster还是client(即非cluster机器)上执行
Worker node
任何可以跑任务代码的节点
Executor
在worker node上载入并运行了用户任务的一个进程,它执行了tasks并且在内存或存储中保存数据,每个application独占它自己的executors
Task
一组被发送到一个executor的工作
Job
一个多tasks的并行计算单元,对应一个spark操作(例如save, collect)
Stage
每个job可以划分成的更小的tasks集合,类似MapReduce中的map/reduce,stages相互依赖
 
* 看过spark日志应该能够理解这些概念,save、collect等各是一个job,一个job会被划分成多个stages
 

Spark文档阅读之一:Spark Overview的更多相关文章

  1. Spark文档阅读之二:Programming Guides - Quick Start

    Quick Start: https://spark.apache.org/docs/latest/quick-start.html 在Spark 2.0之前,Spark的编程接口为RDD (Resi ...

  2. 转:苹果Xcode帮助文档阅读指南

    一直想写这么一个东西,长期以来我发现很多初学者的问题在于不掌握学习的方法,所以,Xcode那么好的SDK文档摆在那里,对他们也起不到什么太大的作用.从论坛.微博等等地方看到的初学者提出的问题,也暴露出 ...

  3. Django文档阅读-Day1

    Django文档阅读-Day1 Django at a glance Design your model from djano.db import models #数据库操作API位置 class R ...

  4. Django文档阅读-Day3

    Django文档阅读-Day3 Writing your first Django app, part 3 Overview A view is a "type" of Web p ...

  5. Node.js的下载、安装、配置、Hello World、文档阅读

    Node.js的下载.安装.配置.Hello World.文档阅读

  6. 我的Cocos Creator成长之路1环境搭建以及基本的文档阅读

    本人原来一直是做cocos-js和cocos-lua的,应公司发展需要,现转型为creator.会在自己的博客上记录自己的成长之路. 1.文档阅读:(cocos的官方文档) http://docs.c ...

  7. Keras 文档阅读笔记(不定期更新)

    目录 Keras 文档阅读笔记(不定期更新) 模型 Sequential 模型方法 Model 类(函数式 API) 方法 层 关于 Keras 网络层 核心层 卷积层 池化层 循环层 融合层 高级激 ...

  8. Django文档阅读-Day2

    Django文档阅读 - Day2 Writing your first Django app, part 1 You can tell Django is installed and which v ...

  9. Spark Streaming + Flume整合官网文档阅读及运行示例

    1,基于Flume的Push模式(Flume-style Push-based Approach)      Flume被用于在Flume agents之间推送数据.在这种方式下,Spark Stre ...

随机推荐

  1. 性能测试之服务器监控和Prometheus推荐

    服务器的监控,也是采用Prometheus和Grafana.可以监控服务器系统负载.CPU使用率.网络流量.磁盘使用率.磁盘读写速度.IO耗时.网络信息. 效果图 安装使用 安装启动node_expo ...

  2. xshell使用技巧

    XShell是一款Windows下的一款远程连接Linux主机的工具,类似的软件还有SecureCRT,putty等,但是个人感觉XShell好用,功能强大.. 一.复制和粘贴 linux的Shell ...

  3. sobel( ) 算子

    只是简单的使用方面的记录 sobel()算子是图像处理中用于边缘检测的 opencv-python 中的函数形式为 def Sobel(src, ddepth, dx, dy, dst=None, k ...

  4. 0515项目优化和List集合

    0515项目优化和List集合 1. 项目优化 1.1 分析当前情况 问题 数据存储是数组形式,数据类型明确.复用度较低. 需求 Student操作使用的代码,StudentManager想要操作考虑 ...

  5. [自动化-脚本]002.cocos2dx-lua lua代码windows加密批处理

    在开发软件的时候,我们都会在项目上线时候对代码进行加密,用来防止被不法分子盗走牟利.不同的语言有不同的加密方式,比较出名的有加壳,代码混淆等.在Lua开发cocos2dx的时候,框架会有提供加密的脚本 ...

  6. 使用jetty作为内嵌服务器启动项目

    http://blog.csdn.net/robinpipi/article/details/7557035 需求:把jetty作为内嵌的一个服务器,直接启动,web项目不用部署在应用服务器中.在网上 ...

  7. Take advantage of Checkra1n to Jailbreak iDevice for App analysis

    An unpatchable bootrom exploit called "checkm8" works on all iDevices up until the iPhone ...

  8. Linux(十) —— 使用 rz 和 sz 命令上传与下载

    以CentOS 7 系统为例,一般上传下载都是使用的第三方工具,但是在操作上并不方便,每次都要找到对应的目录才可以执行上传.下载操作,比较麻烦. 而CentOS为例的 Linux 系统可以通过安装 插 ...

  9. Protocol Buffers工作原理

    这里记录一下学习与使用Protocol Buffer的笔记,优点缺点如何使用这里不再叙述,重点关注与理解Protocol Buffers的工作原理,其大概实现. 我们经常使用Protocol Buff ...

  10. Java实现 蓝桥杯VIP 算法提高 3-1课后习题2

    算法提高 3-1课后习题2 时间限制:1.0s 内存限制:256.0MB 问题描述 编写一个程序,接受用户输入的10个整数,输出它们的和. 输出格式 要求用户的输出满足的格式. 例:输出1行,包含一个 ...