Spark环境搭建

news2024/12/26 11:49:02

文章目录

      • Spark 概述
        • Spark 发展历史
        • 使用现状
        • 官网介绍
        • 流行原因
        • 组成模块
      • Spark环境搭建-Local模式(本地模式)
      • Spark环境搭建-Standalone(独立集群)
      • Spark环境搭建-Standalone-HA(高可用)
      • Spark环境搭建-Spark-On-Yarn
          • 两种模式

Spark 概述

Spark 发展历史

  • 2009年诞生
  • 2014年成为Apache顶级项目
  • 2016年发布2.0
  • 2019年发布3.0
  • 2020年9月份发布3.0.1

使用现状

在这里插入图片描述

官网介绍

在这里插入图片描述

流行原因

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

组成模块

在这里插入图片描述


Spark环境搭建-Local模式(本地模式)

准备工作

  • JDK
  • ScalaSDK只需要在Windows安装即可
  • Spark安装包

原理

所谓的Local模式,就是不需要其他任何节点资源就可以在本地执行Saprk代码环境,一般用于教学,调试,演示等。

在这里插入图片描述

操作-开箱即用

  • 上传解压安装包
    tar -zxvf spark-3.0.3-bin-hadoop3.2.tgz

  • 创建软连接
    ln -s /opt/software/spark/spark-3.0.3-bin-hadoop3.2.tgz /opt/software/spark/spark-3.0.3

  • 查看安装目录

测试

  • 启动Spark交互式窗口

/opt/software/spark/spark-3.0.3/bin/spark-shell

在这里插入图片描述

  • 打开http:// node1:4040

在这里插入图片描述

  • 准备文件
    vi /opt/software/spark/spark-3.0.3/data/words.txt
hello scala
hello spark
  • 执行WordCount
val textFile = sc.textFile("file:///opt/software/spark/spark-3.0.3/data/words.txt")
val counts = textFile.flatMap(_.split(" ")).map((_,1)).reduceByKey(_ + _)
counts.collect

在这里插入图片描述


Spark环境搭建-Standalone(独立集群)

原理

在这里插入图片描述

操作

  • 集群规划

node1 :Master
node2 :worker/slave
node3 :worker/slave

  • 配置slaves/workers

进入配置目录
cd /opt/software/spark/spark-3.0.3/conf

修改配置文件名称
mv slaves.template slaves
vi slaves

内容如下:

node2
node3
  • 配置master

进入配置目录
cd /opt/software/spark/spark-3.0.3/conf

修改配置文件名称
mv spark-env.sh.template spark-env.sh

修改配置文件
vi spark-env.sh

增加如下内容:

## 设置JAVA安装目录
JAVA_HOME=/opt/software/java/jdk-11.0.2

## HADOOP软件配置文件目录,读取HDFS上文件和运行Spark在YARN集群时需要,先提前配上
HADOOP_CONF_DIR=/opt/software/hadoop/hadoop-3.2.2/etc/hadoop
YARN_CONF_DIR=/opt/software/hadoop/hadoop-3.2.2/etc/hadoop

## 指定spark老大Master的IP和提交任务的通信端口
#搭建高可用时,需要注释掉
SPARK_MASTER_HOST=node1
SPARK_MASTER_PORT=7077

SPARK_MASTER_WEBUI_PORT=8080

SPARK_WORKER_CORES=1
SPARK_WORKER_MEMORY=1g
  • 分发

将配置好的将 Spark 安装包分发给集群中其它机器
xsync /opt/software/spark/spark-3.0.3/conf

测试

  • 集群启动和停止

在主节点上启动spark集群
opt/software/spark/spark-3.0.3/sbin/start-all.sh

在主节点上停止spark集群
opt/software/spark/spark-3.0.3/sbin/stop-all.sh

在主节点上单独启动和停止Master:
start-master.sh
stop-master.sh

在从节点上单独启动和停止Worker(Worker指的是slaves配置文件中的主机名)

start-slaves.sh
stop-slaves.sh

  • 查看进程

jpsall (自己定义的查看脚本命令)

  • http://node1:8080

在这里插入图片描述

  • 启动spark-shell

/opt/software/spark/spark-3.0.3/bin/spark-shell --master spark://node1:7077
在这里插入图片描述

  • 提交WordCount任务

注意:上传文件到hdfs方便worker读取
上传文件到hdfs
hadoop fs -put /root/words.txt /wordcount/input/words.txt

目录如果不存在可以创建
hadoop fs -mkdir -p /wordcount/input
结束后可以删除测试文件夹
hadoop fs -rm -r /wordcount

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

在这里插入图片描述

  • 查看结果
    在这里插入图片描述

  • 查看spark任务的web-ui界面

http://node1:4040/jobs/

在这里插入图片描述

总结:

spark: 4040 任务运行web-ui界面端口

spark: 8080 spark集群web-ui界面端口

spark: 7077 spark提交任务时的通信端口

hadoop: 50070集群web-ui界面端口

hadoop:8020/9000(老版本) 文件上传下载通信端口

  • 停止集群

/opt/software/spark/spark-3.0.3/sbin/stop-all.sh


Spark环境搭建-Standalone-HA(高可用)

原理

在这里插入图片描述

操作

  • 启动zk

  • 修改配置

vi /opt/software/spark/spark-3.0.3/conf/spark-env.sh

注释

#SPARK_MASTER_HOST=node1

增加

SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node1:2181,node2:2181,node3:2181 -Dspark.deploy.zookeeper.dir=/spark-ha"
  • 分发配置

xsync /opt/software/spark/spark-3.0.3/conf

测试

  • 启动zookeeper
    myzookeeper.sh start

  • node1上启动Spark集群执行
    /opt/software/spark/spark-3.0.3/sbin/start-all.sh

  • 在node2上再单独只起个master:
    /opt/software/spark/spark-3.0.3/sbin/start-master.sh

  • 查看WebUI

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

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

  • 模拟node1宕机

jps
kill -9 进程id

  • 再次查看web-ui

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

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

  • 测试 wordCount

/opt/software/spark/spark-3.0.3/bin/spark-shell --master spark://node1:7077,node2:7077
在这里插入图片描述

运行:

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

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


Spark环境搭建-Spark-On-Yarn

原理

注意:
1.SparkOnYarn 的本质是把 Saprk 任务的class字节码文件打成 jar 包,上传到Yarn 集群的 JVM 中去执行
2.Spark集群的相关角色(JVM 进程)也会在在 Yarn 的 JVM 中运行
3.SparkOnYarn 需要:
	-  修改一些配置,使之支持 SparkOnYarn
	-  Spark 程序打成的 jar 包 -- 可以先使用示例程序的jar包 spark-examples_2.12-3.0.3.jar 也可以使用后续我们自己开发的jar包
	-  Spark任务的提交工具: bin/spark-submit
	-  Spark本省依赖的 jars:在Spark安装目录的jars中有,提交任务的时候会被上传到Yarn/HDFS,或者提前手动上传上
4.SparkOnYarn 不需要Spark集群环境,只需要一个单机版Spark解压包即可(有实例jar,有spark-submit,有依赖的jars)
5.SparkOnYarn 根据Driver运行在哪里分为两种模式:client 模式和 cluster 模式

注意:

在实际开发中, 大数据任务都有统一的资源管理和任务调度工具来进行管理! —Yarn使用的最多!

因为它成熟稳定, 支持多种调度策略:FIFO/Capcity/Fair

可以使用Yarn调度管理MR/Hive/Spark/Flink

准备工作

  • 关闭之前的Spark-Standalone集群

/opt/software/spark/spark-3.0.3/sbin/stop-all.sh

  • 配置Yarn历史服务器并关闭资源检查

/opt/software/hadoop/hadoop-3.2.2/etc/hadoop/yarn-site.xml

<configuration>

<!-- Site specific YARN configuration properties -->
	<!-- 指定 MR 走 shuffle -->
	 <property>
		 <name>yarn.nodemanager.aux-services</name>
		 <value>mapreduce_shuffle</value>
	 </property>
	 
	 <!-- 指定 ResourceManager 的地址-->
	 <property>
		 <name>yarn.resourcemanager.hostname</name>
		 <value>node2</value>
	 </property>

	  <!-- 设置yarn集群的内存分配方案 -->
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>20480</value>
    </property>
    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>2048</value>
    </property>
    <property>
        <name>yarn.nodemanager.vmem-pmem-ratio</name>
        <value>4</value>
    </property>
	 
	 <!-- 环境变量的继承 -->
	 <property>
		 <name>yarn.nodemanager.env-whitelist</name>
		 <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
 	</property>

 	 <!-- 开启日志聚集功能 -->
	<property>
		 <name>yarn.log-aggregation-enable</name>
		 <value>true</value>
	</property>

	
	<!-- 设置日志聚集服务器地址 -->
	<property> 
		 <name>yarn.log.server.url</name> 
		 <value>http://node1:19888/jobhistory/logs</value>
	</property>
	
	<!-- 设置日志保留时间为 7 天 -->
	<property>
		 <name>yarn.log-aggregation.retain-seconds</name>
		 <value>604800</value>
	</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>

注意:如果之前没有配置,现在配置了需要分发并重启yarn

  • 配置Spark的历史服务器和Yarn的整合

修改spark-defaults.conf

进入配置目录
cd /opt/software/spark/spark-3.0.3/conf

修改配置文件名称
mv spark-defaults.conf.template spark-defaults.conf
vi spark-defaults.conf

添加内容:

spark.eventLog.enabled                  true
spark.eventLog.dir                      hdfs://node1:8020/sparklog

spark.yarn.historyServer.address=node1:18080
spark.history.ui.port=18080

修改spark-env.sh
修改配置文件
vi /opt/software/spark/spark-3.0.3/conf/spark-env.sh

增加如下内容:

## 配置spark历史日志存储地址
SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.fs.logDirectory=hdfs://node1:8020/sparklog -Dspark.history.fs.cleaner.enabled=true"

注意:
sparklog需要手动创建
hadoop fs -mkdir -p /sparklog

分发-可选
如果只在node1上提交spark任务到yarn,那么不需要分发

  • 配置依赖的Spark 的jar包

在HDFS上创建存储spark相关jar包的目录
hadoop fs -mkdir -p /spark/jars/

上传$SPARK_HOME/jars所有jar包到HDFS
hadoop fs -put /opt/software/spark/spark-3.0.3/jars/* /spark/jars/

在node1上修改spark-defaults.conf
vim /opt/software/spark/spark-3.0.3/conf/spark-defaults.conf

添加内容

spark.yarn.jars  hdfs://node1:8020/spark/jars/*

分发同步-可选

  • 启动服务

启动启动HDFS、YARN、historyserver 可以参考文章Hadoop集群搭建

启动Spark HistoryServer服务,,在node1执行命令

/opt/software/spark/spark-3.0.3/sbin/start-history-server.sh

HistoryServer服务WEB UI页面:

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

Spark HistoryServer服务WEB UI页面:

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

两种模式
  • client 模式(了解)

client 模式下:

spark的Driver驱动程序,运行在提交任务的客户端上,和集群的通信成本高
因为Driver在客户端,所以Driver中的程序执行结果可以在客户端控制台看到
在这里插入图片描述

  • cluster 模式(开发使用)

cluster模式下:

spark的Driver驱动程序,运行在Yarn集群上,和集群的通信成本低
且Driver是交给Yarn管理的,如果失败会由Yarn进行重启
因为Driver运行在Yarn上,所以Driver中的程序结果输出在客户端控制台上看不见,在Yarn日志中可以看

在这里插入图片描述

操作

  • 需要Yarn集群

  • 历史服务器

  • 提交任务的的客户端工具-spark-submit命令

  • 待提交的spark任务/程序的字节码–可以使用示例程序

client 模式

SPARK_HOME=/opt/software/spark/spark-3.0.3
/opt/software/spark/spark-3.0.3/bin/spark-submit \
--master yarn  \
--deploy-mode client \
--driver-memory 512m \
--driver-cores 1 \
--executor-memory 512m \
--num-executors 2 \
--executor-cores 1 \
--class org.apache.spark.examples.SparkPi \
${SPARK_HOME}/examples/jars/spark-examples_2.12-3.0.3.jar \
10
  • 查看web界面

http://node1:8088/cluster

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

cluster 模式

SPARK_HOME=/opt/software/spark/spark-3.0.3
${SPARK_HOME}/bin/spark-submit \
--master yarn \
--deploy-mode cluster \
--driver-memory 512m \
--executor-memory 512m \
--num-executors 1 \
--class org.apache.spark.examples.SparkPi \
${SPARK_HOME}/examples/jars/spark-examples_2.12-3.0.3.jar \
10

查看web界面

http://node2:8088/cluster

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

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

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

相关文章

Java笔记-线程中断

线程的中断 1.应用场景&#xff1a; 假设从网络下载一个100M的文件&#xff0c;如果网速很慢&#xff0c;用户等得不耐烦&#xff0c;就可能在下载过程中点“取消”&#xff0c;这时&#xff0c;程序就需要中断下载线程的执行。 2.常用中断线程的方法&#xff1a; 1.使用标…

Canvas鼠标滚轮缩放以及画布拖动(图文并茂版)

Canvas鼠标滚轮缩放以及画布拖动 本文会带大家认识Canvas中常用的坐标变换方法 translate 和 scale&#xff0c;并结合这两个方法&#xff0c;实现鼠标滚轮缩放以及画布拖动功能。 Canvas的坐标变换 Canvas 绘图的缩放以及画布拖动主要通过 CanvasRenderingContext2D 提供的 …

C++设计模式(13)——装饰模式

亦称&#xff1a; 装饰者模式、装饰器模式、Wrapper、Decorator 意图 装饰模式是一种结构型设计模式&#xff0c; 允许你通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。 问题 假设你正在开发一个提供通知功能的库&#xff0c; 其他程序可使用它向用户发…

注册ChatGPT的辛酸血泪史,不能算教程的教程

注册ChatGPT的血泪史 2月份了&#xff0c;改论文降重了&#xff0c;所以想搞个ChatGPT玩玩&#xff0c;本以为有渠道能顺序上车&#xff0c;但是看了很多教程&#xff0c;也进了很多交流群&#xff0c;都喵的(要不是卖号&#xff0c;租体验&#xff0c;liar)&#xff0c;所以自…

java ssm高校教材管理平台 idea maven

设计并且实现一个基于JSP技术的高校教材管理平台的设计与实现。采用MYSQL为数据库开发平台&#xff0c;SSM框架&#xff0c;Tomcat网络信息服务作为应用服务器。高校教材管理平台的设计与实现的功能已基本实现&#xff0c;主要学生、教材管理、学习教材、教材入库、教材领取、缴…

C语言 大数加法 大数乘法

最近刷题&#xff0c;总遇到大数加法&#xff08;浮点数&#xff09;和乘法问题(阶乘)&#xff0c;总结一下思路。 大数乘法主要思想&#xff1a;编程实现竖式乘法&#xff08;小学时候学的列竖式计算乘法&#xff09;创建一个很大的数组&#xff0c;用于存储大数的每一位。&am…

Android Q WiFi 代码框架

同学,别退出呀,我可是全网最牛逼的 WIFI/BT/GPS/NFC分析博主,我写了上百篇文章,请点击下面了解本专栏,进入本博主主页看看再走呗,一定不会让你后悔的,记得一定要去看主页置顶文章哦。 1 wifi 架构图 备注:在Android 9.0中,WiFi的状态处理在WifiStateMachine中进行,到…

c语言数据结构-图的遍历

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 定义&#xff1a; 两种遍历方法&#xff1a; 深度优先搜索&#xff08;DFS&#xff09;&#xff1a; …

ElasticJob-Lite架构篇 - 认知分布式任务调度ElasticJob-Lite

前言 本文基于 ElasticJob-Lite 3.x 版本展开分析。 如果 Quartz 集群中有多个服务端节点&#xff0c;任务决定在哪个服务端节点上执行的呢&#xff1f; Quartz 采用随机负载&#xff0c;通过 DB 抢占下一个即将触发的 Trigger 绑定的任务的执行权限。 在 Quartz 的基础上&…

从0到1一步一步玩转openEuler--10 openEuler基础配置-设置kdump

10 openEuler基础配置-设置kdump 文章目录10 openEuler基础配置-设置kdump10.1 设置kdump10.1.1 设置kdump预留内存10.1.1.1 预留内存参数格式10.1.2 预留内存推荐值10.1.3 禁用网络相关驱动10.1 设置kdump 本节介绍如何设置kdump预留内存及修改kdump配置文件参数。 10.1.1 设…

写python爬虫,你永远绕不过去代理问题

如果你想要从事 Python 爬虫相关岗位&#xff0c;那你一定会接触到代理问题&#xff0c;随之而来的就是下面 5 大代理知识点。 什么是代理&#xff1a;代理是网络中间人&#xff08;中间商赚插件&#xff09;&#xff0c;它代表用户发送网络请求&#xff0c;隐藏用户的真实身份…

JDY-31蓝牙模块使用指南

前言 本来是想买个hc-05&#xff0c;这种非常常用的模块&#xff0c;但是在优信电子买的时候&#xff0c;说有个可以替代的&#xff0c;没注意看&#xff0c;买回来折腾半天。 这个模块是从机模块&#xff0c;蓝牙模块分为主机从机和主从一体的&#xff0c;主机与从机的区别就…

【安全】nginx反向代理+负载均衡上传webshel

Nginx负载均衡下上传webshell 什么是反向代理&#xff1f; 正向代理就是代替客户端进行各种服务的访问以及获取&#xff1b;那么反向代理自然就是代替服务器进行事务处理&#xff0c;就是此时的代理服务器负责将用户的各项请求做一个汇总、分类&#xff0c;将其分发到不同的服务…

网络抓包方式复现Tomcat- AJP协议文件读取/命令执行漏洞(CVE-2020-1938 / CNVD-2020-10487)

目录 测试是否安装成功​编辑 基础简介 Tomcat Connector(连接器) ​编辑Servlet(服务程序) Tomcat内部处理请求流程 Tomcat加载和处理jsp的流程图 抓包复现 需要将下图中抓取到的数据包修改一下 替换成二进制数据的形式&#xff1a; python版替换代码&#xff1a; 运…

WordPress网站日主题Ri主题RiProV2主题开启了验证码登录但是验证码配置不对结果退出登录后进不去管理端了

背景 WordPress网站日主题Ri主题RiProV2主题开启了验证码登录但是验证码配置不对结果退出登录后进不去管理端了;开启了腾讯云验证码防火墙但APPID,APPSecret没配置,结果在退出登录后,由于验证码验证失败管理端进不去了 提示如下:

自定义软件帮助文档(qt assistant实现)

网上搜了一下&#xff0c;软件的帮助文档&#xff0c;三个都可以&#xff1a;https://github.com/zealdocs/zeal&#xff0c;https://zealdocs.org/&#xff0c;看看这个博客说的 https://blog.csdn.net/libaineu2004/article/details/125028913&#xff0c;这个也是开源的&…

神经网络实战--使用迁移学习完成猫狗分类

前言&#xff1a; Hello大家好&#xff0c;我是Dream。 今天来学习一下如何使用基于tensorflow和keras的迁移学习完成猫狗分类&#xff0c;欢迎大家一起前来探讨学习~ 本文目录&#xff1a;一、加载数据集1.调用库函数2.加载数据集3.数据集管理二、猫狗数据集介绍1.猫狗数据集介…

【Spring(十一)】万字带你深入学习面向切面编程AOP

文章目录前言AOP简介AOP入门案例AOP工作流程AOP切入点表达式AOP通知类型AOP通知获取数据总结前言 今天我们来学习AOP,在最初我们学习Spring时说过Spring的两大特征&#xff0c;一个是IOC,一个是AOP,我们现在要学习的就是这个AOP。 AOP简介 AOP:面向切面编程,一种编程范式&#…

计算机网络自顶向下 -- 流水线,滑动窗口协议

流水线协议 Rdt3.0在停等操作的过程中浪费了大量的时间&#xff1a; 从而在Rdt 3.0上引入了流水线机制&#xff1a;为了提高资源利用率 流水线协议&#xff1a; 允许发送方在收到ACK之前连续发送多个分组&#xff0c;更大的序列号范围&#xff0c;同时发送方和/或接收方需要更…

关于自动驾驶高精定位的几大问题

交流群 | 进“传感器群/滑板底盘群”请加微信号&#xff1a;xsh041388交流群 | 进“汽车基础软件群”请加微信号&#xff1a;Faye_chloe备注信息&#xff1a;群名称 真实姓名、公司、岗位作者 | 许良定位是高等级自动驾驶的基础&#xff0c;但在高速NOA和城区NOA等场景中&…