spark运行模式一些概念

原创 2016年08月29日 00:16:33

spark的运行模式多种多样,在单机上既可以以本地模式运行,也可以以伪分布式模式运行,而当以分布式的方式运行在cluster集群中时,底层的资源调度可以使用mesos或者yarn,也可以使用spark自带的standalone模式。
在具体介绍每一种模式之前,首先对一些基本的概念和模型做个介绍
1、application:application的概念和hadoop mapreduce中的类似,都是指的用户编写的spark应用程序,其中包含了一个driver功能的代码和分布在集群中多个节点上运行的executor代码
2、driver:使用driver这一概念的分布式框架很多,比如hive等,spark中的driver即运行上述application的main()函数并且创建sparkcontext,创建sparkcontext的目的是为了准备spark应用程序的运行环境,在spark中由sparkcontext负责和clustermanager通信,进行资源的申请、任务的分配和监控等,当executor部分运行完毕后,driver同时负责将sparkcontext关闭,通常用sparkcontext代表driver。
3、executor:某个application运行在worker节点上的进程,该进程负责运行某些task,并且负责将数据存在内存或者磁盘上,每个application都有各自独立的一批executor,在spark on yarn模式下,其进行名称为coarseGrainedExecutorBackend.类似于hadoop mapreduce 中的yarnchlid,一个coarseGrainedExecutorBackend进程有且仅有一个executor对象,它负责将task包装成taskRunner,并从线程池中抽取出一个空闲线程运行task,每个coarseGrainedExecutorBackend能并行运行task的数量就取决于分配给它的cpu的个数了
4、cluster manager:指的是在集群上获取资源的外部服务,目前有:
4、1standalone:spark原生的资源管理,由master负责资源的分配,可以在亚马逊的EC2上运行
4、2apache mesos:与hadoop mapreduce兼容性良好的一种资源调度框架
4、3hadoop yarn:主要是指的yarn的resourceManager
5、worker:集群中任何可以 运行application代码的节点,类似于yarn中的nodemanger节点。在standalone模式中指的就是通过slave文件配置的worker节点,在spark on yarn模式中指的就是nodeManager节点
6、task:被送到某个executor上的工作单元,和hadoop mapreduce中的maptask和reducetask概念一样,是运行application的基本单位,多个task组成一个taskset,而task的调度及管理等由厦门的taskscheduler负责
7、job:包含多个task组成的并行计算,往往由spark action触发产生,一个application中可能会产生多个job
8、stage:每个job会被拆分很多组task,作为一个taskset,其名称为stage,stage的划分和调度由下面的DAGScheduler负责,stage有非最终的stage即shuffle map stage和最终的stage即result stage两种,stage的边界就是发生shuffle的地方
9、RDD:spark的基本计算单元,可以通过一系列算子进行操作(主要有transformation和action操作)。同时RDD是spark最核心的东西,它表示以被分区、被序列化的、不可变得、有容错机制的并且能够被并行操作的数据集合。其存储级别可以是内存,也可以是磁盘,可通过spark.storage.StorageLevel属性配置
10、共享变量:在spark application运行时,可能需要共享一些变量,提供task或driver等使用,spark提供了两种共享变量,一种是可以缓存到各个节点的广播变量,一种是只支持加法操作、可以实现求和的累加变量
11、宽依赖:或称为shuffleDependency,跟hadoop mapreduce中的shuffle的数据依赖相同,宽依赖需要计算好所有父RDD对应分区的数据,任何在节点之间进行shuffle
12、窄依赖:或称为NarrowDependency,指的是某个具体的RDD其分区partition a最多被子RDD中的一个分区partition b依赖,此种情况只有map任务,是不需要发生shuffle过程的,窄依赖又分为1:1和N:1两种
13、DAGScheduler:根据job构建基于stage的DAG,并提交stage给TaskScheduler。其划分stage的依据是根据RDD之间的依赖关系
14、TaskScheduler:将Taskset提交给worker(集群)运行,每个executor运行什么task就是在此处分配的

public final class JavaWordCount {
  private static final Pattern SPACE = Pattern.compile(" ");

  public static void main(String[] args) throws Exception {

    if (args.length < 1) {
      System.err.println("Usage: JavaWordCount <file>");
      System.exit(1);
    }

    SparkConf sparkConf = new SparkConf().setAppName("JavaWordCount"); //运行在driver
    JavaSparkContext ctx = new JavaSparkContext(sparkConf);//运行在driver
    JavaRDD<String> lines = ctx.textFile(args[0], 1);

    JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() {
      @Override
      public Iterable<String> call(String s) {
        return Arrays.asList(SPACE.split(s));
      }
    });

    JavaPairRDD<String, Integer> ones = words.mapToPair(new PairFunction<String, String, Integer>() {
      @Override
      public Tuple2<String, Integer> call(String s) {
        return new Tuple2<String, Integer>(s, 1);
      }
    });

    JavaPairRDD<String, Integer> counts = ones.reduceByKey(new Function2<Integer, Integer, Integer>() {
      @Override
      public Integer call(Integer i1, Integer i2) {
        return i1 + i2;
      }
    });

    List<Tuple2<String, Integer>> output = counts.collect();
    for (Tuple2<?,?> tuple : output) {
      System.out.println(tuple._1() + ": " + tuple._2());
    }
    ctx.stop();//运行在driver
  }
}

关于driver和executor,下面以spark的example包自带的wordcount例子为例进行说明
其中,注释的,都属于driver,运行在driver端,其他的部分属于executor,运行在每个executorBackend进程中,counts.collect()的collect方法是spark中的action操作,负责job的触发,而reduceByKey属于transformation操作

版权声明:本文为博主原创文章,未经博主允许不得转载。

Spark核心概念理解

本来主要内容来自己《Hadoop权威指南》英文版中的Spark章节,可以说是个人的翻译版本,涵盖了主要的Spark概念。安装Spark首先从spark官网下载稳定的二进制分发版本,注意与你安装的Had...
  • bingduanlbd
  • bingduanlbd
  • 2016年07月26日 00:30
  • 4306

Spark的运行架构分析(二)之运行模式详解

在上一篇博客  spark的运行架构分析(一)中我们有谈到Spark的运行模式是多种多样的,那么在这篇博客中我们来具体谈谈Spark的运行模式...
  • Gamer_gyt
  • Gamer_gyt
  • 2016年07月05日 19:34
  • 5926

spark的三种模式的详细运行过程

一、Standalone模式 1、使用SparkSubmit提交任务的时候(包括Eclipse或者其它开发工具使用new SparkConf()来运行任务的时候),Driver运行在Client;使用...
  • do_what_you_can_do
  • do_what_you_can_do
  • 2016年11月11日 14:31
  • 2852

Spark的四种运行模式(1.2.1)

转载:http://blog.cheyo.net/29.html 介绍 本地模式 Spark单机运行,一般用于开发测试。 Standalone模式 ...
  • zhangxinrun
  • zhangxinrun
  • 2017年01月18日 18:25
  • 2696

Intellij IDEA开发(local模式)提交运行Spark代码

这里我来说一下Intellij IDEA(local模式) 如何在windows上运行spark Pi的程序: 1 首先下载Intellij IDEA 地址: https://www.jetbr...
  • u012429555
  • u012429555
  • 2016年05月02日 21:20
  • 4617

Spark运行模式及原理(一)

Spark的运行模式多种多样,灵活多变,部署在单机上时,既可以用本地模式运行,也可以用伪分布式模式运行;而当以分布式集群的方式部署时,也有众多的运行模式可供选择,这取决于集群的实际情况,底层的资源调度...
  • shisibushiba
  • shisibushiba
  • 2016年03月19日 19:47
  • 1090

Spark集群模式&Spark程序提交

Spark集群模式&Spark程序提交 1. 集群管理器 Spark当前支持三种集群管理方式   Standalone—Spark自带的一种集群管理方式,易于构建集群。   Apache Me...
  • lsshlsw
  • lsshlsw
  • 2014年10月19日 22:02
  • 9607

Spark internal - 多样化的运行模式(上)

Spark的运行模式多种多样,在单机上既可以以本地模式运行,也可以以伪分布式模式运行。而当以分布式的方式运行在Cluster集群中时,底层的资源调度可以使用Mesos 或者是Hadoop Yarn ,...
  • colorant
  • colorant
  • 2014年01月20日 10:43
  • 16347

spark 本地调试运行WordCount(java版local模式)

spark java版本地(local模式)运行词频统计,WordCount
  • xsdxs
  • xsdxs
  • 2016年08月14日 12:29
  • 6383

Spark on Yarn的运行原理

一、YARN是集群的资源管理系统 1、ResourceManager:负责整个集群的资源管理和分配。 2、ApplicationMaster:YARN中每个Application对应一个AM进程,负责...
  • u013573813
  • u013573813
  • 2017年04月09日 17:52
  • 1171
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:spark运行模式一些概念
举报原因:
原因补充:

(最多只允许输入30个字)