Spark01

news/2024/5/3 19:41:55

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.mrgr.cn/p/41312603

相关文章

利用MLIR实现矩阵乘法的高性能GPU码生成:一些早期结果

利用MLIR实现矩阵乘法的高性能GPU码生成:一些早期结果 介绍了使用MLIR编译器基础设施在NVIDIA GPU上针对张量核生成代码的一些早期结果。当今高性能深度学习的最先进技术主要是由高度调优的库驱动的。这些库通常是由专业程序员手工优化与调优的,他们使用低级抽象,付出了巨大…

TiDB存储引擎TiKV揭秘

目录 一、TiKV 介绍 二、RocksDB 三、TiKV 与 RocksDB 架构 3.1 用户数据保存 3.2 TiKV 中 Region 一、TiKV 介绍 TiKV 是一个分布式事务型的键值数据库&#xff0c;提供了满足 ACID 约束的分布式事务接口&#xff0c;并且通过 Raft 协议保证了多副本数据一致性以及高可用。…

性能测试-数据库优化二(SQL的优化、数据库拆表、分表分区,读写分离、redis、数据库监控)

数据库优化 explain select 重点&#xff1a; type类型&#xff0c;rows行数&#xff0c;extra SQL的优化 在写on语句时&#xff0c;将数据量小的表放左边&#xff0c;大表写右边where后面的条件尽可能用索引字段&#xff0c;复合索引时&#xff0c;最好按复合索引顺序写wh…

MySQL中InnoDB的行级锁

InnoDB 实现了以下两种类型的行锁。 共享锁&#xff08;S&#xff09;&#xff1a;又称为读锁&#xff0c;简称S锁&#xff0c;共享锁就是多个事务对于同一数据可以共享一把锁&#xff0c;都能访问到数据&#xff0c;但是只能读不能修改。 排他锁&#xff08;X&#xff09;&am…

36. UE5 RPG在激活技能时使用蒙太奇动画

在上一篇文章里面&#xff0c;我们实现了一个简单的火球术&#xff0c;创建了火球术的火球&#xff0c;以及能发射它的技能。很简陋&#xff0c;在技能触发的时候&#xff0c;直接在武器的位置生成火球发射出去。在一篇文章里&#xff0c;我们要实现使用技能时&#xff0c;角色…

加强金融行业关键信息基础设施安全保护,有效防范网络安全风险

当前&#xff0c;随着数字化发展的不断深入&#xff0c;关键信息基础设施作为国家的重要战略资源&#xff0c;面临着国内外严峻的网络安全风险。为了确保国家安全&#xff0c;在国家发展各领域和全过程中&#xff0c;需要将安全发展贯穿始终&#xff0c;筑牢国家安全屏障。金融…

gemini国内怎么用

gemini国内怎么用 Google Gemini 作为一个尚处于研发阶段的大型语言模型&#xff0c;其具体功能和性能尚未公开&#xff0c;因此无法对其好用程度做出明确评价。 然而&#xff0c;基于 Google 在人工智能领域的领先地位和技术实力&#xff0c;我们可以对其潜力进行一些推测&a…

Discuz! X3.4 升级至 Discuz! X3.5 详细教程

第一步&#xff1a;从其他以前的 Discuz! X 版本升级Discuz! X3.4 请先升级到Discuz! X3.4&#xff0c;升级教程网上比较普遍&#xff0c;在此不再论述。 第二步&#xff1a;Discuz! X3.4 升级至 Discuz! X3.5 &#xff08;Discuz 从 X3.5 以后&#xff0c;不在发布GBK版本&…

java算法day2

螺旋矩阵搜索插入位置查找元素第一个位置和最后一个位置 螺旋矩阵 解法&#xff1a;模拟&#xff0c;核心在于你怎么转&#xff0c;还有就是处理边界&#xff0c;边界如何收缩&#xff0c;什么时候停止旋转。最内圈的时候怎么处理。 通过上图的模拟来解决这个问题&#xff1a;…

elmentui树形表格使用Sortable拖拽展开行时拖拽bug

1、使用elemntui的el-table使用Sortable进行拖拽&#xff0c;如下 const el this.$el.querySelector(.el-table__body-wrapper tbody) Sortable.create(el, {onEnd: (event) > {const { oldIndex, newIndex } event//拿到更新前后的下标即可完成数据的更新} })2、但是我这…

Spring Cloud学习笔记:Eureka集群搭建样例

这是本人学习的总结&#xff0c;主要学习资料如下 - 马士兵教育 1、项目架构2、Dependency3、项目启动类4、application.yml5、启动项目 1、项目架构 因为这是单机模拟集群搭建&#xff0c;为了方便管理就都放在了一个项目中。这次准备搭建三个项目server1, server2, server3 …

GAMS104 现代游戏引擎 2

渲染的难点可以分为一下三部分&#xff1a;如何计算入射光线、如何考虑材质以及如何实现全局光照。 渲染的难点之一在于阴影&#xff0c;或者说是光的可见性。如何做出合适的阴影效果远比想象中要难得多&#xff0c;在实践中往往需要通过大量的技巧才能实现符合人认知的阴影效…

《QT实用小工具·三十二》九宫格炫酷主界面

1、概述 源码放在文章末尾 项目实现了九宫格炫酷主界面&#xff0c;下面是项目demo演示&#xff1a; 项目部分代码如下&#xff1a; #pragma execution_character_set("utf-8")#include "frmmain.h" #include "ui_frmmain.h"frmMain::frmMain…

【VTKExamples::Meshes】第 十四期 ExtractEdges

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例ExtractEdges,并解析接口vtkExtractEdges,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~…

高通 Android 12 源码编译aidl接口

最近在封装系统sdk接口 于是每次需要更新aidl接口 &#xff0c;传统方式一般使用make update-api或者修改Android.mk文件&#xff0c;今天我尝试使用Android.bp修改 &#xff0c;Android 10之前在Android.mk文件修改&#xff0c;这里不做赘述。下面开始尝试修改&#xff0c;其实…

解决mac本git安装后找不到命令的问题

不熟悉mac配置&#xff0c;折腾了半天&#xff0c;记录一下。 1.问题描述2.解决方法 1.问题描述 从https://sourceforge.net/projects/git-osx-installer/files/下载的git安装包&#xff1a; 安装时提示&#xff1a; 这里的解决办法是按住control键再打开文件安装。 安装完…

javaee前后端交互

1.选择Java Enterprise创建项目 2.勾选Web Profile 3.项目名称 4.创建包和类 5.继承HttpServlet并重写方法doGet和doPost 6.在web.xml里添加代码 7.点击Add Configuration,进去后点击加号 8.选择选项 9.调整如图&#xff0c;后选择Deployment进入 10.点击加号选择第一个 11.…

ZeptoMail邮箱API发送邮件安全性如何保障?

ZeptoMail邮箱API发送邮件的方法&#xff1f;怎么配置API接口 ZeptoMail邮箱API作为一种高效、便捷的邮件发送方式&#xff0c;其安全性问题自然也备受关注。那么&#xff0c;ZeptoMail邮箱API发送邮件安全性究竟如何保障呢&#xff1f;接下来&#xff0c;AokSend将深入探讨这…

10. Spring MVC 程序开发

本文源码位置: Spring-MVC 1. Spring MVC 概要 摘自Spring官方&#xff1a; Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. The formal name, “Spring Web MVC,” comes …

豆瓣影评信息爬取 (爬虫)

代码块&#xff1a; from lxml import etree import requestsheaders{User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.0.0 }url_list[] for i in range(0,5):i*20urlsf"https:…