云服务器搭建Spark集群

文章目录

    • 1. Local 模式
      • 1.1 安装local模式
      • 1.2 命令行工具
      • 1.3 提交本地应用
    • 2. Standlone模式
      • 2.1 集群配置
      • 2.2 修改配置文件
      • 2.3 启动集群与停止集群
      • 2.4 提交应用到集群环境
      • 2.5 提交应用的参数详细说明
      • 2.6 配置历史服务
      • 2.7 配置高可用(HA)
    • 3. Yarn模式(常用)
      • 3.1 集群配置
      • 3.2 安装Yarn模式
      • 3.3 配置历史服务器
      • 3.4 关于配置高可用的相关说明|
      • 3.5 停止集群

1. Local 模式

1.1 安装local模式

  • 即解压spark-3.0.0-bin-hadoop3.2.tgz 文件到/opt/moudle/路径下,并改名为spark-local

    [gaochuchu@s1 jvm]$ cd /opt/module/spark-local/
    [gaochuchu@s1 spark-local]$ bin/spark-shell 
    
    • 此时出现如下界面说明local环境启动成功

      云服务器搭建Spark集群_第1张图片

    • 启动后,可以通过http://虚拟机地址:4040访问Web UI监控界面

      云服务器搭建Spark集群_第2张图片

1.2 命令行工具

  • 命令行工具

    • 在/opt/module/spark-local/data的目录下,添加一个word.txt文件。通过如下的命令执行单词统计程序

      image-20231028152309081

    • 退出local模式

      scala> :quit
      

1.3 提交本地应用

  • 提交本地的示例应用

    bin/spark-submit \
    --class org.apache.spark.examples.SparkPi \
    --master local[2] \
    ./examples/jars/spark-examples_2.12-3.0.0.jar \
    10
    

    • –class 表示要执行程序的主类,此处可以更换为咱们自己写的应用程序
    • -master local[2] 部署模式,默认为本地模式,数字表示分配的虚拟 CPU 核数量
    • spark-examples_2.12-3.0.0.jar 运行的应用类所在的 jar 包,实际使用时,可以设置为自己打的 jar 包
    • 数字 10 表示程序的入口参数,用于设定当前应用的任务数量

2. Standlone模式

  • Local模式只适合进行练习,真实工作中还是要将应用提交到对应的集群中去执行,StandLione模式,只使用Spark自身节点运行的集群模式
  • 其特点为经典的master-slaver模式
  • 即解压spark-3.0.0-bin-hadoop3.2.tgz 文件到/opt/moudle/路径下,并改名为spark-standlone

2.1 集群配置

s1 s2 s3 s4 gracal
Spark Worker Master Worker Worker Worker Worker

2.2 修改配置文件

  • 修改slaves配置文件

    #进入spark-standline的conf目录
    [gaochuchu@s1 ~]$ cd /opt/module/spark-standalone/conf/
    #重命名
    [gaochuchu@s1 conf]$ mv slaves.template slaves
    #修改slaves文件,添加worker节点
    [gaochuchu@s1 conf]$ vim slaves
    s1
    s2
    s3
    s4
    gracal
    
  • 环境变量配置文件spark-env.sh.tmpate 改名为spark-env.sh,并增加环境变量

    #重命名
    [gaochuchu@s1 conf]$ mv spark-env.sh.template spark-env.sh
    #修改配置文件
    [gaochuchu@s1 conf]$ vim spark-env.sh
    #这里配置的是本服务器的java home的位置
    export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.382.b05-1.el7_9.x86_64
    SPARK_MASTER_HOST=s1
    SPARK_MASTER_PORT=7077
    

    这里的7077端口,相当于hadoop集群中内部通信的8020端口

  • 分发spark-standalone目录

    xsync spark-standalone
    

2.3 启动集群与停止集群

  • 执行脚本启动集群

    gaochuchu@s1 spark-standalone]$ sbin/start-all.sh
    
  • 查看集群运行状态:可以知道s1为master,而其余节点为worker节点

    云服务器搭建Spark集群_第3张图片

  • 执行脚本停止集群

    gaochuchu@s1 spark-standalone]$ sbin/stop-all.sh
    

2.4 提交应用到集群环境

  • 提交应用到集群环境

    bin/spark-submit \
    --class org.apache.spark.examples.SparkPi \
    --master spark://s1:7077 \
    ./examples/jars/spark-examples_2.12-3.0.0.jar \
    10
    
    • 出现如下界面,说明应用执行完成,成功得到Pi的值

      注意:

      • –class 表示要执行程序的主类
      • –master spark://s1:7077 独立部署模式,连接到 Spark 集群
      • spark-examples_2.12-3.0.0.jar 运行类所在的 jar 包
      • 数字 10 表示程序的入口参数,用于设定当前应用的任务数量
  • Standalone模式之下,会产生多个java进程

    • SparkSubmit是提交节点的进程

    • CoarseGrainedExecutorBackend是执行节点的进程

      云服务器搭建Spark集群_第4张图片
  • 执行任务时,在master的Web UI界面,可以看到节点的内存,以及服务器集群节点的总核数

    image-20231028162132075

2.5 提交应用的参数详细说明

参数 解释 可选值举例
–class Spark 程序中包含主函数的类
–master Spark 程序运行的模式(环境) 模式:local[*]、spark://s1:7077、Yarn
–executor-memory 1G 指定每个 executor 可用内存为 1G
–total-executor-cores 2 指定所有executor使用的cpu核数为2个
–executor-cores 指定每个executor使用的cpu核数 其值=total-excutor-cores/ num-executors
application-jar 打包好的应用 jar,包含依赖。这个URL在集群全局可见。
比如 hdfs:// 共享存储系统,如果是flie://path,那么所有的节点
都包含相同的jar
application-arguments 传给main()方法的参数 如上述的数字10,说明num-executors为10

2.6 配置历史服务

  • 由于spark-shell停止后,集群监控s1:4040页面都看不到历史任务的运行情况,所以开发的时都配置历史服务器记录任务运行情况

    • 修改spark-default.conf.template 文件为spark-default.conf,并配置日志存储路径
    # 修改文件名
    [gaochuchu@s1 conf]$ mv spark-defaults.conf.template spark-defaults.conf
    #配置日志存储路径
    [gaochuchu@s1 conf]$ vim spark-defaults.conf 
    spark.eventLog.enabled             true
    spark.eventLog.dir                 hdfs://s1:8020/directory
    

    注意:hdfs中必须已经存在directory

    因此启动hadoop集群,并使用hadoop fs -mkdir /directory 创建该目录

  • 修改spark-env.sh文件,添加日志配置并分发配置

    [gaochuchu@s1 conf]$ vim spark-env.sh
    export SPARK_HISTORY_OPTS="
    -Dspark.history.ui.port=18080 
    -Dspark.history.fs.logDirectory=hdfs://s1:8020/directory 
    -Dspark.history.retainedApplications=30"
    
    • 参数 1 含义:WEB UI 访问的端口号为 18080

    • 参数 2 含义:指定历史服务器日志存储路径 注意8020是当前版本的Hadoop集群的内部通信窗口,hadoop2.x也可能是9000

    • 参数 3 含义:指定保存 Application 历史记录的个数,如果超过这个值,旧的应用程序信息将被删除,这个是内存中的应用数,而不是页面上显示的应用数。当 Spark 应用程序运行完成后,其元数据和日志可以被 Spark 历史服务器(Spark History Server)存储和显示,以便于开发者和管理员回顾和分析。需要注意的是,增加保留的应用程序数量将会增加 Spark 历史服务器的磁盘和内存使用量,因为它需要存储更多的元数据和日志信息。因此,在增加这个值时,你需要确保你的系统有足够的资源来支持这么做。

  • 重新启动spark集群和历史服务器

    [gaochuchu@s1 spark-standalone]$ sbin/start-all.sh
    [gaochuchu@s1 spark-standalone]$ sbin/start-history-server.sh 
    
  • 提交任务

    bin/spark-submit \
    --class org.apache.spark.examples.SparkPi 
    \--master spark://s1:7077 \
    ./examples/jars/spark-examples_2.12-3.0.0.jar \
    10
    
  • 查看历史服务器:http://s1:18080

    云服务器搭建Spark集群_第5张图片

2.7 配置高可用(HA)

  • 当前集群中只有一个Master节点,会存在单点故障问题。所以为了解决单点故障问题,需要在集群中配置多个Master节点,一旦活动状态的Master发生故障,由备用Master提供服务,保证作业能够继续执行。高可用一般采用Zookeeper设置,因此需要确保集群中安装了Zookeeper

  • 关闭Spark集群,启动Zookeeper集群

    [gaochuchu@s1 spark-standalone]$ sbin/stop-all.sh
    [gaochuchu@s1 spark-standalone]$ zk.sh start
    
  • 修改spark-env.sh文件配置,添加如下内容,并且需要注释原来配置的master的host和port

    [gaochuchu@s1 conf]$ vim spark-env.sh 
    #SPARK_MASTER_HOST=s1
    #SPARK_MASTER_PORT=7077
    
    SPARK_MASTER_WEBUI_PORT=8989
    export SPARK_DAEMON_JAVA_OPTS="
    -Dspark.deploy.recoveryMode=ZOOKEEPER 
    -Dspark.deploy.zookeeper.url=s1,s2,s3,s4,gracal
    -Dspark.deploy.zookeeper.dir=/spark"
    

    注意:Master 监控页面默认访问端口为 8080,但是可能会和 Zookeeper 冲突,所以改成 8989,也可以自定义为其他端口号

  • 分发配置并启动spark集群

    [gaochuchu@s1 spark-standalone]$ xsync conf/
    [gaochuchu@s1 spark-standalone]$ sbin/start-all.sh
    
  • 此时访问master节点的Web UI界面:http://s1:8989

    image-20231028173002764

  • 启动s2的单独master节点,访问其Web UI:http://s2:8989,发现此时s2会处于备用状态

    [gaochuchu@s2 spark-standalone]$ sbin/start-master.sh 
    

    image-20231028173251765

  • 测试高可用

    • 首先我们提交应用

      bin/spark-submit \
      --class org.apache.spark.examples.SparkPi \
      --master spark://s1:7077 \
      ./examples/jars/spark-examples_2.12-3.0.0.jar \
      10
      
    • 停止s1的master进程,然后再查看s2的master资源监控的Web UI,稍等一段时间,s2的Master状态提升为活动状态

      image-20231028173621255

3. Yarn模式(常用)

  • 独立部署(Standalone)模式由Spark自身提供计算资源,无需其他框架提供资源。这种方式降低了和其他第三方资源框架的耦合性,独立性非常强。但是,Spark主要是计算框架,不是资源调度框架,所以Spark其本身提供的资源调度并不是它的强项,所以还是和其他专业的资源调度框架集成更加可靠,如Yarn。

3.1 集群配置

s1 s2 s3 s4 gracal
HDFS NameNode DataNameNode DataNameNode SecondaryNameNode DataNameNode DataNameNode DataNameNode
YARN NodeManager ResourceManager NodeManager NodeManager NodeManager NodeManager
Zookeeper Server1(follower) Server2(follower) Server3(may be learder) Server4(follower) Server5(follower)
Spark Worker Master Worker 可开启备用Master Worker Worker Worker

3.2 安装Yarn模式

  • 即解压spark-3.0.0-bin-hadoop3.2.tgz 文件到/opt/moudle/路径下,并改名为spark-yarn

  • 修改hadoop的配置文件yarn-site.xml,新增配置并且分发配置

    [gaochuchu@s1 ~]$ cd /opt/module/hadoop-3.1.3/etc/hadoop/
    [gaochuchu@s1 hadoop]$ vim yarn-site.xml
    <!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认
    是 true -->
    <property>
     <name>yarn.nodemanager.pmem-check-enabled</name>
     <value>false</value>
    </property>
    <!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认
    是 true -->
    <property>
     <name>yarn.nodemanager.vmem-check-enabled</name>
     <value>false</value>
    </property>
    
    [gaochuchu@s1 hadoop]$ xsync yarn-site.xml 
    
  • 环境变量配置文件spark-env.sh.tmpate 改名为spark-env.sh,并增加环境变量

    [gaochuchu@s1 conf]$ mv spark-env.sh.template spark-env.sh
    export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.382.b05-1.el7_9.x86_64
    YARN_CONF_DIR=/opt/module/hadoop-3.1.3/etc/hadoop
    
  • 启动HDFS以及Yarn集群

    [gaochuchu@s1 conf]$ myhadoop.sh start
    
  • 提交应用

    特别注意:Yarn模式下已经不需要启动Spark集群了,只需要保证Hadoop集群处于启动状态即可

    否则在启动Spark集群的时候会显示localhost: Authentication failed.

    bin/spark-submit \
    --class org.apache.spark.examples.SparkPi \
    --master yarn \
    --deploy-mode cluster \
    ./examples/jars/spark-examples_2.12-3.0.0.jar \
    10
    

    • 运行完成,查看http://s2:7666页面,点击History 查看历史页面【因为Yarn的ResouceManager配置在s2节点上】

      云服务器搭建Spark集群_第6张图片

3.3 配置历史服务器

  • 由于spark-shell停止后,集群监控s1:4040页面都看不到历史任务的运行情况,所以开发的时都配置历史服务器记录任务运行情况

    • 修改spark-default.conf.template 文件为spark-default.conf,并配置日志存储路径
    # 修改文件名
    [gaochuchu@s1 conf]$ mv spark-defaults.conf.template spark-defaults.conf
    #配置日志存储路径
    [gaochuchu@s1 conf]$ vim spark-defaults.conf 
    spark.eventLog.enabled             true
    spark.eventLog.dir                 hdfs://s1:8020/directory
    

    注意:hdfs中必须已经存在directory

    因此启动hadoop集群,并使用hadoop fs -mkdir /directory 创建该目录

  • 修改spark-env.sh文件,添加日志配置并分发配置

    [gaochuchu@s1 conf]$ vim spark-env.sh
    export SPARK_HISTORY_OPTS="
    -Dspark.history.ui.port=18080 
    -Dspark.history.fs.logDirectory=hdfs://s1:8020/directory 
    -Dspark.history.retainedApplications=30"
    
    • 参数 1 含义:WEB UI 访问的端口号为 18080

    • 参数 2 含义:指定历史服务器日志存储路径 注意8020是当前版本的Hadoop集群的内部通信窗口,hadoop2.x也可能是9000

    • 参数 3 含义:指定保存 Application 历史记录的个数,如果超过这个值,旧的应用程序信息将被删除,这个是内存中的应用数,而不是页面上显示的应用数。当 Spark 应用程序运行完成后,其元数据和日志可以被 Spark 历史服务器(Spark History Server)存储和显示,以便于开发者和管理员回顾和分析。需要注意的是,增加保留的应用程序数量将会增加 Spark 历史服务器的磁盘和内存使用量,因为它需要存储更多的元数据和日志信息。因此,在增加这个值时,你需要确保你的系统有足够的资源来支持这么做。

  • 修改spark-default.conf,添加配置文件

    [gaochuchu@s1 conf]$ vim spark-defaults.conf 
    spark.yarn.historyServer.address=s1:18080
    spark.history.ui.port=18080
    
  • 重新启动历史服务器

    [gaochuchu@s1 spark-standalone]$ sbin/start-history-server.sh 
    
  • 重新提交应用

    bin/spark-submit \
    --class org.apache.spark.examples.SparkPi \
    --master yarn \
    --deploy-mode cluster \
    ./examples/jars/spark-examples_2.12-3.0.0.jar \
    10
    
  • 查看Yarn的WebUI http:s2:1666 ,以及历史服务器http:s1:18080

    云服务器搭建Spark集群_第7张图片

    云服务器搭建Spark集群_第8张图片

3.4 关于配置高可用的相关说明|

  • Spark on YARN模式的高可用性

    使用YARN ResourceManager的HA机制,通过ResourceManager的自动故障转移实现Spark集群的高可用性。

  • Spark Standalone模式的高可用性:

    使用Spark自带的HA机制,通过Zookeeper实现主节点的选举和故障转移,从而保证Spark集群的高可用性。

3.5 停止集群

# 停止hadoop集群
[gaochuchu@s1 spark-yarn]$ myhadoop.sh stop
# 停止历史服务器
[gaochuchu@s1 spark-yarn]$ sbin/stop-history-server.sh 

你可能感兴趣的:(hadoop,Spark,Scala,服务器,spark)