zoukankan      html  css  js  c++  java
  • Spark文档阅读之一:Spark Overview

    版本: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
     

  • 相关阅读:
    mysql_day04
    四则运算_EX
    第二阶段站立会议9
    对搜狗输入法的评价
    找水王
    第二阶段站立会议8
    第二阶段站立会议7
    第二次站立冲刺会议6
    第二阶段站立冲刺会议5
    第二阶段站立冲刺会议4
  • 原文地址:https://www.cnblogs.com/desertfish/p/13136786.html
Copyright © 2011-2022 走看看