zoukankan      html  css  js  c++  java
  • Spark——几种运行模式与作业提交

    Spark-shell 参数

    • Spark-shell 是以一种交互式命令行方式将Spark应用程序跑在指定模式上,也可以通过Spark-submit提交指定运用程序,Spark-shell 底层调用的是Spark-submit,二者的使用参数一致的,通过- -help 查看参数:

      • -master: 指定运行模式,spark://host:port, mesos://host:port, yarn, or local[n].
      • -deploy-mode: 指定将driver端运行在client 还是在cluster.
      • -class: 指定运行程序main方法类名,一般是应用程序的包名+类名
      • -name: 运用程序名称
      • -jars: 需要在driver端和executor端运行的jar,如mysql驱动包
      • -packages: maven管理的项目坐标GAV,多个以逗号分隔
      • -conf: 以key=value的形式传入sparkconf参数,所传入的参数必须是以spark.开头
      • -properties-file: 指定新的conf文件,默认使用spark-default.conf
      • -driver-memory: 指定driver端运行内存,默认1G
      • -driver-cores:指定driver端cpu数量,默认1,仅在Standalone和Yarn的cluster模式下
      • -executor-memory:指定executor端的内存,默认1G
      • -total-executor-cores:所有executor使用的cores
      • -executor-cores: 每个executor使用的cores
      • -driver-class-path: driver端的classpath
      • -executor-class-path: executor端的classpath
      • --num-executors 10:executor数量
    • sparkconf的传入有三种方式:

      • 1.通过在spark应用程序开发的时候用set()方法进行指定
      • 2.通过在spark应用程序提交的时候用过以上参数指定,一般使用此种方式,因为使用较为灵活
      • 3.通过配置spark-default.conf,spark-env.sh文件进行指定,此种方式较shell方式级别低

    一、Local

    Local 模式是最简单的一种Spark运行方式,它采用单节点多线程(cpu)方式运行,local模式是一种OOTB(开箱即用)的方式,只需要在spark-env.sh导出JAVA_HOME。

    不用启动Spark的Master、Worker守护进程,也不用启动Hadoop的各服务(除非你要用到HDFS),无需其他任何配置即可使用,因而常用于开发和学习。

    ./bin/spark-submit 
      --class org.apache.spark.examples.SparkPi 
      --master local[8] 
      /path/to/examples.jar 
      100

    注:local[8]:代表线程数。

    二、Standalone

    Spark独立群集模式。Spark可以通过部署与Yarn的架构类似的框架来提供自己的集群模式,该集群模式的架构设计与HDFS和Yarn大相径庭。

    该模式需要在每个机器上部署spark,然后启动spark集群,分为master和worker节点。不用启动Hadoop服务(除非你用到了HDFS的内容)。

    这种运行模式,可以使用Spark的 http://spark1:8080 来观察资源和应用程序的执行情况。

    配置

    通过配置spark-env.sh和slaves文件来部署,可以通过以下配置:

    vi conf/spark-env.sh
    SPARK_MASTER_HOST=192.168.137.200 ##配置Master节点
    SPARK_WORKER_CORES=2 ##配置应用程序允许使用的核数(默认是所有的core)
    SPARK_WORKER_MEMORY=2g  ##配置应用程序允许使用的内存(默认是1G)
    vi conf/slaves 192.168.137.200 192.168.137.201 192.168.137.202

    启动集群:

    sbin/start-all.sh

    Web UI:

    192.168.137.200:8080

    on Standalone的俩种模式

    1、Standalone的俩种模式:一种为 client,一种为 cluster,可以通过 --deploy-mode 进行指定。

    • client

    以客户端模式在Spark独立群集上运行:

    # Run on a Spark standalone cluster in client deploy mode
    ./bin/spark-submit 
      --class org.apache.spark.examples.SparkPi 
      --master spark://207.184.161.138:7077 
    --deploy-mode client
    --executor-memory 20G
    --total-executor-cores 100
    /path/to/examples.jar
    1000

    产生的进程:

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

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

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

    • cluster

    以集群模式在Spark独立群集上运行,并使用supervisor:

    # Run on a Spark standalone cluster in cluster deploy mode with supervise
    ./bin/spark-submit 
      --class org.apache.spark.examples.SparkPi 
      --master spark://207.184.161.138:7077 
      --deploy-mode cluster 
      --supervise 
      --executor-memory 20G 
      --total-executor-cores 100 
      /path/to/examples.jar 
      1000

    2、Standalone俩种模式的区别:

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

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

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

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

    三、Yarn

    现在越来越多的场景,都是Spark跑在Hadoop集群中,建议在生产上使用该模式,统一使用YARN对整个集群作业(MR/Spark)的资源均衡调度。

    Spark 通过客户端,负责提交作业到yarn上运行(首先需要启动Yarn集群)。这个不需要Spark集群(只需要在Hadoop分布式集群中任选一个节点安装配置Spark即可),

    但要启动Hadoop的各种服务,这里包括 YARN 和 HDFS 都需要启动,因为在计算过程中 Spark 会使用 HDFS 存储临时文件,如果 HDFS 没有启动,则会抛出异常。

    将Spark应用程序跑在Yarn集群之上,通过Yarn资源调度将executor启动在container中,从而完成driver端分发给executor的各个任务。

    这种运行模式,可以使用Yarn的 http://hadoop001:8088/cluster 来观察资源和应用程序的执行情况。

    配置

    提交作业之前需要将HADOOP_CONF_DIR或YARN_CONF_DIR配置到spark-env.sh中:

    vi conf/spark-env.sh
    HADOOP_CONF_DIR=/opt/software/hadoop-2.6.0-cdh5.7.0/etc/hadoop

    on Yarn的俩种模式

    1、Yarn的俩种模式:一种为 client,一种为 cluster可以通过 --deploy-mode 进行指定。

    • client

      • Driver运行在Client端;
      • Client请求Container完成作业调度执行,Client不能退出;
      • 日志在Client控制台输出,方便查看;

    以客户端模式在Yarn集群上运行:

    export HADOOP_CONF_DIR=XXX
    ./bin/spark-submit 
      --class org.apache.spark.examples.SparkPi 
      --master yarn 
      --deploy-mode client   
    --executor-memory 20G --num-executors 50 /path/to/examples.jar 1000

    产生的进程:

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

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

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

    • cluster

      • 在Resource Manager端提交应用程序,会生成SparkSubmit进程,该进程只用来做Client端,应用程序提交给集群后,就会删除该进程(就可以关掉?)
      • Resource Manager在集群中的某个NodeManager上运行ApplicationMaster,该AM同时会执行driver程序。紧接着,会在各NodeManager上运行CoarseGrainedExecutorBackend来并发执行应用程序
      • 应用程序的结果,会在执行driver程序(即ApplicationMaster)的节点的stdout中输出,也可通过 yarn logs -applicationId <application_id> 查看

    以集群模式在Yarn集群上运行:

    export HADOOP_CONF_DIR=XXX
    ./bin/spark-submit 
      --class org.apache.spark.examples.SparkPi 
      --master yarn 
      --deploy-mode cluster   
    --executor-memory 20G --num-executors 50 /path/to/examples.jar 1000

    2、Yarn俩种模式的区别:

      ①. 在于driver端启动在本地(client),还是在Yarn集群内部的AM中(cluster)。

      ②. client提交作业的进程是不能停止的,否则作业就挂了;cluster提交作业后就断开了,因为driver运行在AM中。

      ③. client提交的作业,日志在客户端看不到,因为作业运行在yarn上,可以通过 yarn logs -applicationId <application_id> 查看。

      ④. Cluster适合生产环境,Client适合交互和调试。

    四、Mesos

    # Run on a Mesos cluster in cluster deploy mode with supervise
    ./bin/spark-submit 
      --class org.apache.spark.examples.SparkPi 
      --master mesos://207.184.161.138:7077 
      --deploy-mode cluster 
      --supervise 
      --executor-memory 20G 
      --total-executor-cores 100 
      http://path/to/examples.jar 
      1000

     具体参见:http://spark.apache.org/docs/latest/running-on-mesos.html

    五、Kuberneters

    # Run on a Kubernetes cluster in cluster deploy mode
    ./bin/spark-submit 
      --class org.apache.spark.examples.SparkPi 
      --master k8s://xx.yy.zz.ww:443 
      --deploy-mode cluster 
      --executor-memory 20G 
      --num-executors 50 
      http://path/to/examples.jar 
      1000

     具体参见:http://spark.apache.org/docs/latest/running-on-kubernetes.html

    六、总结

    这几种分布式部署方式各有利弊,通常需要根据实际情况决定采用哪种方案。进行方案选择时,往往要考虑公司的技术路线(采用Hadoop生态系统还是其他生态系统)、相关技术人才储备等。

    • 如果你只是测试Spark Application,你可以选择Local模式。
    • 如果你数据量不是很多,属于小规模计算集群,Standalone 是个不错的选择。
    • 当你需要统一管理集群资源(Hadoop、Spark等),那么你可以选择Yarn或者Mesos,但是这样维护成本就会变高。  

    引用:

  • 相关阅读:
    一、计算机网络概述
    一些早期的sftp在openssh升级到 openssh7可能闪断解法
    ssh: error while loading shared libraries: libcrypto.so.1.0.0
    PHP Warning: imagettftext(): Problem loading glyph in
    compile pcre on vs2008
    《祝总骧312经络锻炼法》
    神秘的经络
    益嗅上清汤
    鼻病 《仁术便览》
    鼻(附嚏)《医述》
  • 原文地址:https://www.cnblogs.com/caoweixiong/p/13398775.html
Copyright © 2011-2022 走看看