搭建Spark Standalone集群

news2025/1/31 8:26:14

文章目录

  • 一,Spark Standalone架构
    • (一)client提交方式
    • (二)cluster提交方式
  • 二,Spark集群拓扑
  • 三,前提条件:安装配置了分布式Hadoop环境
  • 四,在master虚拟机上安装配置Spark
    • (一)将spark安装包上传到master虚拟机
    • (二)将spark安装包解压到指定目录
    • (三)配置spark环境变量
    • (四)编辑spark环境配置文件
    • (五)创建slaves文件,添加从节点
  • 五,在slave1虚拟机上安装配置Spark
    • (一)把master虚拟机上安装的spark分发给slave1虚拟机
    • (二)将master虚拟机上环境变量配置文件分发到slave1虚拟机
    • (三)在slave1虚拟机上让spark环境配置文件生效
  • 六,在slave2虚拟机上安装配置Spark
    • (一)把master虚拟机上安装的spark分发给slave2虚拟机
    • (二)将master虚拟机上环境变量配置文件分发到slave2虚拟机
    • (三)在slave2虚拟机上让spark环境配置文件生效
  • 七,启动Spark Standalone集群
    • (一)启动hadoop的dfs服务
    • (二)启动Spark集群
  • 八,访问Spark的WebUI
  • 九,启动Scala版Spark Shell


一,Spark Standalone架构

在这里插入图片描述

Spark Standalone模式为经典的Master/Slave(主/从)架构,资源调度是Spark自己实现的。在Standalone模式中,根据应用程序提交的方式不同,Driver(主控进程)在集群中的位置也有所不同。应用程序的提交方式主要有两种:client和cluster,默认是client。可以在向Spark集群提交应用程序时使用–deploy-mode参数指定提交方式。

(一)client提交方式

集群的主节点称为Master节点,在集群启动时会在主节点启动一个名为Master的守护进程,类似YARN集群的ResourceManager;从节点称为Worker节点,在集群启动时会在各个从节点上启动一个名为Worker的守护进程,类似YARN集群的NodeManager。

Spark在执行应用程序的过程中会启动Driver和Executor两种JVM进程。

Driver为主控进程,负责执行应用程序的main()方法,创建SparkContext对象(负责与Spark集群进行交互),提交Spark作业,并将作业转化为Task(一个作业由多个Task任务组成),然后在各个Executor进程间对Task进行调度和监控。通常用SparkContext代表Driver。在上图的架构中,Spark会在客户端启动一个名为SparkSubmit的进程,Driver程序则运行于该进程。

Executor为应用程序运行在Worker节点上的一个进程,由Worker进程启动,负责执行具体的Task,并存储数据在内存或磁盘上。每个应用程序都有各自独立的一个或多个Executor进程。在Spark Standalone模式和Spark on YARN模式中,Executor进程的名称为CoarseGrainedExecutorBackend,类似运行MapReduce程序所产生的YarnChild进程,并且同时与Worker、Driver都有通信。

(二)cluster提交方式

Standalone cluster提交方式提交应用程序后,客户端仍然会产生一个名为SparkSubmit的进程,但是该进程会在应用程序提交给集群之后就立即退出。当应用程序运行时,Master会在集群中选择一个Worker进程启动一个名为DriverWrapper的子进程,该子进程即为Driver进程,所起的作用相当于YARN集群的ApplicationMaster角色,类似MapReduce程序运行时所产生的MRAppMaster进程。

二,Spark集群拓扑

Spark Standalone模式的集群搭建需要在集群的每个节点都安装Spark,集群角色分配如下表所示:

节点角色
masterMaster
slave1Worker
slave2Worker

三,前提条件:安装配置了分布式Hadoop环境

启动hadoop集群
在这里插入图片描述

访问Hadoop WebUI界面
在这里插入图片描述

四,在master虚拟机上安装配置Spark

(一)将spark安装包上传到master虚拟机

在这里插入图片描述

(二)将spark安装包解压到指定目录

执行命令:tar -zxvf spark-3.3.2-bin-hadoop3.tgz -C /opt

在这里插入图片描述

(三)配置spark环境变量

执行命令:vim /etc/profile
在这里插入图片描述

# Spark 环境变量
export SPARK_HOME=/opt/spark-3.3.2
export PATH=$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH

存盘退出后,执行命令:source /etc/profile,让配置生效

查看spark安装目录(bin、sbin和conf三个目录很重要)
在这里插入图片描述

(四)编辑spark环境配置文件

进入spark配置目录后,执行命令:cp spark-env.sh.template spark-env.sh与vim spark-env.sh
在这里插入图片描述

export JAVA_HOME=/usr/java/latest
export SPARK_MASTER_HOST=master
export SPARK_MASTER_PORT=7077
  1. JAVA_HOME:指定JAVA_HOME的路径。若集群中每个节点在/etc/profile文件中都配置了JAVA_HOME,则该选项可以省略,Spark集群启动时会自动读取。为了防止出错,建议此处将该选项配置上。
  2. SPARK_MASTER_HOST:指定集群主节点(master)的主机名,此处为master。
  3. SPARK_MASTER_PORT:指定Master节点的访问端口,默认为7077。

存盘退出,执行命令:source spark-env.sh,让配置生效
在这里插入图片描述

(五)创建slaves文件,添加从节点

执行命令:vim slaves,添加两个从节点主机名
在这里插入图片描述

五,在slave1虚拟机上安装配置Spark

(一)把master虚拟机上安装的spark分发给slave1虚拟机

执行命令:scp -r $SPARK_HOME root@slave1:$SPARK_HOME

在这里插入图片描述

(二)将master虚拟机上环境变量配置文件分发到slave1虚拟机

在master虚拟机上,执行命令:scp /etc/profile root@slave1:/etc/profile
在这里插入图片描述

在slave1虚拟机上,执行命令:source /etc/profile,让环境配置生效
在这里插入图片描述

(三)在slave1虚拟机上让spark环境配置文件生效

在slave1虚拟机上,进入spark配置目录,执行命令:source spark-env.sh
在这里插入图片描述

六,在slave2虚拟机上安装配置Spark

(一)把master虚拟机上安装的spark分发给slave2虚拟机

执行命令:scp -r $SPARK_HOME root@slave2:$SPARK_HOME
在这里插入图片描述

(二)将master虚拟机上环境变量配置文件分发到slave2虚拟机

在master虚拟机上,执行命令:scp /etc/profile root@slave2:/etc/profile
在这里插入图片描述

在slave2虚拟机上,执行命令:source /etc/profile,让环境配置生效
在这里插入图片描述

(三)在slave2虚拟机上让spark环境配置文件生效

在slave2虚拟机上,进入spark配置目录,执行命令:source spark-env.sh
在这里插入图片描述

七,启动Spark Standalone集群

Spark Standalone集群使用Spark自带的资源调度框架,但一般我们把数据保存在HDFS上,用HDFS做数据持久化,所以Hadoop还是需要配置,但是可以只配置HDFS相关的,而Hadoop YARN不需要配置。启动Spark Standalone集群,不需要启动YARN服务,因为Spark会使用自带的资源调度框架。

(一)启动hadoop的dfs服务

在master虚拟机上执行命令:start-dfs.sh
在这里插入图片描述

(二)启动Spark集群

执行命令:start-all.sh
在这里插入图片描述
查看start-all.sh的源码启动Master与Worker的命令

# Start Master
"${SPARK_HOME}/sbin"/start-master.sh
# Start Worker
s"${SPARK_HOME}/sbin"/start-slaves.sh

可以看到,当执行start-all.sh命令时,会分别执行start-master.sh命令启动Master,执行start-slaves.sh命令启动Worker。

注意:若spark-evn.sh中配置了SPARK_MASTER_HOST属性,则必须在该属性指定的主机上启动Spark集群,否则会启动不成功;若没有配置SPARK_MASTER_HOST属性,则可以在任意节点上启动Spark集群,当前执行启动命令的节点即为Master节点。

启动完毕后,分别在各节点执行jps命令,查看启动的进程。若在master节点存在Master进程,slave1节点存在Worker进程,slave2节点存在Worker进程,则说明集群启动成功。

查看master节点进程
在这里插入图片描述

查看slave1节点进程
在这里插入图片描述

查看slave2节点进程
在这里插入图片描述

八,访问Spark的WebUI

在浏览器里访问:http://master:8080
在这里插入图片描述
在浏览器访问:http://slave1:8081
在这里插入图片描述
在浏览器访问:http://slave2:8081
在这里插入图片描述

九,启动Scala版Spark Shell

执行命令:spark-shell --master spark://master:7077 (注意–master,两个-不能少)
在这里插入图片描述
在slave1的/Txt目录里执行命令:vim test.txt
在这里插入图片描述

在这里插入图片描述

hello hadoop world
hello spark world
hello java and scala 
hello big data world
hello hadoop and spark

在HDFS上创建park目录,将test.txt上传到HDFS的/park目录
在这里插入图片描述

读取HDFS上的文件,创建RDD,执行命令:val rdd = sc.textFile("hdfs://master:9000/park/test.txt")(说明:val rdd = sc.textFile(“/park/test.txt”)读取的依然是HDFS上的文件,绝对不是本地文件)
在这里插入图片描述
收集rdd的数据,执行命令:rdd.collect
在这里插入图片描述
进行词频统计,按单词个数降序排列,执行命令:val wordcount = rdd.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _).sortBy(_._2, false)wordcount.collect.foreach(println)
在这里插入图片描述

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

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

相关文章

SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈(nacos)

Nacos注册中心 (一)认识和安装Nacos 1、认识Nacos 2、安装nacos 这里下载1.4.1版本 默认端口是8848 下载解压后,终端进入到nacos/bin下,bash startup.sh -m standalone 然后查看start.out文件得到一个网址就可以查看nacos的服…

《Android 移动应用基础教程(Android Studio)(第2版)》【课本习题】【学习通2023春PDF】【参考答案】

文章目录 超星学习通智能终端软件开发(基于Android Studio环境)章节作业(39)第一章第二章 Android常见界面布局第三章 Android常见界面控件第四章第五章第六章(略)第七章第八章第九章第十章第十一章第十二章…

ChatGPT常见问题,Access denied的解决办法

今天,突然想登录一登录ChatGPT,提示 Access denied, You do not have access to chat.openai.com 怎么办? “Access denied You do not have access to chat.openai.com. The site owner may have set restrictions that prevent you from ac…

leetcode142. 环形链表 II

给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数…

vue3+electron开发桌面软件(7)——修改注册表,创建级联菜单

系列文章目录 系列第一篇: vue3electron开发桌面软件入门与实战(0)——创建electron应用 文章目录 系列文章目录前言一、创建右键级联菜单二、了解注册表结构1.手动添加注册表——一级菜单2.手动添加注册表——二级菜单父菜单3.手动添加注册…

IC-14W网络IC卡读写器_银河麒麟桌面操作系统V10适配测试报告

银河麒麟操作系统产品NeoCertify 认证测试报告 系统版本:银河麒麟桌面操作系统V10 厂商名称: 广州荣士电子有限公司 认证产品:IC-14W网络IC卡读写器 测试日期: 2022-11-04 …

基于SVG的HMI组件

人机界面是自动化领域不可或缺重要组成部分。人机界面系统的设计看上去并没有太大的技术门槛,但是设计一个HMI系统的工作量是巨大的,如果你没有足够的耐心和精力是难以完成一个通用HMI系统的。构建UI控件库就是一个似乎永远完不成的事情,用户…

12.基于蒙特卡洛抽样的电动汽车充电负荷计算

说明书 MATLAB代码:基于蒙特卡洛抽样的电动汽车充电负荷计算 关键词:电动汽车 蒙特卡洛模拟 抽样 充放电负荷 参考文档:《主动配电网多源协同运行优化研究_乔珊》第3.2节,完全复现 仿真平台:MATLAB 优势&#xf…

JavaWeb——IO、存储、硬盘、文件系统相关常识

目录 一、IO 1、定义 二、存储和硬盘 1、存储 2、硬盘 三、文件系统 1、文件 (1)、定义 (2)、分类 (3)、操作 2、树形结构和目录 3、路径 (1)、定义 (2&…

elementui是怎么做表单验证的?

文章目录 前言elementui是怎么做表单验证?步骤 一、 表单验证校验代码?二、el-button提交验证代码2.validate方法深入了解1. 有参数2. 无参数 总结 前言 在项目开发中,我们经常会遇到表单保存的功能,在表单保存前,常常…

Salesforce如何防止黑客攻击和数据泄露?了解他们的安全措施!

安全性一直是Salesforce密切关注的问题。Google的安全浏览报告指出,2022年网络钓鱼网站的数量增加了80%。面对着黑客攻击、安全漏洞、数据泄露等不安全事件频发,实施更强大的安全措施比以往更加重要。 调查显示,电子邮件目前是网…

阿里巴巴图标,font-family字体样式

阿里巴巴官网:https://www.iconfont.cn/ 如有需要,请注意到文章最后的问题。 一,图标 1,搜索关键词,点击图标 -> 加入购物车 -> 添加到项目 2,两种方式 (1)选择 Font cla…

推荐一个好工具,可以替代 swagger 生成文档

Swagger 是一个规范且完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。 Swagger 的目标是对 REST API 定义一个标准且和语言无关的接口,可以让人和计算机拥有无须访问源码、文档或网络流量监测就可以发现和理解服务的能力。当通过 S…

SpringBoot扫包排除指定包(配置文件形式)

1、背景​ 在有些时候,不同环境可能需要用代码不同模块的能力,但是不同环境的项目包是一致的。这块我们想到的最简单的办法是在maven打包的时候打不同的模块,但是这样往往需要出多个包,虽然这种方式是正路但运维同学嫌麻烦。第二种…

Java面试题--MySQL索引

一. 索引介绍 MySQL的索引是一种数据结构,它可以帮助MySQL快速定位需要访问的记录。索引可类比于一本书的目录,通过它可以快速找到某个特定的记录。 MySQL支持多种类型的索引,每种索引都有其优势和局限性,常用的包括&#xff1a…

python类型转换

我们就想那我们目前接触到的三种类型做一下转换 分别是 字符串 浮点数 正整数 可能会有刚接触编程的小伙伴在想 没事类型转换什么呢? 其实在实际开发中 这东西用的不要太多 根据我们目前认识的类型 先用到三个方法 我们编写代码 String_int str(111); print(St…

初阶数据结构——时间复杂度和空间复杂度

目录 算法效率算法的复杂度 时间复杂度时间复杂度的概念习题 空间复杂度空间复杂度的概念习题 什么是数据结构? 数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。 什么是算法? 算法…

java+ssm603企业人事档案管理系统带前端springboot

人事管理系统的设计与实现采用Spring、SpringMVC和MyBatis作为主体框架,系统设计遵循界面层、业务逻辑层和数据访问层的Web开发三层架构。采用B/S结构,使得系统更加容易维护。人事管理系统的设计与实现主要实现角色有管理员和用户,管理员在后台管理资料文件模块、员工模块、文件…

深度相机初体验:Hello World

当我的组长给了我一个深度相机,倒霉的事情就开始了,在使用的过程中遇到的某些问题搜不到,头秃啊呜呜呜呜呜呜呜呜 配置: ubuntu20.04(我实在是懒得去升级了,一旦升级就可能会出现找不到教程的可能性&#x…

运行时内存数据区之执行引擎(一)

执行引擎概述 执行引擎是Java虚拟机核心的组成部分之一。 “虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软…