当前位置: 首页 > article >正文

Spark的Standalone集群环境安装

一.简介

与MR对比:
 

概念MR+YARNSpark Standalone
主节点ResourceManagerMaster
从节点NodeManagerWorker
计算进程MapTask,ReduceTaskExecutor

架构:普通分布式主从架构

主:Master:管理节点:管理从节点、接客、资源管理和任务

调度,等同于YARN中的ResourceManager

从:Worker:计算节点:负责利用自己节点的资源运行主节点

分配的任务

功能:提供分布式资源管理和任务调度,基本上与YARN是一致的

看起来很像yarn ,其实作用和yarn一样,是spark自带的计算引擎。

注意:集群环境的每一台服务器都要Annaconda ,否则会出现python3 找不到的错误!!

二.Standalone集群部署

 使用的资源如下:虚拟机中使用的Anaconda,具体:Anaconda3-2021.05-Linux-x86-64,spark使用需要资源-CSDN文库

虚拟机使用的spark,详情:spark-3.1.2-bin-hadoop3.2.tgz资源-CSDN文库

 首先在所有服务器按如下安装Anaconda:

上传,或者同步:
xsync.sh /opt/modules/Anaconda3-2021.05-Linux-x86_64.sh
# 添加执行权限
chmod u+x Anaconda3-2021.05-Linux-x86_64.sh
# 执行
sh ./Anaconda3-2021.05-Linux-x86_64.sh
# 过程
#第一次:【直接回车,然后按q】
   Please, press ENTER to continue
   >>>
#第二次:【输入yes】
 Do you accept the license terms? [yes|no]
 [no] >>> yes
#第三次:【输入解压路径:/opt/installs/anaconda3】
 [/root/anaconda3] >>> /opt/installs/anaconda3
 #第四次:【输入yes,是否在用户的.bashrc文件中初始化
Anaconda3的相关内容】
 Do you wish the installer to initialize  Anaconda3
   by running conda init? [yes|no]
   [no] >>> yes

刷新环境变量:
# 刷新环境变量
source /root/.bashrc
# 激活虚拟环境,如果需要关闭就使用:conda deactivate
conda activate
配置环境变量:
# 编辑环境变量
vi /etc/profile
# 添加以下内容
# Anaconda Home
export ANACONDA_HOME=/opt/installs/anaconda3
export PATH=$PATH:$ANACONDA_HOME/bin
制作软链接:
# 刷新环境变量
source /etc/profile
小结:实现Linux机器上使用Anaconda部署Python

3:单机部署:Spark Python Shell
目标:掌握Spark Shell的基本使用
实施
功能:提供一个交互式的命令行,用于测试开发Spark的程序代码
Spark的客户端bin目录下:提供了多个测试工具客户端
启动
核心
# 创建软连接
ln -s /opt/installs/anaconda3/bin/python3 /usr/bin/python3
# 验证
echo $ANACONDA_HOME

 然后在自己使用的虚拟机上安装spark:

# 解压安装
cd /opt/modules
tar -zxf spark-3.1.2-bin-hadoop3.2.tgz -C /opt/installs
# 重命名
cd /opt/installs
mv spark-3.1.2-bin-hadoop3.2 spark-standalone
# 重新构建软连接
rm -rf spark
ln -s spark-standalone spark

去修改spark配置文件:

cd /opt/installs/spark/conf
mv spark-env.sh.template spark-env.sh
vim spark-env.sh

修改如下:

export JAVA_HOME=/opt/installs/jdk
export HADOOP_CONF_DIR=/opt/installs/hadoop/etc/hadoop
export SPARK_MASTER_HOST=bigdata01 # 主节点所在的地址
export SPARK_MASTER_PORT=7077 #主节点内部通讯端口,用于接收客户端请求
export SPARK_MASTER_WEBUI_PORT=8080 #主节点用于供外部提供浏览器web访问的端口
export SPARK_WORKER_CORES=1     # 指定这个集群总每一个从节点能够使用多少核CPU
export SPARK_WORKER_MEMORY=1g   #指定这个集群总每一个从节点能够使用多少内存
export SPARK_WORKER_PORT=7078
export SPARK_WORKER_WEBUI_PORT=8081
export SPARK_DAEMON_MEMORY=1g  # 进程自己本身使用的内存
export SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://bigdata01:9820/spark/eventLogs/ -Dspark.history.fs.cleaner.enabled=true"
# Spark中提供了一个类似于jobHistoryServer的进程,就叫做HistoryServer, 用于查看所有运行过的spark程序

在HDFS上创建程序日志存储目录

首先如果没有启动hdfs,需要启动一下

启动
start-dfs.sh
# 创建程序运行日志的存储目录
hdfs dfs -mkdir -p /spark/eventLogs/

继续修改配置文件:

mv spark-defaults.conf.template spark-defaults.conf
vim spark-defaults.conf

添加如下:“

# 末尾
spark.eventLog.enabled           true
spark.eventLog.dir              hdfs://bigdata01:9820/spark/eventLogs
spark.eventLog.compress              true

在workers:从节点地址配置文件

mv workers.template workers
vim workers
# 删掉localhost,添加自己的主机名
bigdata01
bigdata02
bigdata03

修改日志文件,可有可无

mv log4j.properties.template log4j.properties
vim log4j.properties

# 19行:修改日志级别为WARN
log4j.rootCategory=WARN, console

log4j的5种 级别  debug --> info --> warn --error -->fatal

 为什么要修改?因为我们运行的时候info非常多,比较影响体验,而且也不是报错,对我们一般来说也没什么用。所以把它修改成更高一级的warn。因此说这一步可有可无,做了可以优化使用体验,但是不做也没有任何影响。

同步集群:

xsync.sh /opt/installs/spark-standalone/

使用脚本:
虚拟机中使用的分发文件,和分发命令脚本资源-CSDN文库

可以直接把虚拟机的文件分发给集群中的其他机器

分发完成在其他机器创建软链接:

cd /opt/installs/
ln -s spark-standalone spark

换个思路,是否可以同步软链接:
xsync.sh /opt/installs/spark

集群启动:

启动master:
cd /opt/installs/spark
sbin/start-master.sh
启动所有worker:
sbin/start-workers.sh
如果你想启动某一个worker
sbin/start-worker.sh

启动日志服务:
sbin/start-history-server.sh

要想关闭某个服务,将start换为stop

master的监控页面:
http://bigdata01:8080/

其中bigdata换成自己的ip

至此搭建完毕,来个圆周率测试一下:

# 提交程序脚本:bin/spark-submit
/opt/installs/spark/bin/spark-submit --master spark://bigdata01:7077 /opt/installs/spark/examples/src/main/python/pi.py 200


http://www.kler.cn/a/387631.html

相关文章:

  • 量化交易系统开发-实时行情自动化交易-3.4.2.Okex行情交易数据
  • 超子物联网HAL库笔记:定时器[外部模式]篇
  • 【Python TensorFlow】进阶指南(续篇一)
  • 扫雷游戏代码分享(c基础)
  • ESLint 使用教程(七):ESLint还能校验JSON文件内容?
  • 【ubuntu】单进程申请4GB内存
  • arcgis pro 学习笔记
  • 代码随想录算法训练营Day58 | 卡玛网 110.字符串接龙、卡玛网 105.有向图的完全可达性、卡玛网 106.岛屿的周长
  • MyBatisPlus 用法详解
  • SQL语句-MySQL
  • HuggingFace中from_pretrained函数的加载文件
  • Unity Shader分段式血条
  • 基于SSM社区便民服务管理系统JAVA|VUE|Springboot计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解
  • UE5 使用Niagara粒子制作下雨效果
  • Redis5:Redis实战篇内容介绍、短信登录
  • 青少年编程与数学 02-003 Go语言网络编程 19课题、Go语言Restful编程
  • C++笔记---lambda表达式
  • 【我的世界】宠物不认我了?怎么更换主人?(Java版)
  • 贪心算法day05(k次取反后最大数组和 田径赛马)
  • 贪心算法day3(最长递增序列问题)
  • 如何一步步实现api接入JD平台通过url获取item get商品详情字段信息
  • 常见前端代码分析面试题Javascript|html
  • 引入最新fluwx2.5.4的时候报错
  • 【企业级分布式系统】Linux-Rsync远程同步
  • vue3实现一个无缝衔接、滚动平滑的列表自动滚屏效果,支持鼠标移入停止移出滚动
  • (Go语言)条件判断与循环?切片和数组的关系?映射表与Map?三组关系傻傻分不清?本文带你了解基本的复杂类型与执行判断语句