• Spark部署三种方式介绍:YARN模式、Standalone模式、HA模式


    参考自:Spark部署三种方式介绍:YARN模式、Standalone模式、HA模式
    http://www.aboutyun.com/forum.php?mod=viewthread&tid=7115
    (出处: about云开发)


    1.Yarn模式由谁来作为客户端提交作业给YARN?

    2.SPARK_HADOOP_VERSION=2.2.0 SPARK_YARN=true ./sbt/sbt assembly的作用是什么?

    3.Standalone 模式dist目录的作用是什么?

    4.recoveryDirectory最好是能够使用一个nfs的原因是什么?

    Spark的部署让人有点儿困惑,有些需要注意的事项,本来我已经装成功了YARN模式的,但是发现了一些问题,出现错误看日志信息,完全看不懂那个错误信息,所以才打算翻译Standalone的部署的文章。第一部分,我先说一下YARN模式的部署方法。第二部分才是Standalone的方式。

    我们首先看一下Spark的结构图,和hadoop的差不多。

    1.YARN模式

    采用Yarn模式的话,其实就是把spark作为一个客户端提交作业给YARN,实际运行程序的是YARN,就不需要部署多个节点,部署一个节点就可以了。

    把从官网下载的压缩包在linux下解压之后,进入它的根目录,没有安装git的,先执行yum install git安装git

    1)运行这个命令: SPARK_HADOOP_VERSION=2.2.0 SPARK_YARN=true ./sbt/sbt assembly

    就等着吧,它会下载很多jar包啥的,这个过程可能会卡死,卡死的就退出之后,重新执行上面的命令。

    2)编辑conf目录下的spark-env.sh(原来的是.template结尾的,cp一份命名为spark-env.sh),添加上HADOOP_CONF_DIR参数

    HADOOP_CONF_DIR=/etc/hadoop/conf

    3)运行一下demo看看,能出结果 Pi is roughly 3.13794

    SPARK_JAR=./assembly/target/scala-2.9.3/spark-assembly_2.9.3-0.8.1-incubating-hadoop2.2.0.jar 
        ./spark-class org.apache.spark.deploy.yarn.Client 
          --jar examples/target/scala-2.9.3/spark-examples-assembly-0.8.1-incubating.jar 
          --class org.apache.spark.examples.SparkPi 
          --args yarn-standalone 
          --num-workers 3 
          --master-memory 1g 
          --worker-memory 1g 
          --worker-cores 1

    2.Standalone模式

    下面我们就讲一下怎么部署Standalone,参考页面是http://spark.incubator.apache.or ... ark-standalone.html

    这里我们要一个干净的环境,刚解压出来的,运行之前的命令的时候不能再用了,会报错的。

    1)打开make-distribution.sh,修改SPARK_HADOOP_VERSION=2.2.0,然后执行./make-distribution.sh, 然后会生成一个dist目录,这个目录就是我们要部署的内容。官方推荐是先把master跑起来,再部署别的节点,大家看看bin目录下面的脚本,和hadoop的差不多的。行,那就先启动master,执行

    ./bin/start-master.sh

    2)部署dist的目录到各个节点,然后通过这个命令来连接master节点

    ./spark-class org.apache.spark.deploy.worker.Worker spark://IP:PORT

    3)然后在主节点查看一下http://localhost:8080 ,查看一下子节点是否在这里,如果在,就说明连接成功了。

    4) 部署成功之后,想要在上面部署程序的话,在执行./spark-shell的时候,要加上MASTER这个参数。

    MASTER=spark://IP:PORT ./spark-shell

    3.High Alailability(高可用)

    Spark采用Standalone模式的话,Spark本身是一个master/slaves的模式,这样就会存在单点问题,Spark采用的是zookeeper作为它的active-standby切换的工具,设置也很简单。一个完整的切换需要1-2分钟的时间,这个时候新提交的作业会受到影响,之前提交到作业不会受到影响。

    在spark-env.sh添加以下设置:

    //设置下面三项JVM参数,具体的设置方式在下面
    //spark.deploy.recoveryMode=ZOOKEEPER
    //spark.deploy.zookeeper.url=192.168.1.100:2181,192.168.1.101:2181
    // /spark是默认的,可以不写
    //spark.deploy.zookeeper.dir=/spark   
    
    export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=hadoop.Master:2181,hadoop.SlaveT1:2181,hadoop.SlaveT2:2181"

    这里就有一个问题了,集群里面有多个master,我们连接的时候,连接谁?用过hbase的都知道是先连接的zookeeper,但是Spark采用的是另外的一种方式,如果我们有多个master的话,实例化SparkContext的话,使用spark://host1:port1,host2:port2这样的地址,这样它会同时注册两个,一个失效了,还有另外一个。

    如果不愿意配置高可用的话,只是想失败的时候,再恢复一下,重新启动的话,那就使用FILESYSTEM的使用,指定一个目录,把当前的各个节点的状态写入到文件系统。

    spark.deploy.recoveryMode=FILESYSTEM
    spark.deploy.recoveryDirectory=/usr/lib/spark/dataDir

    当 stop-master.sh来杀掉master之后,状态没有及时更新,再次启动的时候,会增加一分钟的启动时间来等待原来的连接超时。

    recoveryDirectory最好是能够使用一个nfs,这样一个master失败之后,就可以启动另外一个master了。

  • 相关阅读:
    Scrapy中的反反爬、logging设置、Request参数及POST请求
    scrapy的CrawlSpider类
    利用scrapy爬取腾讯的招聘信息
    scrapy知识补充--scrapy shell 及Spider
    scrapy的一个简单小项目
    scrapy框架介绍及安装
    并发编程--greenlet与gevent
    并发编程--协程
    并发编程--进程池与线程池-练习3
    并发编程--进程池与线程池-练习2
  • 原文地址:https://www.cnblogs.com/jingblogs/p/5716139.html
Copyright © 2020-2023  润新知