大数据处理 | Spark集群搭建及基本使用
wptr33 2024-12-20 19:03 14 浏览
本文将详细介绍Spark集群的搭建及Spark的运行原理、运行模式。
—▼—
Spark集群环境搭建
如果已经理解了前文Hadoop集群环境的搭建,那么学习Spark集群环境的搭建会容易很多,因为Hadoop和Spark不仅安装包目录结构非常相似,在配置方面也十分接近。均是在master节点上进行所有配置,然后打包复制到每个slave节点,然后启动集群Spark即可,下面就来详细介绍一下Spark集群环境的搭建。
下载安装
进入Spark的下载目录,
https://spark.apache.org/downloads.html
可以看到Spark分多个版本,有基于Hadoop构建好的,有没基于Hadoop构建的,有基于Hadoop2.6之前版本构建的,也有基于Hadoop2.7以后版本构建的,由于前面讲解Hadoop集群环境搭建时采用的是Hadoop 3.2.1,因此,而且本文需要使用HDFS依赖Hadoop,因此需要下载Pre-built for Apache Hadoop 2.7 and later,
把spark-2.4.4-bin-hadoop2.7.tgz文件下载到home路径下,然后解压到指定目录,
$?tar?-zxvf?~/spark-2.4.4-bin-hadoop2.7.tgz?-C?/usr/local/
然后进入目录并像Hadoop那样,修改Spark目录的拥有者,
$?cd?/usr/local
$?sudo?mv?./spark-2.4.4-bin-hadoop2.7?./spark
$?sudo?chowm?-R?user_name?./spark
配置环境变量
修改bashrc,配置环境变量,把Spark的bin和sbin路径加入到环境变量,
$?vim?~/.bashrc
export?SPARK_HOME=/usr/local/spark
export?PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
export?PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.10.7-src.zip:$PYTHONPATH
export?PYSPARK_PYTHON=python3
Master节点配置
进入Spark目录,修改spark-env.sh文件,
$?cd?/usr/local/spark
$?vim?./conf/spark-env.sh
在spark-env.sh中添加下面内容,
export?SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop?classpath)
export?HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
export?SPARK_MASTER_IP=10.110.113.132
SPARK_MASTER_IP指定的是master节点的IP,后面启动集群Spark时slave节点会注册到SPARK_MASTER_IP,如果这一项不配置,Spark集群则没有可使用资源,
修改slaves文件
配置完master节点信息之后需要配置slave节点信息,slave节点的信息配置在slaves文件里,由于Spark目录下没有这个文件,因此需要首先从slaves.template拷贝一下,
$?cd?/usr/local/spark/
$?cp?./conf/slaves.template?./conf/slaves
然后添加如下内容,
slave0
slave0
slave1
需要注意的是,slaves文件里配置的是运行作业任务的节点(worker),这样的话master的节点只作为控制节点,而不作为工作节点,如果需要把master节点的资源也充分利用起来,需要把master节点也加入到slaves文件中。
slave节点配置
首先在master节点上把配制好的目录进行打包,拷贝到每个slave节点上,
$?cd?/usr/local
$?tar?-zcf?~/spar.tar.gz?./spark
$?scp?~/spark/tar.gz?slave0:~/
$?scp?~/spark/tar.gz?slave1:~/
$?scp?~/spark/tar.gz?slave2:~/
然后在每个slave节点上执行下方命令,把文件解压到相应路径下,
$?sudo?rm?-rf?/usr/local/spark
$?sudo?tar?-zxvf?~/spark.tar.gz?-C?/usr/local
$?sudo?chown?-R?user_name?/usr/local/spark
这样就完成了slave节点的配置。
启动Spark集群
如果要使用HDFS的话,在启动Spark集群前需要先启动Hadoop集群,
$?cd?/usr/local/hadoop/
$?./sbin/start-all.sh
然后进入Spark目录,启动Spark集群,
$?cd?/usr/local/spark
$?./sbin/start-all.sh
需要说明一下,前面配置Hadoop集群是提到,需要配置ssh免密登陆,对于Spark也是同样的道理,如果不配置ssh免密登陆的话,执行./sbin/start-all.sh会提示输入密码。
除了使用./sbin/start-all.sh启动Spark集群外,还可以分开启动,先启动master节点,然后启动slave节点,
$?./sbin/start-master.sh
$?./sbin/start-slaves.sh
如果前面没有完成Master节点配置指定master节点IP,那么执行./sbin/start-slaves.sh时则无法注册master节点的IP,这样集群计算资源则无法使用。除了配置spark-env.sh指定master节点IP外,还可以通过下面方式指定注册的master节点IP,
$?./sbin/start-slave.sh?10.110.113.132
然后分别在master节点和slave节点执行下面命令会看到分别多出一个Master进程和Worker进程。
Spark基本使用
运行原理
如果使用过tensorflow的话,应该对Spark的使用很容易理解,Spark的计算过程和tensorflow有相似之处。
回忆一下,我们在使用tensorflow时需要首先构造一个计算图,然后实例化一个session,然后用session.run来启动图运算。
其实Spark也是这样,RDD(弹性分布式数据集)是Spark中最重要的概念之一,它提供了一个共享内存模型。Saprk的执行过程中主要包括两个动作:转换与行动。其中转换操作就如同tensorflow中的构造计算图的过程,在这个过程中Spark构造一个有向无环图(DAG),但是不进行运算,输入为RDD输出则是一个不同的RDD,当执行行动操作时就如同tensorflow中的session.run,开始执行运算。
Spark中有很多转换操作,例如,
- groupByKey
- reduceByKey
- sortByKey
- map
- filter
- join
- ……
行动操作包括,
- count
- collect
- first
- foreach
- reduce
- take
- ……
运行模式
Spark中通过master url来执行Spark的运行模式,Spark的运行模式包括本地运行、集群运行、yarn集群等,关于Spark master url的指定不同运行模式的含义如下,
URL值运行模式local使用1个线程本地化运行local[K]使用K个线程本地化运行local[*]使用逻辑CPU个数数量的线程来本地化运行spark://HOST:PORT指定集群模式运行Sparkyarn-cluster集群模式连接YARN集群yarn-client客户端模式连接YARN集群mesos://HOST:PORT连接到指定的Mesos集群
示例
下面就以一个简单的示例把前面Hadoop和Spark串联在一起,讲解一下HDFS+Spark的使用方法。
上传数据到HDFS
新建一个hello_world.txt的本地文件,并在文件中添加3行hello world,然后上传至HDFS,
$?cd?/usr/local/hadoop/
$?./bin/hdfs?dfs?-mkdir?-p?/usr/hadoop
$?touch?hello_world.txt
$?echo?-e?"hello?world?\nhello?world?\nhello?world"?>>?hello_world.txt
$?./bin/hdfs?dfs?-put?./hello_world.txt?/usr/hadoop
编写Spark程序
新建一个spark.py的Python文件,
$?vim?spark.py
添加如下内容,
from?pyspark?import?SparkConf
from?pyspark?import?SparkContext
conf?=?SparkConf().setAppName("FirstProject").setMaster("local[*]")
sc?=?SparkContext.getOrCreate(conf)
rdd?=?sc.textFile("hdfs:///master:9000/usr/hadoop/hello_world.txt")
rdd.map(lambda?line:?line).foreach(print)
然后运行程序,
$?python?spark.py
hello?world
hello?world
hello?world
以上就是Spark的集群配置过程和基本使用方法。
大数据开发高薪必备全套资源【免费获取】
Oracle高级技术总监多年精心创作一套完整课程体系【大数据、人工智能开发必看】,全面助力大数据开发零基础+入门+提升+项目=高薪!
「大数据零基础入门」
「大数据架构系统组件」
「大数据全套系统工具安装包」
Java必备工具
大数据必备工具
「大数据行业必备知资讯」
「大数据精品实战案例」
「大数据就业指导方案」
最后说一下的,也就是以上教程的获取方式!
领取方法:
还是那个万年不变的老规矩
1.评论文章,没字数限制,一个字都行!
2.成为小编成为的粉丝!
3.私信小编:“大数据开发教程”即可!
谢谢大家,祝大家学习愉快!(拿到教程后一定要好好学习,多练习哦!)
相关推荐
- SpringBoot 3 + Flutter3 实战低代码运营管理-10章
-
获课》aixuetang.xyz/5075/三天构建运营管理系统:SpringBoot3+Flutter3高效开发方法论...
- SpringBoot探针实现:从零构建应用健康监控利器
-
SpringBoot探针实现:从零构建应用健康监控利器声明本文中的所有案例代码、配置仅供参考,如需使用请严格做好相关测试及评估,对于因参照本文内容进行操作而导致的任何直接或间接损失,作者概不负责。本文...
- Spring Batch中的JobRepository:批处理的“记忆大师”是如何工作
-
一、JobRepository是谁?——批处理的“档案馆”JobRepository是SpringBatch的“记忆中枢”,负责记录所有Job和Step的执行状态。它像一位严谨的档案管理员,把任务执...
- 还在为 Spring Boot3 技术整合发愁?一文解锁大厂都在用的实用方案
-
你在使用SpringBoot3开发后端项目时,是不是常常陷入这样的困境?想提升项目性能和功能,却不知道该整合哪些技术;好不容易选定技术,又在配置和使用上频频踩坑。其实,这是很多互联网大厂后端开发...
- 一文吃透!Spring Boot 项目请求日志记录,这几招你绝对不能错过!
-
在互联网应用开发的高速赛道上,系统的稳定性、可维护性以及安全性是每一位开发者都必须关注的核心要素。而请求日志记录,就如同系统的“黑匣子”,能够为我们提供排查故障、分析用户行为、优化系统性能等关键信息...
- spring-boot-starter-actuator简单介绍
-
SpringBootActuator是SpringBoot的一个功能强大的子项目,它提供了一些有用的监控和管理SpringBoot应用程序的端点。SpringBootActuat...
- 使用SpringBoot钩子或Actuator实现优雅停机
-
服务如何响应停机信号在java中我们可以直接利用通过Runtime...
- 28-自定义Spring Boot Actuator指标
-
上篇我们学习了《27-自定义SpringBootActuator健康指示器》,本篇我们学习自定义SpringBootActuator指标(Metric)。...
- 如何在Spring Boot中整合Spring Boot Actuator进行服务应用监控?
-
监控是确保系统稳定性和性能的关键组成部分,而在SpringBoot中就提供了默认的应用监控方案SpringBootActuator,通过SpringBootActuator提供了开箱即用的应...
- 「Spring Boot」 Actuator Endpoint
-
Actuator官网地址:https://docs.spring.io/spring-boot/docs/2.5.6/reference/html/actuator.html目的监控并管理应用程序...
- Spring Boot Actuator监控功能全面剖析
-
SpringBootActuator监控功能全面剖析在现代企业级Java开发中,SpringBoot以其轻量化、高效率的特性深受开发者青睐。而作为SpringBoot生态系统的重要组成部分,S...
- 1000字彻底搞懂SpringBootActuator组件!
-
SpringBootActuator组件SpringBootActuator通过HTTPendpoints或者JMX来管理和监控SpringBoot应用,如服务的审计、健康检查、指标统计和...
- JavaScript数据类型(javascript数据类型介绍)
-
基本数据类型BooleanNullNumberStringSymbolUndefined对象数据类型ObjectArray定义:JavaScript数组是内置的对象之一,它可以用一个变量来存储多个同种...
- 能运行,不代表它是对的:5 个潜伏在正常功能下的 JavaScript 错误
-
JavaScript的动态性和复杂性意味着,代码虽然表面上正常运行,但一些深层次、隐蔽的陷阱往往让人意想不到,梳理了几个JavaScript开发中难以发现的隐蔽错误,旨在帮助我们写出更健壮、更可...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
因果推断Matching方式实现代码 因果推断模型
-
git pull命令使用实例 git pull--rebase
-
面试官:git pull是哪两个指令的组合?
-
git 执行pull错误如何撤销 git pull fail
-
git pull 和git fetch 命令分别有什么作用?二者有什么区别?
-
git fetch 和git pull 的异同 git中fetch和pull的区别
-
git pull 之后本地代码被覆盖 解决方案
-
还可以这样玩?Git基本原理及各种骚操作,涨知识了
-
git命令之pull git.pull
-
- 最近发表
-
- SpringBoot 3 + Flutter3 实战低代码运营管理-10章
- SpringBoot探针实现:从零构建应用健康监控利器
- Spring Batch中的JobRepository:批处理的“记忆大师”是如何工作
- Github霸榜的SpringBoot全套学习教程,从入门到实战,内容超详细
- 还在为 Spring Boot3 技术整合发愁?一文解锁大厂都在用的实用方案
- 一文吃透!Spring Boot 项目请求日志记录,这几招你绝对不能错过!
- spring-boot-starter-actuator简单介绍
- 使用SpringBoot钩子或Actuator实现优雅停机
- 28-自定义Spring Boot Actuator指标
- 如何在Spring Boot中整合Spring Boot Actuator进行服务应用监控?
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)