• 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了。

  • 相关阅读:
    C++ 将对象写入文件 并读取
    IronPython fail to add reference to WebDriver.dll
    How to Capture and Decrypt Lync Server 2010 TLS Traffic Using Microsoft Tools
    .net code injection
    数学系学生应该知道的十个学术网站
    Difference Between Currency Swap and FX Swap
    Swift开源parser
    谈谈我对证券公司一些部门的理解(前、中、后台)[z]
    JDK8记FullGC时候Metaspace内存不会被垃圾回收
    JVM源码分析之JDK8下的僵尸(无法回收)类加载器[z]
  • 原文地址:https://www.cnblogs.com/jingblogs/p/5716139.html
Copyright © 2020-2023  润新知