一.简介
与MR对比:
概念 | MR+YARN | Spark Standalone |
主节点 | ResourceManager | Master |
从节点 | NodeManager | Worker |
计算进程 | MapTask,ReduceTask | Executor |
架构:普通分布式主从架构
主: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 Anaconda3by 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部署Python3:单机部署: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, consolelog4j的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