Spark01

news2025/4/8 1:00:21

Spark01

      • 一. Spark概述
      • 二. Spark环境部署 - Local
      • 三. Spark环境部署 - Standalone
          • 1. Standalone集群概述
          • 2. Standalone环境部署
          • 3. 测试环境
      • 四. Spark环境部署 - Standalone-HA
          • 1. 安装部署Zookeeper
          • 1. 下载
          • 2. zookeeper安装
          • 3. 配置StandAlone-HA集群
      • 五. Spark On YARN -- 重点
          • 1. 环境搭建

一. Spark概述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二. Spark环境部署 - Local

1. 上传压缩包
在这里插入图片描述
2. 解压缩
在这里插入图片描述
3. 修改用户权限 - hadoop
在这里插入图片描述
4. 构建软链接
在这里插入图片描述
5.文件目录
在这里插入图片描述
6. 启动spark-shell
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
7. 测试
在这里插入图片描述

val textfile=sc.textFile("file:///home/hadoop/words.txt");
// val scala的声明,声明一个不可变的变量
// sc: SparkContext对象, 是Spark程序的入口,提供了连接Spark集群的方法,并且可以创建RDDs(弹性分布式数据集)
//textFile():SC对象提供的方法, 用来读取文本文件, 会将文件中的内容作为RDD[String]返回
/*textFile = 
    RDD[e are words]
    RDD[e are words]
    RDD[e are words]*/
val counts = textfile.flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_)
// flatMap(): 转换函数, 接收一个函数作为参数, 对RDD中的每个元素都应用这个函数
// 参数:  '_.split(" ")' 使用空格作为分隔符将每行文本拆分成单词数组 [e are words e are words e are words]
// map(): 转换函数, 接收一个函数作为参数,  对RDD中的每个元素都应用这个函数
// (_,1): 匿名函数,
// reduceByKey(_+_) 

//结果:
//Array[(String, Int)] = Array((are,2), (english,1), (e,1), (in,1), (more,1), (words,3), (these,1))

三. Spark环境部署 - Standalone

1. Standalone集群概述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. Standalone环境部署

1. 集群规划

node1: Master /Worker
node2 : Worker
node3 : Worker

2. 配置workers

cd /export/server/spark/conf/workers
改名称
mv workers.template workers
vim workders
内容
node1
node2
node3

3. 配置Master - spark-env.sh

cd /export/server/conf/spark-env.sh
改名
mv spark-env.sh.template spark-env.sh
vim spark-env.sh
内容

## 设置JAVA安装目录
# 1. 改名
mv spark-env.sh.template spark-env.sh

# 2. 编辑spark-env.sh, 在底部追加如下内容

## 设置JAVA安装目录
JAVA_HOME=/export/server/jdk

## HADOOP软件配置文件目录,读取HDFS上文件和运行YARN集群
HADOOP_CONF_DIR=/export/server/hadoop/etc/hadoop
YARN_CONF_DIR=/export/server/hadoop/etc/hadoop

## 指定spark老大Master的IP和提交任务的通信端口
# 告知Spark的master运行在哪个机器上
export SPARK_MASTER_HOST=node1
# 告知sparkmaster的通讯端口
export SPARK_MASTER_PORT=7077
# 告知spark master的 webui端口
SPARK_MASTER_WEBUI_PORT=8080

## 设置历史服务器
# 配置的意思是  将spark程序运行的历史日志 存到hdfs的/sparklog文件夹中
SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://node1:8020/sparklog/ -Dspark.history.fs.cleaner.enabled=true"

# 注意, 上面的配置的路径 要根据你自己机器实际的路径来写

在HDFS下创建历史运行记录文件sparklog

hadoop fs -mkdir /sparklog
hadoop fs -ls /
hadoop fs -chmod 777 /sparklog

4.分发

scp -r spark-3.2.0-bin-hadoop3.2/ hadoop@node2:`pwd`
scp -r spark-3.2.0-bin-hadoop3.2/ hadoop@node3:`pwd`

5. 构建软连接

node2: ln -s /export/server/spark-3.2.0-bin-hadoop3.2/ spark
node3: ln -s /export/server/spark-3.2.0-bin-hadoop3.2/ spark

3. 测试环境

1. 启动Master进程

集群的启动和停止
在主节点上启动spark集群
/export/server/spark/sbin/start-all.sh
在主节点上停止spark集群
/export/server/spark/sbin/stop-all.sh
在主节点上单独启动和停止master
start-master.sh
stop-master.sh

在这里插入图片描述
在这里插入图片描述

2. 启动spark-shell
在这里插入图片描述
3. 测试

提交 WordCounts任务到Spark集群中
node1 : Master+Worker
node2 : worker
node3 : worker

上传文件到HDFS,方便读取words.txt文件(考虑到node2和node3没有word.txt)
hadoop fs -put /home/hadoop/words.txt /wordcount/input/words.txt
在HDFS创建
hadoop fs -mkdir -p /wordcount/input
查看是否上传成功
hadoop fs -ls /wordcount/input

val textfile = sc.textFile("hdfs://node1:8020/words.txt")
val count = textfile.flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_)
count.collect()
count.saveAsTextFile("hdfs://node1:8020/wordcount/output00")


在这里插入图片描述
在这里插入图片描述

四. Spark环境部署 - Standalone-HA

在这里插入图片描述

1. 安装部署Zookeeper

1. 前期准备

cd /export/server
// 解压缩
tar -zxvf apache-zookeeper-3.5.9-bin.tar.gz -C /export/server
// 构建软链接
ln -s apache-zookeeper-3.5.9-bin zookeeper
// 查看是否成功
ll
// 删除Zookeeper的压缩包
rm -rf apache-zookeeper-3.5.9-bin.tar.gz
1. 下载

https://archive.apache.org/dist/zookeeper/
在这里插入图片描述
在这里插入图片描述

2. zookeeper安装
  1. zookeeper解压

首先将下载的 apache-zookeeper-3.5.9-bin.tar.gz 上传到服务器
解压安装至 /export/server目录下
tar -zxvf apache-zookeeper-3.5.9-bin.tar.gz -C /export/server
ln -s apache-zookeeper-3.5.9-bin zookeeper

2.zookeeper配置文件介绍

进入 zookeeper 配置文件 /export/server/zookeeper/conf/
给 zoo_sample.cfg 配置文件重命名为 zoo.cfg
在这里插入图片描述

配置文件介绍

# The number of milliseconds of each tick
# 用于计算基础的实际单位
# 设置tickTime,基本时间单位(毫秒),用于控制ZooKeeper的心跳间隔等参数
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
# 初始化时间
# 初始化连接超时时间,单位是tickTime的倍数
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
# 选举时间
# 跟随者与领导者之间同步的最大心跳数,单位是tickTime的倍数
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
# 配置zookeeper数据存放路径
# 指定数据目录,用于存储ZooKeeper的数据
dataDir=/export/server/zookeeper/data
dataLogDir=/export/server/zookeeper/logs

# the port at which the clients will connect
# 客户端连接端口,默认是2181
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

首先 zookeeper 目录下创建 zookeeper 数据和日志的存放目录,并且添加文件读写权限

mkdir data
chmod 777 data
mkdir logs
chmod 777 logs

集群配置

集群配置 2888:选举端口 3888:投票端口
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888

server.1=B:C:D

  • A是一个数字, 表示这个是第几号服务器
    集群模式下配置一个文件 myid,这个文件在 data,目录下,这个文件里面有一个数据就是 A 的值,Zookeeper 启动时读取此文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是哪个 server。
  • B是这个服务器的地址;
  • C是这个服务器Follower 与集群中的 Leader 服务器交换信息的端口;←
  • D是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口

在这里插入图片描述
后两台机器分别写入 2、3

echo "2" > myid
echo "3" > myid

修改环境变量-切换为root用户

export ZOOKEEPER_HOME=/export/server/zookeeper
export PATH=$PATH:$ZOOKEEPR_HOME/bin

source /etc/profile

分发
scp -r apache-zookeeper-3.5.9-bin/ hadoop@node2:$PWD
scp -r apache-zookeeper-3.5.9-bin/ hadoop@node3:$PWD

启动Zookeeper
bin/
在这里插入图片描述
在这里插入图片描述

3. 配置StandAlone-HA集群

前提: 确保Zookeeper 和 HDFS 均已经启动
先在spark-env.sh中, 删除或者注释: SPARK_MASTER_HOST=node1
在这里插入图片描述

原因: 配置文件中固定master是谁, 那么就无法用到zk的动态切换master功能了.

spark-env.sh中, 增加:

SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node1:2181,node2:2181,node3:2181 -Dspark.deploy.zookeeper.dir=/spark-ha"
# spark.deploy.recoveryMode 指定HA模式 基于Zookeeper实现
# 指定Zookeeper的连接地址
# 指定在Zookeeper中注册临时节点的路径

在这里插入图片描述

将spark-env.sh 分发到每一台服务器上

scp spark-env.sh node2:/export/server/spark/conf/
scp spark-env.sh node3:/export/server/spark/conf/
在这里插入图片描述

停止当前StandAlone集群

sbin/stop-all.sh

在这里插入图片描述

启动集群:

# 在node1上 启动一个master 和全部worker
sbin/start-all.sh

在这里插入图片描述

# 注意, 下面命令在node2上执行
sbin/start-master.sh
# 在node2上启动一个备用的master进程

在这里插入图片描述
在这里插入图片描述
测试主备切换
4.模拟node1宕机

jps
kill -9 进程id
在这里插入图片描述
5.再次查看web-ui

http://node1:8080/
在这里插入图片描述

http://node2:8080/
在这里插入图片描述

五. Spark On YARN – 重点

1. 环境搭建

1.1整合YARN集群

cd /export/server/spark/conf
vim spark-env.sh

HADOOP_CONF_DIR=/export/server/hadoop/etc/hadoop
YARN_CONF_DIR=/export/server/hadoop/etc/hadoop

1.2 配置YARN历史服务器并关闭资源检查

cd /export/server/hadoop/etc/hadoop/yarn-site.xml

<configuration>
<property>
  <name>yarn.resourcemanager.hostname</name>
  <value>node1</value>
  <description>resourcemanager设置在node1节点</description>
</property>
<property>
  <name>yarn.nodemanager.local-dirs</name>
  <value>/data/nm-local</value>
  <description>NodeManager中间数据本地存储路径</description>
</property>
<property>
  <name>yarn.nodemanager.log-dirs</name>
  <value>/data/nm-log</value>
  <description>NodeManager数据日志本地存储路径</description>
</property>
<property>
  <name>yarn.nodemanager.aux-services</name>
  <value>mapreduce_shuffle</value>
  <description>为MapReduce程序开启shuffle服务</description>
</property>
<property>
  <name>yarn.log.server.url</name>
</property>
<property>
  <name>yarn.web-proxy.address</name>
  <value>node1:8089</value>
  <description>代理服务器主机和端口</description>
</property>
<property>
  <name>yarn.log-aggregation-enable</name>
  <value>true</value>
  <description>开启日志聚合</description>
</property>
<property>
  <name>yarn.nodemanager.remote-app-log-dir</name>
  <value>/data/nm-local</value>
  <description>NodeManager中间数据本地存储路径</description>
</property>
<property>
  <name>yarn.nodemanager.log-dirs</name>
  <value>/data/nm-log</value>
  <description>NodeManager数据日志本地存储路径</description>
</property>
<property>
  <name>yarn.nodemanager.aux-services</name>
  <value>mapreduce_shuffle</value>
  <description>为MapReduce程序开启shuffle服务</description>
</property>
<property>
  <name>yarn.log.server.url</name>
</property>
<property>
  <name>yarn.web-proxy.address</name>
  <value>node1:8089</value>
  <description>代理服务器主机和端口</description>
</property>
<property>
  <name>yarn.log-aggregation-enable</name>
  <value>true</value>
  <description>开启日志聚合</description>
</property>
<property>
  <name>yarn.nodemanager.remote-app-log-dir</name>
  <value>/tmp/logs</value>
  <description>程序日志HDFS存储路径</description>
</property>
<property>
  <name>yarn.resourcemanager.scheduler.class</name>
  <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
  <description>选择公平调度器</description>
</property>
<property>
        <name>yarn.nodemanager.pmem-check-enabled</name>
        <value>false</value>
    </property>
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>

</configuration>

配置完成要分发
cd /export/server/hadoop/etc/hadoop

scp -r yarn-site.xml node2:`pwd`
scp -r yarn-site.xml node3:`pwd`

1.3 配置Spark历史服务器与YARN整合

在YARN集群上可以看大spark的一些历史记录

  • 修改 spark-default.conf

进入配置目录
cd /export/server/spark/conf
修改文件名称
mv spark-defaults.conf.template spark-defaults.conf
添加内容

spark.eventLog.enabled                  true
spark.eventLog.dir                      hdfs://node1:8020/sparklog/
spark.eventLog.compress                 true
spark.yarn.historyServer.address        node1:18080
spark.yarn.jars                         hdfs://node1:8020/spark/jars/*

在HDFS下创建文件
创建 spark/jar hadoop fs -mkdir -p /spark/jar
创建sparklog hadoop fs -mkdir /sparklog

  • 修改日志级别

修改名称 mv log4j.properties.template log4j.priperties
修改日志级别
在这里插入图片描述

  • 分发:
 scp -r spark-env.sh node2:`pwd`
 scp -r spark-env.sh node3:`pwd`
 scp -r spark-defaults.conf node2:`pwd`
 scp -r spark-defaults.conf node3:`pwd`
 scp -r log4j.properties node2:`pwd`
 scp -r log4j.properties node3:`pwd`

1.4 配置Spark依赖的jar

  • 在HDFS上创建存储spark相关的jar包目录

hadoop fs -mkdir -p /spark/jars

  • 上传$SPARK_HOME/jars下所有的jar包到HDFS

hadoop fs -put /export/server/spark/jars/* /spark/jars
检查上传是否成功
hadoop fs -ls /spark/jars

1.5 启动服务

start-dfs.sh
start-yarn.sh

jps
在这里插入图片描述
mapred --daemon start historyserver
在这里插入图片描述
启动Spark的历史服务
/export/server/spark/sbin/start-history-server.sh
在这里插入图片描述

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

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

相关文章

深入挖掘C语言 ---- 文件操作

目录 1. 文件的打开和关闭1.1 流和标准流1.1.1流1.1.2标准流 1.2 文件指针1.3 文件的打开和关闭 2. 顺序读写3. 随机读写3.1 fseek3.2 ftell3.3 rewind 4. 读取结束判定 正文开始 1. 文件的打开和关闭 1.1 流和标准流 1.1.1流 我们程序的数据需要输出到各种外部设备, 也需要…

小白也能看懂的BEV感知技术(二)

1. 引言 在自动驾驶的领域中&#xff0c;BEV&#xff08;Birds Eye View&#xff0c;鸟瞰图&#xff09;感知技术扮演着至关重要的角色。它允许自动驾驶车辆从上帝视角“看到”周围的环境&#xff0c;就像一只鸟从空中俯瞰地面一样。这项技术对于理解车辆周围的复杂场景至关重…

【Linux系统】地址空间 Linux内核进程调度队列

1.进程的地址空间 1.1 直接写代码&#xff0c;看现象 1 #include<stdio.h>2 #include<unistd.h>3 4 int g_val 100;5 6 int main()7 {8 int cnt 0;9 pid_t id fork();10 if(id 0)11 {12 while(1)13 {14 printf(&…

javaagent使用

Java Agent是什么&#xff1f; Java Agent是Java平台提供的一个强大工具&#xff0c;它可以在运行时修改或增强Java应用程序的行为。是在JDK1.5以后引入的&#xff0c;它能够在不影响正常编译的情况下修改字节码&#xff0c;相当于是在main方法执行之前的拦截器&#xff0c;也叫…

Python | Leetcode Python题解之第32题最长有效括号

题目&#xff1a; 题解&#xff1a; class Solution:def longestValidParentheses(self, s: str) -> int:stack[]maxL0nlen(s)tmp[0]*n #标记数组cur0for i in range(n):if s[i](:stack.append(i)else:if stack:jstack.pop()if s[j](:tmp[i],tmp[j]1,1 #匹配成…

【C++】:C++关键字,命名空间,输入输出,缺省参数

目录 一&#xff0c;C关键字(C98)二&#xff0c;命名空间2.1 命名冲突2.2 关键字namespace2.2.1 命名空间中可以定义变量/函数/类型2.2.2 命名空间可以嵌套2.2.3 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。 2.3 命名空间的使用2.3.1 指定…

多模态AnyGPT——整合图像、语音和文本多模态大规模语言模型算法原理与实践

概述 大规模语言模型在理解和生成人类语言方面具有非凡的能力&#xff0c;但迄今为止&#xff0c;它们的能力主要局限于文本处理。然而&#xff0c;现实世界是一个多模式的环境&#xff0c;信息通过视觉、听觉和触觉等多种感官进行交换。融入这种多样性是开发下一代系统的主要…

桥接模式【结构型模式C++】

1.概述 桥接模式是一种结构型设计模式&#xff0c;是用于把抽象化与实现化解耦&#xff0c;使得二者可以独立变化。这种类型的设计模式属于结构型模式&#xff0c;它通过提供抽象化和实现化之间的桥接结构&#xff0c;来实现二者的解耦。 这种模式涉及到一个作为桥接的接口&am…

高斯溅射融合之路(一)- webgl渲染3d gaussian splatting

大家好&#xff0c;我是山海鲸的技术负责人。之前已经写了一个GIS融合系列。其实CesiumJS的整合有相当的难度&#xff0c;同时也有很多方面的工作&#xff0c;很难在几篇文章内写完&#xff0c;整个山海鲸团队也是投入了接近两年的时间&#xff0c;才把周边整套工具链进行了完善…

算法复杂度分析笔记

基本定义间的关系 算法介绍 算法分析 时间复杂度 用数量级刻画&#xff1a;忽略所有低次幂项和系数 eg1: eg2: eg3: eg4: 小结 空间复杂度 eg: 总结

Vue3从入门到实践:深度了解新组件

1.Teleport 概念&#xff1a;Teleport&#xff08;传送门&#xff09;是一个新的特性&#xff0c;用于在DOM中的任意位置渲染组件。它允许你将组件的内容渲染到DOM中的另一个位置&#xff0c;而不受组件层次结构的限制。 下面举出例子解释&#xff1a; 1.新建App.vue文件作…

YOLOv9改进策略 | Neck篇 | 2024.1最新MFDS-DETR的HS-FPN改进特征融合层(轻量化Neck、全网独家首发)

一、本文介绍 本文给大家带来的改进机制是最近这几天最新发布的改进机制MFDS-DETR提出的一种HS-FPN结构&#xff0c;其是一种为白细胞检测设计的网络结构&#xff0c;主要用于解决白细胞数据集中的多尺度挑战。它的基本原理包括两个关键部分&#xff1a;特征选择模块和特征融合…

vue快速入门(三十一)vscod开发vue需要下载的插件

步骤很详细&#xff0c;直接上教程 上一篇 暂时就这两样足矣&#xff0c;有新的以后再更新&#xff08;别下载太多&#xff0c;可能会冲突&#xff09; 测试一下&#xff1a; 提示功能&#xff1a; 代码补全功能&#xff1a;

基于弹簧鞘复合纱和迁移学习算法的可穿戴人体重构和智能试衣系统

研究背景 在信息时代和元宇宙的背景下&#xff0c;虚拟服装设计对满足服装行业的个性化需求至关重要。与传统方法不同&#xff0c;虚拟试衣节省时间、方便客户&#xff0c;并提供多样化的款式。准确得测量人体围度并重构出人体的模型是虚拟试衣的关键。为了实现动态人体重构&a…

第Y7周:训练自己的数据集

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制&#x1f680; 文章来源&#xff1a;K同学的学习圈子 目录 一、下载YOLOv8 二、配置环境 三、准备工作 四、运行 出现报错&#xff1a;…

《QT实用小工具·三十一》基于QT开发的访客管理平台demo2

1、概述 源码放在文章末尾 该项目为访客管理平台demo&#xff0c;包含主界面、系统设置、警情查询、调试帮助、用户退出功能。 项目部分代码如下&#xff1a; #pragma execution_character_set("utf-8")#include "frmmain.h" #include "ui_frmmain…

使用不锈钢微型导轨的优势!

微型导轨是一种专门用于在紧凑空间内执行高精度的机器运动控制的导轨设备。其特点是尺寸小、精确度高、刚性好、平稳性好以及使用寿命长。微型导轨的材质种类多样&#xff0c;一般包括钢、不锈钢、铝合金等。目前来说&#xff0c;不锈钢材质的使用率最为频繁&#xff0c;那么使…

python中中英文打印对齐解决方案

在python中&#xff0c;有时候会出现中英文混合输出的情形&#xff0c;但是由于中文默认是全角格式&#xff08;一个中文字符占用两个字符宽度&#xff09;&#xff0c;这会对python原生的print函数带来一些障碍。尤其是用户用print对齐输出的时候&#xff0c;这种差异会导致文…

揭秘网红主播美颜工具:探秘美颜SDK的技术奥秘

在如今的网络直播平台上&#xff0c;越来越多的主播通过美颜工具来提升自己的形象&#xff0c;吸引更多的粉丝和观众。美颜技术的不断发展使得主播们能够在镜头前展现出更加完美的容颜&#xff0c;让观众眼前一亮。 一、美颜SDK的概念 美颜SDK&#xff0c;即美颜软件开发工具…

Bert语言大模型基础

一、Bert整体模型架构 基础架构是transformer的encoder部分&#xff0c;bert使用多个encoder堆叠在一起。 主要分为三个部分&#xff1a;1、输入部分 2、注意力机制 3、前馈神经网络 bertbase使用12层encoder堆叠在一起&#xff0c;6个encoder堆叠在一起组成编码端&#xf…