• Spark各运行模式详解


    一、测试或实验性质的本地运行模式 (单机)

    该模式被称为Local[N]模式,是用单机的多个线程来模拟Spark分布式计算,通常用来验证开发出来的应用程序逻辑上有没有问题。

    其中N代表可以使用N个线程,每个线程拥有一个core。如果不指定N,则默认是1个线程(该线程有1个core)。

       

    指令示例:

       

    1)spark-shell --master local 效果是一样的

    2)spark-shell --master local[4] 代表会有4个线程(每个线程一个core)来并发执行应用程序。

       

    运行该模式非常简单,只需要把Spark的安装包解压后,改一些常用的配置即可使用,而不用启动Spark的Master、Worker守护进程( 只有集群的Standalone方式时,才需要这两个角色),也不用启动Hadoop的各服务(除非你要用到HDFS),这是和其他模式的区别,要记住才能理解。

       

       

    二、测试或实验性质的本地伪集群运行模式(单机模拟集群)

    这种运行模式,和Local[N]很像,不同的是,它会在单机启动多个进程来模拟集群下的分布式场景,而不像Local[N]这种多个线程只能在一个进程下委屈求全的共享资源。通常也是用来验证开发出来的应用程序逻辑上有没有问题,或者想使用Spark的计算框架而没有太多资源。

       

    指令示例:

       

    1)spark-shell --master local-cluster[2, 3, 1024]

       

    用法是:提交应用程序时使用local-cluster[x,y,z]参数:x代表要生成的executor数,y和z分别代表每个executor所拥有的core和memory数。

       

    上面这条命令代表会使用2个executor进程,每个进程分配3个core和1G的内存,来运行应用程序。

       

    该模式依然非常简单,只需要把Spark的安装包解压后,改一些常用的配置即可使用。而不用启动Spark的Master、Worker守护进程( 只有集群的standalone方式时,才需要这两个角色),也不用启动Hadoop的各服务(除非你要用到HDFS),这是和其他模式的区别哦,要记住才能理解。

       

       

    三、Spark自带Cluster ManagerStandalone Client模式(集群)

       

    和单机运行的模式不同,这里必须在执行应用程序前,先启动Spark的Master和Worker守护进程。不用启动Hadoop服务,除非你用到了HDFS的内容。

       

    可以在想要做为Master的节点上用start-all.sh一条命令即可

       

    这种运行模式,可以使用Spark的8080 web ui来观察资源和应用程序的执行情况了。

       

    用如下命令提交应用程序

    指令示例:

    1)spark-shell --master spark://wl1:7077

    或者

    2)spark-shell --master spark://wl1:7077 --deploy-mode client

       

    产生的进程:

    ①Master进程做为cluster manager,用来对应用程序申请的资源进行管理

    ②SparkSubmit 做为Client端和运行driver程序

    ③CoarseGrainedExecutorBackend 用来并发执行应用程序

       

    四、spark自带cluster managerstandalone cluster模式(集群)

       

    这种运行模式和上面第3个还是有很大的区别的。使用如下命令执行应用程序

    指令示例:

    1)spark-submit --master spark://wl1:6066 --deploy-mode cluster

       

    第四种模式和第三种模型的区别:

    ①客户端的SparkSubmit进程会在应用程序提交给集群之后就退出

    ②Master会在集群中选择一个Worker进程生成一个子进程DriverWrapper来启动driver程序

    ③而该DriverWrapper 进程会占用Worker进程的一个core,所以同样的资源下配置下,会比第3种运行模式,少用1个core来参与计算

    ④应用程序的结果,会在执行driver程序的节点的stdout中输出,而不是打印在屏幕上

       

    五、基于YARNResource ManagerClient模式(集群)

    现在越来越多的场景,都是Spark跑在Hadoop集群中,所以为了做到资源能够均衡调度,会使用YARN来做为Spark的Cluster Manager,来为Spark的应用程序分配资源。

       

    在执行Spark应用程序前,要启动Hadoop的各种服务。由于已经有了资源管理器,所以不需要启动Spark的Master、Worker守护进程。

       

    使用如下命令执行应用程序

    指令示例:

    1)spark-shell --master yarn 

    或者

    2)spark-shell --master yarn --deploy-mode client

       

    提交应用程序后,各节点会启动相关的JVM进程,如下:

    ①在Resource Manager节点上提交应用程序,会生成SparkSubmit进程,该进程会执行driver程序。

    ②RM会在集群中的某个NodeManager上,启动一个ExecutorLauncher进程,来做为ApplicationMaster。

    ③另外,RM也会在多个NodeManager上生成CoarseGrainedExecutorBackend进程来并发的执行应用程序。

       

    六、基于YARNResource ManagerCuster模式(集群)

    使用如下命令执行应用程序

    指令示例:

    1)spark-shell --master yarn --deploy-mode cluster

       

    和第5种运行模式,区别如下:

    ①在Resource Manager端提交应用程序,会生成SparkSubmit进程,该进程只用来做Client端,应用程序提交给集群后,就会删除该进程。

    ②Resource Manager在集群中的某个NodeManager上运行ApplicationMaster,该AM同时会执行driver程序。紧接着,会在各NodeManager上运行CoarseGrainedExecutorBackend来并发执行应用程序。

    ③应用程序的结果,会在执行driver程序的节点的stdout中输出,而不是打印在屏幕上。

       

       

    此外,还有Spark On Mesos模式,对这部分感兴趣的同学自行查询了解。可以参阅:

    http://ifeve.com/spark-mesos-spark/

       

  • 相关阅读:
    17ES6 Symbol的内置属性
    08ES6 箭头函数以及声明特点
    12ES6 rest参数
    15ES6 Symbol的介绍与创建
    js函数arguments的运用简单实例
    10ES6 箭头函数的实践与应用场景
    18ES6 迭代器
    11ES6 函数参数的默认值设置
    14ES6 扩展运算符的应用
    CSharp: Strategy Pattern in donet core 3
  • 原文地址:https://www.cnblogs.com/shuzhiwei/p/11077624.html
Copyright © 2020-2023  润新知