zoukankan      html  css  js  c++  java
  • Spark On Yarn搭建及各运行模式说明

      之前记录Yarn:Hadoop2.0之YARN组件,这次使用Docker搭建Spark On  Yarn

    一、各运行模式

    1、单机模式

      该模式被称为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)这是和其他模式的区别。

    2、伪集群模式

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

      指令实例:

        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的各服务)。

    3、集群模式1---spark自带的Cluster Manager的Standalone client模式

      和单机运行模式不同,这里必须在执行应用程序前,先启动Spark的Master和Worker守护进程。不用启动Hadoop服务,除非必须用到。然后在想要作为Master的节点上用start-all.sh来启动即可。这样运行模式,可以使用spark的8080 web ui来观察资源和应用程序的执行情况

      指令实例:

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

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

      产生的进程

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

        ②SparkSubmit作为client端和运行Driver程序

        ③CoarseGrainedExecutorBackend用来并发执行程序

    4、集群模式2---spark自带的Cluster Manager的standalone cluster模式

      指令实例:

        spark-submit --master spark://spark01:6066 --deploy-mode cluster

      与第三种模式的区别

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

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

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

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

    5、集群模式3---基于Yarn的ResourceManager的Client模式

      现在越来越多的场景,都是Spark跑在Hadoop集群中,所以为了做到资源能够均衡调度,会使用Yarn来作为Spark的Cluster的Manager,来为Spark的应用程序分配资源。在执行Spark应用程序之前,要启动Hadoop的各个服务。由于已经有了资源管理器,所以不需要启动Spark的Master、Work守护进程。

      指令实例:

        ①spark-shell --master yarn

        ②spark-shell --master yarn --deploy-mode client

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

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

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

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

    6、集群模式4----基于Yarn的ResourceManager的Cluster模式

      指令实例

        ①spark-shell --master yarn --deploy-mode client

      和第5种的区别如下

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

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

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

    7、Spark On Mesos模式

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

    二、Spark On Yarn

      官方说明:http://spark.apache.org/docs/latest/running-on-yarn.htmlhttp://spark.apache.org/docs/latest/submitting-applications.html

    1、图解说明

      

       Spark On Yarn模式:Spark集群的资源管理器不是由Master(Cluster Manager)来管理,而是由Yarn的ResourceManager来管理,而Spark的任务调度依然是由SparkContext来调度。

    2、环境搭建

      本地搭建还是基于之前的环境:使用Docker搭建Spark集群(用于实现网站流量实时分析模块),基于以上6个容器的Zookeeper集群、hadoop集群等环境来搭建。

      Spark on YARN运行模式,只需要在Hadoop分布式集群中任选一个节点安装配置Spark即可,不要集群安装。因为Spark应用程序提交到YARN后,YARN会负责集群资源的调度,任选一个hadoop容器来安装spark即可。

    1、启动Zookeeper集群

     

     2、启动hadoop集群

     3、hadoop0容器安装配置spark,拷贝编辑spark-env.sh

     4、启动测试

      spark的bin目录执行命令:./spark-shell --master yarn --deploy-mode client

     5、Yarn Web界面

    可以看到Spark shell应用程序正在运行,单击ID号链接,可以看到该应用程序的详细信息。

     

    3、问题解决

      如果是用虚拟机搭建,可能会由于虚拟机内存过小而导致启动失败,比如内存资源过小,yarn会直接kill掉进程导致rpc连接失败。所以,我们还需要配置Hadoop的yarn-site.xml文件,加入如下两项配置:

     编辑yarn-site.xml添加如下内容即可

    <property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
    </property>
    
    <property>
    <name>yarn.nodemanager.pmem-check-enabled</name>
    <value>false</value>
    </property>

       如有问题,欢迎指正交流~~~~

  • 相关阅读:
    【Python3网络爬虫开发实战】 1-开发环境配置
    Elasticsearch 基本介绍及其与 Python 的对接实现
    深度学习 GPU环境 Ubuntu 16.04 + Nvidia GTX 1080 + Python 3.6 + CUDA 9.
    React组件方法中为什么要绑定this
    中级前端开发推荐书籍
    20万行代码,搞得定不?
    华为云数据库TaurusDB性能挑战赛,50万奖金等你来拿!
    00036_private
    使用spring等框架的web程序在Tomcat下的启动顺序及思路理清
    http304状态码缓存设置问题
  • 原文地址:https://www.cnblogs.com/rmxd/p/12273395.html
Copyright © 2011-2022 走看看