你好,游客 登录
背景:
阅读新闻

Spark-2.3各种集群的安装

[日期:2018-08-20] 来源:csdn  作者:一直在跑的乌龟 [字体: ]

准备安排:Spark的HA

Spark会安装在hadoop02,hadoop03,hadoop04,hadoop05上面

注意需要先启动hdfs(必须),在启动yarn(非必须可以使standalone模式)

1.登陆:http://spark.apache.org/downloads.html

    下载符合自己的Spark安装包

2.上传到hadoop02节点

3.解压安装包

[hadoop@hadoop02 ~]$ tar -zxvf spark-2.3.0-bin-hadoop2.7.tgz -C apps/

4.进入安装路径

[hadoop@hadoop02 apps]$ cd spark-2.3.0-bin-hadoop2.7/

5.进入conf文件夹

[hadoop@hadoop02 spark-2.3.0-bin-hadoop2.7]$ cd conf/

6.修改spark-env.sh.template为spark-env.sh

[hadoop@hadoop02 conf]$ mv spark-env.sh.template spark-env.sh

[hadoop@hadoop02 conf]$ vim spark-env.sh

在末尾追加下面的代码(注意是zookeeper的节点名字,观察者hadoop05不用写进去,需要指定java,hadoop集群,yarn集群,spark端口号(默认7077))

export JAVA_HOME=/usr/local/jdk1.8.0_73

export HADOOP_CONF_DIR=/home/hadoop/apps/hadoop-2.7.5/etc/hadoop

export YARN_CONF_DIR=/home/hadoop/apps/hadoop-2.7.5/etc/hadoop

export SPARK_MASTER_PORT=7077

 

export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=hadoop02:2181,hadoop03:2181,hadoop04:2181 -Dspark.deploy.zookeeper.dir=/spark"

 

7.修改slaves.template文件,指定Worker(注意不需要指定Master,在哪里启动哪里就是Master,如需要启动Master作为HA,就在那个节点上start-master.sh)

先重命名

[hadoop@hadoop02 conf]$ mv slaves.template slaves

再修改内容如下

[hadoop@hadoop02 conf]$ vim slaves

把localhost删除并添加

hadoop02

hadoop03

hadoop04

hadoop05

8.分发

[hadoop@hadoop02 apps]$ scp -r spark-2.3.0-bin-hadoop2.7/ hadoop03:$PWD

[hadoop@hadoop02 apps]$ scp -r spark-2.3.0-bin-hadoop2.7/ hadoop04:$PWD

[hadoop@hadoop02 apps]$ scp -r spark-2.3.0-bin-hadoop2.7/ hadoop05:$PWD

9.配置环境变量(注意PATH要在最后,如果PATH在SPARK_HOME的前面会导致找不到命令)

[hadoop@hadoop02 ~]$ vim .bashrc    

追加 export SPARK_HOME=/home/hadoop/apps/spark-2.3.0-bin-hadoop2.7

追加 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SPARK_HOME/bin:$SPARK_HOME/sbin

分发环境变量:

[hadoop@hadoop02 ~]$ scp -r .bashrc hadoop03:$PWD 

[hadoop@hadoop02 ~]$ scp -r .bashrc hadoop04:$PWD

注意我们尽量不要分发环境变量。因为我们hadoop05安装了hive,sqoop,azkaban

刷新环境变量[hadoop@hadoop02 ~]$ source .bashrc

10.启动Spark的三种方式

说明:

启动worker:直接start-all.sh会启动hdfs和yarn的(因为在环境变量中配置了,他们写在了前面所以优先级高)。所以要在/home/hadoop/apps/spark-2.3.0-bin-hadoop2.7/sbin目录下输入 ./start-all.sh才行(输入命令的节点会是Master)。注意./不能省略。如果省略还是先找环境变量中的命令(既是启动hdfs和yarn)

启动masterstart-master.sh

(1)本地运行模式 (单机)(启不启动master和worker都无所谓因为是本地的,只能在当前的节点执行)

该模式运行任务不会提交在集群中,只在本节点执行,与master无关测试效果与(2)相同

spark-shell --master local 

检验执行下下面语句:

sc.textFile("hdfs://myha01/a/wordcount.txt").flatMap(_.split(",")).map((_,1)).reduceByKey(_+_).collect

(2)启动为local[*]模式(单机)(启不启动master和worker都无所谓因为是本地的,只能在当前的节点执行):

该模式运行任务不会提交在集群中,只在本节点执行,与master无关,测试效果与(1)相同

输入spark-shell进入即可

(3)启动为集群模式(spark standalone模式)(必须启动master和worker):

该模式的区别是spark自己给自己调度资源,必须指明ALIVE的master地址,地址不对就报错(不能指定standby的master),不能计算

先要启动master和worker   并找到master     哪个节点是master就指明ALIVE的master地址

[hadoop@hadoop04 ~]$ spark-shell --master spark://hadoop05:7077     (这里hadoop05是master)

hadoop04退出spark-shell --master spark://hadoop05:7077之后,再去master的节点网站去看,如下图

下图是hadoop04运行计算时候的图:

(4)启动为集群模式(spark on yarn模式)(一定别启动master和worker):

该模式是用yarn来调度资源

注意:一定别启动master,否则会卡很久,然后产生问题:hadoop04:4040无法访问,但是可以计算

 

报错原因:内存资源给的过小,yarn直接kill掉进程,则报rpc连接失败、ClosedChannelException等错误。

解决方法:

先停止YARN服务,然后修改yarn-site.xml,增加如下内容

<property>
                <name>yarn.nodemanager.vmem-check-enabled</name>
                <value>false</value>
                <description>Whether virtual memory limits will be enforced for containers</description>
        </property>
        <property>
                <name>yarn.nodemanager.vmem-pmem-ratio</name>
                <value>4</value>
                <description>Ratio between virtual memory to physical memory when setting memory limits for containers</description>

        </property>

将新的yarn-site.xml文件分发到其他Hadoop节点对应的目录下,最后在重新启动YARN

spark-shell --master yarn-client

值得注意的是:hadoop04:4040进不去,自动跳转到下面的数据yarn节点的spark地址,可以看到任务进度

11.有master的情况下检查是否启动成功

http://hadoop02:8080/

jps查看是否有Master 和 Worker进程

11.结束Spark节点和进程

在任意启动Spark的Worker进程的节点上:

进入 cd /home/hadoop/apps/spark-2.3.0-bin-hadoop2.7/sbin

执行 ./stop-all.sh

自己单独启动Master的需要单独的结束

进入 cd /home/hadoop/apps/spark-2.3.0-bin-hadoop2.7/sbin

执行 ./stop-master.sh

 

注意:如果alive的挂了,另一台STANDBY的master切换成alive需要等待二十多秒

12.进入spark-shell及简单测试计算

在有spark的任意节点(这里我们是hadoop02,03,04,05)输入spark-shell

Spark默认是本地模式:

scala> var list =List(1,2,3,4)

    list: List[Int] = List(1, 2, 3, 4)

scala> var rdd=sc.makeRDD(list)

    rdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at makeRDD at <console>:26

scala> rdd.count()
    res0: Long = 4 

13.退出spark-shell

ctrl+d

14.(另一种配置方法,本文未这样做,可以不看)配置spark-defaults.conf.template(把默认的本地模式切换成集群模式)

我们现在hadoop02进行修改再分发给别的节点就行了

cd /home/hadoop/apps/spark-2.3.0-bin-hadoop2.7/conf

复制并且修改名字

[hadoop@hadoop02 conf]$ cp spark-defaults.conf.template spark-defaults.conf

进入修改 vim spark-defaults.conf

spark.master                     spark://hadoop02:7077,hadoop03:7077

配置上述信息后启动要在02或者03同时要在两者中单独启动standby的master进程。

分发给别的节点:

[hadoop@hadoop02 conf]$ scp -r spark-defaults.conf hadoop03:$PWD

[hadoop@hadoop02 conf]$ scp -r spark-defaults.conf hadoop04:$PWD

[hadoop@hadoop02 conf]$ scp -r spark-defaults.conf hadoop05:$PWD

注意:这个的作用目前是:

1.把默认的本地模式换成集群模式

2.不建议配置太多。如果你配置了4个节点,但是启动了2个节点作为master,会报错。但是会正常进入spark-shell

能正常进行计算(目前计算速度较慢),下图为配置了02,03,04,05后只启动02,03作为master的报错。

下图是在02输入的start-all.sh和在03输入的start-master.sh后在05进入的spark-shell后的图。

启动测试:

首先启动zookeeper

然后启动hdfs

最后启动spark集群,在sbin目录下使用./start-all.sh命令,备用节点需要手动启动,命令为start-master.sh

至此高可用集群搭建完毕。

通过测试,主备节点可以顺利切换,任务执行时,主节点挂掉,任务任然可以继续运行

15.(本文未这样配置,可以不看)相关命令

本地运行模式 (单机)(不需要启动master和worker)spark-shell --master local 

上面的测试通过

spark-submit --master local[4] 代表会有4个线程(每个线程一个core)来并发执行应用程序。这种多个线程只能在一个进程下委屈求全的共享资源。

有个问题报错,不知道为什么,计算未通过

本地伪集群运行模式(单机模拟集群)(不需要启动master和worker):spark-shell --master local-cluster[2, 3, 1024]

参数:x代表要生成的executor数,y和z分别代表每个executor所拥有的core和memory数。

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

会遇到default的配置文件master未全启动的问题,并且计算未通过

Spark standalone模式(需要启动master和worker):

Spark on yarn模式(不需要启动master和worker)spark-shell --master yarn 

不清楚什么情况,未配置yarn参数

 

 

Spark集群配置HistoryServer

 

以standalone运行模式为例,在运行Spark Application的时候,Spark会提供一个WEBUI列出应用程序的运行时信息;但该WEBUI随着Application的完成(成功/失败)而关闭,也就是说,Spark Application运行完(成功/失败)后,将无法查看Application的历史记录;

Spark history Server就是为了应对这种情况而产生的,通过配置可以在Application执行的过程中记录下了日志事件信息,那么在Application执行结束后,WEBUI就能重新渲染生成UI界面展现出该Application在执行过程中的运行时信息;

Spark运行在yarn或者mesos之上,通过spark的history server仍然可以重构出一个已经完成的Application的运行时参数信息(假如Application运行的事件日志信息已经记录下来);

1、常规单节点配置

  1. 第一步:  [root@hadoop02 ~]# cd /home/hadoop/apps/spark-2.3.0-bin-hadoop2.7/conf/
  2. cp spark-defaults.conf.template  spark-defaults.conf 
  3. 在文件里面添加如下内容: 
  4.  spark.eventLog.enabled           true 
  5.  spark.eventLog.dir               hdfs://hadoop02:9000/sparklog 
  1. 第二步:
  2. 在spark-evn.sh 的文件里面添加如下内容: 
  3. export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=30 -Dspark.history.fs.logDirectory=hdfs://hadoop02:9000/sparklog" 
  1. 第三步: 
  2.   在启动HistorServer服务之前  hdfs://hadoop02:9000/sparklog  目录要提前创建 
  3.  hadoop fs -mkdir /sparklog
  1. 第四步: 
  2.  start-history-server.sh
  3.  在对应的节点的UI :http://hadoop02:18080即可查看

 

2.HA高可用的配置

 

 

  1. 第一步:  (我们在hadoop02操作)
  2. cp spark-defaults.conf.template  spark-defaults.conf 
  3. 在文件里面添加如下内容: 
  4.  spark.eventLog.enabled           true 
  5.  spark.eventLog.dir               hdfs://myha01/sparklog
  6. 其中myha01是dfs-site.xml和nameservice的配置名字

 

  1. 第二步-修改文件
  2. 在spark-evn.sh 的文件里面添加如下内容: 
  3. export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.re 
  4. tainedApplications=30 -Dspark.history.fs.logDirectory=hdfs://myha01/sparklog"

 

  1. 第三步-分发配置文件
  2. [hadoop@hadoop02 conf]$ scp -r spark-defaults.conf hadoop03:$PWD
  3. [hadoop@hadoop02 conf]$ scp -r spark-defaults.conf hadoop04:$PWD
  4. [hadoop@hadoop02 conf]$ scp -r spark-defaults.conf hadoop05:$PWD
  5. [hadoop@hadoop02 conf]$ scp -r spark-env.sh hadoop05:$PWD
  6. [hadoop@hadoop02 conf]$ scp -r spark-env.sh hadoop04:$PWD
  7. [hadoop@hadoop02 conf]$ scp -r spark-env.sh hadoop03:$PWD
  1. 第四步-创建目录
  2. 创建sparklog目录 hadoop fs -mkdir /sparklog
  1. 第五步-启动
  2. 在任意节点启动 start-history-server.sh(以hadoop03为例),在对应的节点的UI :http://hadoop03:18080即可查看

抄至——jenrey(原文)

收藏 推荐 打印 | 阅读:
相关新闻       spark ha  spark2.3.0