云服务器搭建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环境启动成功

      image-20231028151907854

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

      image-20231028151959161

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
    

    image-20231028152610275

    • –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 集群配置

s1s2s3s4gracal
SparkWorker MasterWorkerWorkerWorkerWorker

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节点

    image-20231028155856561

  • 执行脚本停止集群

    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的值

      image-20231028160403909

      注意:

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

    • SparkSubmit是提交节点的进程

    • CoarseGrainedExecutorBackend是执行节点的进程

      image-20231028161120335
  • 执行任务时,在master的Web UI界面,可以看到节点的内存,以及服务器集群节点的总核数

    image-20231028162132075

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

参数解释可选值举例
–classSpark 程序中包含主函数的类
–masterSpark 程序运行的模式(环境)模式: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

    image-20231028170844247

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=7077SPARK_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 集群配置

s1s2s3s4gracal
HDFSNameNode DataNameNodeDataNameNodeSecondaryNameNode DataNameNodeDataNameNodeDataNameNode
YARNNodeManagerResourceManager NodeManagerNodeManagerNodeManagerNodeManager
ZookeeperServer1(follower)Server2(follower)Server3(may be learder)Server4(follower)Server5(follower)
SparkWorker MasterWorker 可开启备用MasterWorkerWorkerWorker

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
    

    image-20231028180636252

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

      image-20231028181039197

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

    image-20231028185117994

    image-20231028185140416

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 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/121957.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用ffmpeg制作透明背景的视频

最近我们尝试在网页上叠加数字人讲解的功能&#xff0c;发现如果直接在网页上放一个矩形的数字人视频&#xff0c;效果会很差&#xff0c;首先是会遮挡很多画面的内容&#xff0c;其次就是不管使用任何任务背景&#xff0c;画面都和后面的网页不是很协调&#xff0c;如图所示&a…

提升技能,挑战自我——一站式在线题库小程序

在这个信息爆炸的时代&#xff0c;我们总是在寻找一种方式&#xff0c;让自己在众多的知识海洋中快速提升技能&#xff0c;挑战自我。今天&#xff0c;我要向大家推荐一款全新的在线题库小程序KD蝌蚪阿坤&#xff0c;它将帮助你实现这个目标。 KD蝌蚪阿坤是一款全面的在线题库…

5 个编写高效 Makefile 文件的最佳实践

在软件开发过程中&#xff0c;Makefile是一个非常重要的工具&#xff0c;它可以帮助我们自动化构建、编译、测试和部署。然而&#xff0c;编写高效的Makefile文件并不是一件容易的事情。在本文中&#xff0c;我们将讨论如何编写高效的Makefile文件&#xff0c;以提高我们的开发…

Python---练习:有一物,不知其数,三三数之余二,五五数之余三,七七数之余二,问物几何?

案例&#xff1a; 有一物&#xff0c;不知其数&#xff0c;三三数之余二&#xff0c;五五数之余三&#xff0c;七七数之余二&#xff0c;问物几何&#xff1f; 人话&#xff1a; 有一个数字&#xff0c;不知道具体是多少&#xff0c;用3去除剩2&#xff0c;用5去除剩3&#…

Linux中shell脚本中的变量

目录 一、变量的定义 二、shell脚本中变量的定义方法 1、变量名称 2、环境级别 3、用户级别 4、系统级别 5、删除设定的变量 三、变量的转译 1、转译 2、声明 3、变量的数组 四、Linux中命令的别名设定 五、用户环境变量的更改 脚本中的传参 1、非交互模式 2…

android studio启动Task配置

Android studio 高版本默认不开启Task配置&#xff0c;需要自己手动开启 1.低版本配置路径&#xff1a;&#xff08;复制他人图片&#xff09; 2.高版本路径&#xff1a;添加下图勾选配置即可 3.gradle task 3.1 初识task gradle中所有的构建工作都是由task完成的,它帮我们处…

Anaconda下载和安装

1.概述 1&#xff09;包含conda&#xff1a;conda是一个环境管理器&#xff0c;其功能依靠conda包来实现&#xff0c;该环境管理器与pip类似。 2&#xff09;安装大量工具包&#xff1a;Anaconda会自动安装一个基本的python&#xff0c;该python的版本Anaconda的版本有关。该…

2023年清洁电器行业数据分析:洗地机市场规模持续倍增,进入赛点

洗地机作为清洁电器领域的明星品类&#xff0c;正在成为继扫地机器人之后拉动清洁电器市场大盘的又一核心动力。 在清洁电器领域&#xff0c;扫地机器人、洗地机和吸尘器是三大热门品类。截至今年9月份&#xff0c;根据鲸参谋平台的数据显示&#xff0c;吸尘器的规模继续大幅下…

嵌入式 Tomcat 调校

SpringBoot 嵌入了 Web 容器如 Tomcat/Jetty/Undertow&#xff0c;——这是怎么做到的&#xff1f;我们以 Tomcat 为例子&#xff0c;尝试调用嵌入式 Tomcat。 调用嵌入式 Tomcat&#xff0c;如果按照默认去启动&#xff0c;一个 main 函数就可以了。 简单的例子 下面是启动…

系列十八、请描述下bean的生命周期

一、概述 bean的生命周期是指bean从创建到销毁的整个过程。 二、生命周期 bean的生命周期是指bean从创建到销毁的整个过程&#xff0c;大致可以分为如下四个过程&#xff1a; 2.1、实例化 实例化可以通过如下几种方式完成&#xff1a;&#xff08;参考系列十五&#xff09…

maven之父子工程版本控制案例实战,及拓展groupId和artifactId的含义

<parent>标签 用于父子工程项目&#xff0c;什么是父子工程&#xff1f; 顾名思义&#xff0c;maven父子项目是一个有一个父项目&#xff0c;父项目下面又有很多子项目的maven工程&#xff0c;当然&#xff0c;子项目下面还可以添加子项目&#xff0c;从而形成一个树形…

python DevOps

在云原生中&#xff0c;python扮演的角色是什么&#xff1f; 在云原生环境中&#xff0c;Python 作为一种高级编程语言&#xff0c;在多个方面扮演着重要角色。云原生是指利用云计算的各种优势&#xff08;如弹性、可扩展性和自动化&#xff09;&#xff0c;构建和运行应用程序…

vscode 通过ssh 连接虚拟机vmware(ubuntu)

1.网络连接是否ping的通&#xff08;ubuntu虚拟机使用的是net 连接方式&#xff09; 2.配置环境 ubuntu 需要安装ssh server 服务 &#xff08;1&#xff09;&#xff1a; 安装&#xff08;Ubuntu安装ssh server) apt-get install openssh-server 检查是否ssh server 是否启动…

leetCode 229. 多数元素 II + 摩尔投票法 + 进阶 + 优化空间

229. 多数元素 II - 力扣&#xff08;LeetCode&#xff09; 给定一个大小为 n 的整数数组&#xff0c;找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。 进阶&#xff1a;尝试设计时间复杂度为 O(n)、空间复杂度为 O(1)的算法解决此问题。 &#xff08;1&#xff09;哈希表 class …

06条件判断

if语句的基本语法 if关键字后面跟一个判断条件 如果条件成立那么就运行判断条件里面的代码 else处理条件不满足时候的代码块 m 9 if m > 10:print("买一瓶醋") else:print("钱不够&#xff0c;请带够钱再来吧&#xff01;")#条件判断流程图 进入网…

[C++]——带你学习类和对象

类和对象——上 目录&#xff1a;一、面向过程和面向对象二、类的概念三、类的访问限定符和封装3.1 访问限定符3.2 封装 四、类的作用域五、类的实例化六、类的对象大小的计算七、类成员函数this指针7.1 this指针的引用7.2 this 指针的特性 目录&#xff1a; 类和对象是很重要…

GoLong的学习之路(十二)语法之标准库 flag的使用

上回书说到&#xff0c;fmt的标准库的一些常用的使用函数。这次说flag的使用&#xff0c;以下这些库要去做了解。不然GG&#xff0c;Go语言内置的flag包实现了命令行参数的解析&#xff0c;flag包使得开发命令行工具更为简单。 文章目录 os.Argsflag包flag.Type()flag.TypeVar(…

douyin ios 8404六神参数学习记录

玩那么久安卓了&#xff0c;也终于换一换ios终端分析分析&#xff0c;还是熟悉的x-gorgon&#xff0c;x-argus&#xff0c;x-medusa那些参数。 随便抓个抖音 ios版本的接口&#xff1a; 像评论接口&#xff1a; https://api26-normal-hl.amemv.com/aweme/v2/comment/list/?…

锐捷ISG账号密码泄露漏洞

查看源代码&#xff0c;搜索password获取管理员账号密码&#xff1a; 之后&#xff0c;可以通过在线网站对该 MD5 值进行解密&#xff0c;并且我们发现这还是弱口令&#xff1a; 下面可以使用上一步查找到的账号和解密后的密码登录成功 文笔生疏&#xff0c;措辞浅薄&#x…

vue重修之Vuex【上部】

文章目录 版权声明Vuex 概述Vuex 的主要概念和组件 vuex的使用状态 &#xff08;state&#xff09;Vuex特点 访问vuex中数据$store访问mapState辅助函数访问 开启严格模式及Vuex的单项数据流突变&#xff08;mutations&#xff09;mutations初识带参 mutations辅助函数 mapMuta…