Spark系列——运行模式(二)standalone模式及其历史服务,HA的配置(详解)

    科技2022-07-11  123

    standalone模式

    00_前提:

    已经安装好java(java1.8.0_241)

    已经安装好hadoop(hadoop2.10.0)

    01_介绍

    我们要构建一个由Master+Slave构成的Spark集群,而Spark就运行在集群中。

    02_standalone开始配置

    2.1复制spark,并命名为spark-standalone

    cp -r spark-2.4.0-bin-hadoop2.7 spark-startalone

    2.2进入conf,配置spark-env.sh,确定master

    cd conf for i in .template; do mv ${i} ${i%.}; done vi spark-env.sh SPARK_MASTER_HOST=node1 SPARK_MASTER_PORT=7077

    2.3修改slaves文件,确定worker

    vi slaves node1 node2 node3

    2.4 在sbin/spark-config.sh文件下添加JAVA_HOME

    export JAVA_HOME=/usr/java/jdk1.8.0_241

    2.5配置环境变量

    vi /etc/profile export SPARK_HOME=/usr/hadoop/spark-standalone export PATH=$PATH:$SPARK_HOME/sbin:$SPARK_HOME/bin source /etc/profile

    2.6把spark-standalone分发到集群节点

    scp -r spark-standalone / node2:/usr/hadoop/ scp -r spark-standalone / node3:/usr/hadoop/

    2.7在spark-standalone下启动集群

    sbin/start-all.sh

    2.8 spark的standalone集群基本配置完毕

    ​ 8080端口访问masterUI

    ​ 8081端口访问workeUI

    ​ 4040端口driverUI,还没执行完可以看见,如果需要随时可以看见,需要配置历史服务。

    2.9 例子1——计算Pi

    [root@node1 spark-standalone]# bin/spark-submit \ > --master spark://node1:7077 \ > --class org.apache.spark.examples.SparkPi \ > ./examples/jars/spark-examples_2.11-2.4.0.jar 100

    2.10例子2——shell中wordcount

    [root@node1 spark-standalone]# bin/spark-shell --master spark://node1:7077

    创建一个input目录,写个文件,里面写一些单词,然后在shell里读取,分割,洗牌,统计。和上面local差不多一样。

    03_配置历史服务(通用,个别参数根据自己的修改即可)

    3.1修改spark-default.conf文件

    vi spark-defaults.conf spark.eventLog.enabled true spark.eventLog.dir hdfs://node1:8020/spark-logs

    3.2进入hadoop安装目录后,执行命令:

    bin/hadoop fs -mkdir /spark-logs

    如果不放心该命令是否执行成功,可启动hadoop,访问50070端口对应的界面查看是否生成了该目录。

    http://192.168.223.100:50070/

    3.3修改spark-env.sh文件,添加如下配置

    vi spark-env.sh export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=30 -Dspark.history.fs.logDirectory=hdfs://node1:8020/spark-logs"

    ​ (1) spark.history.ui.port

    ​ 历史服务器的WebUI的端口号,默认为18080,也可以自行设置。

    ​ (2) spark.history.retainedApplications

    ​ 设置缓存Cache中保存的应用程序历史记录的个数,默认50,如果超过这个值,旧的将被从内存中删除。但并不会从Hdfs中删除。

    注:缓存文件数不表示实际显示的文件总数。只是表示不在缓存中的文件可能需要从硬盘读取,速度稍有差别。

    ​ (3) spark.history.fs.logDirectory

    ​ 告诉Spark History Server(Spark历史服务)哪个目录记录着任务的日志信息。如果此时文件中配置了该选项,则稍后在启动Spark History Server 时就不必再指定具体目录了。目录可以是Hadoop APIs支持的任意文件系统。

    3.4把修改的文件分发给其他虚拟机

    scp spark-defaults.conf node2:/usr/hadoop/spark-standalone/conf/ scp spark-defaults.conf node3:/usr/hadoop/spark-standalone/conf/ scp spark-env.sh node2:/usr/hadoop/spark-standalone/conf/ scp spark-env.sh node3:/usr/hadoop/spark-standalone/conf/

    3.5启动并查看Spark历史服务

    start-dfs.sh sbin/start-all.sh sbin/start-history-server.sh jps http://192.168.223.100:18080/

    3.6执行一个小任务

    bin/spark-submit \ --master spark://node1:7077 \ --deploy-mode cluster \ --class org.apache.spark.examples.SparkPi \ ./examples/jars/spark-examples_2.11-2.4.0.jar 10000

    04_master-HA

    4.1高可用原理

    Standalone集群只有一个Master,如果Master挂了就无法提交应用程序,即存在单点故障的问题。需要给Master进行高可用配置,Master的高可用可以使用fileSystem(文件系统)和zookeeper(分布式协调服务)。

    (1)基于文件系统的单点恢复—只用于开发或测试环境

    fileSystem只有存储功能,可以存储Master的元数据信息,用fileSystem搭建的Master高可用,在Master失败时,需要我们手动启动另外的备用Master,这种方式不推荐使用。

    (2)基于zookeeper的Standby Masters—可用于生产环境

    zookeeper有选举和存储功能,可以存储Master的元素据信息,使用zookeeper搭建的Master高可用,当Master挂掉时,备用的Master会自动切换,推荐使用这种方式搭建Master的HA。为了使选举没有争议,要奇数个节点。

    4.2配置HA

    该HA方案使用起来很简单,首先启动一个ZooKeeper集群,然后在不同节点上启动Master,注意这些节点需要具有相同的zookeeper配置。

    4.2.1修改spark-env.sh 文件

    vi spark-env.sh #SPARK_MASTER_HOST=node1 #SPARK_MASTER_PORT=7077 export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=30 -Dspark.history.fs.logDirectory=hdfs://node1:8020/spark-logs" export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node1:2181,node2:2181,node3:2181 -Dspark.deploy.zookeeper.dir=/spark-nodes"

    ​ spark.deploy.recoveryMode:恢复模式 ​ spark.deploy.zookeeper.url:ZooKeeper的Server地址 ​ spark.deploy.zookeeper.dir:保存集群元数据信息的文件、目录。包括 Worker、Driver、Application信息。

    4.2.2分发上面这个配置文件

    scp spark-env.sh node2:/usr/hadoop/spark-standalone/conf/ scp spark-env.sh node3:/usr/hadoop/spark-standalone/conf/

    4.2.3启动spark服务

    start-dfs.sh start-yarn.sh sbin/start-all.sh sbin/start-history-server.sh zkServer.sh start sbin/start-master.sh

    4.3查看服务

    ​ 访问master的spark管理界面是活跃的,而另一台master是待定的,假如第一台宕机,zookeeper安排第二台走马上任。

    http://192.168.223.100:8080/ http://192.168.223.101:8080/

    4.4 测试HA

    测试主备切换

    在第一台master上使用jps查看master进程id使用kill -9 id号强制结束该进程稍等片刻后刷新第二台master的web界面发现第二台master为Alive

    4.5执行小任务

    4.5.1词频统计

    bin/spark-shell --master spark://node1:7077,node2:7077,node3:7077

    后面的同local下那个类似,如有疑问,参考另一篇spark系列——运行模式1:local模式配置

    4.5.2例子计算

    bin/spark-submit \ > --master spark://node1:7077,node2:7077,node3:7077 \ > --deploy-mode client \ > --class org.apache.spark.examples.SparkPi \ > ./examples/jars/spark-examples_2.11-2.4.0.jar 100

    4.5.3例子计算

    bin/run-example --master spark://node1:7077,node2:7077,node3:7077 SparkPi

    注:例子是自带的

    Processed: 0.020, SQL: 8