1.5 Spark集群部署
1.5.1 Spark部署模式
Local 多用于本地测试,如在eclipse,idea中写程序测试等。
Standalone 是Spark自带的一个资源调度框架,它支持完全分布式。
Yarn 生态圈里面的一个资源调度框架,Spark也是可以基于Yarn来计算的。
Mesos 资源调度框架,与Yarn类似。
1.5.2 环境准备
环境预准备,至少三台机器互通互联,免密登录,时间同步,安装好JDK1.8。
安装包下载:
http://archive.apache.org/dist
GitHub - apache/spark: Apache Spark - A unified analytics engine for large-scale data processing
1.5.3 Standalone模式
Spark自身节点运行的集群模式,也就是我们所谓的独立部署(Standalone)模式。Spark的Standalone模式体现了经典的master-slave模式。
集群规划:
基本条件:同步时间、免密登录、关闭防火墙、安装JDK1.8
qianfeng01 | qianfeng02 | qianfeng03 | |
---|---|---|---|
spark | Master Worker | Worker | Worker |
1)解压缩文件
将spark-3.1.2-bin-hadoop3.2.tgz文件上传到qianfeng01并解压缩在指定位置
[root@qianfeng01 local]# tar -zxvf /home/spark-3.1.2-bin-hadoop3.2.tgz -C /usr/local/ [root@qianfeng01 local]# mv /usr/local/spark-3.1.2-bin-hadoop3.2/ /usr/local/spark-3.1.2
2)修改配置文件
2.1) 进入解压缩后路径的conf目录,修改workers.template文件名为workers
[root@qianfeng01 local]# mv /usr/local/spark-3.1.2/conf/workers.template /usr/local/spark-3.1.2/conf/workers
2.2) 修改workers文件,添加worker节点 [root@qianfeng01 local]# vi /usr/local/spark-3.1.2/conf/workers
qianfeng01 qianfeng02 qianfeng03
2.3) 修改spark-env.sh.template文件名为spark-env.sh
[root@qianfeng01 local]# mv /usr/local/spark-3.1.2/conf/spark-env.sh.template /usr/local/spark-3.1.2/conf/spark-env.sh
2.4) 修改spark-env.sh文件,添加JAVA_HOME环境变量和集群对应的master节点 [root@qianfeng01 local]# vi /usr/local/spark-3.1.2/conf/spark-env.sh
export JAVA_HOME=/usr/local/jdk1.8.0_152 SPARK_MASTER_HOST=qianfeng01 SPARK_MASTER_PORT=7077
注意:7077端口,相当于hadoop3内部通信的9820端口,此处的端口需要确认自己的Hadoop配置
3)分发配置好的内容到其他节点
scp -r /usr/local/spark-3.1.2/ qianfeng02:/usr/local/ scp -r /usr/local/spark-3.1.2/ qianfeng03:/usr/local/
4)配置spark环境变量
vi /etc/profile #追加如下内容 export JAVA_HOME=/usr/local/jdk1.8.0_152 export HADOOP_HOME=/usr/local/hadoop-3.3.1/ export SPARK_HOME=/usr/local/spark-3.1.2/ export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SPARK_HOME/bin:$SPARK_HOME/sbin: #将profile分发到qianfeng02和qianfeng03上的etc目录中 [root@qianfeng01 local]# scp /etc/profile qianfeng02:/etc/ [root@qianfeng01 local]# scp /etc/profile qianfeng03:/etc/ #再到qianfeng01、qianfeng02和qiafeng03服务器执行刷新环境变量 [root@qianfeng01 ~]# source /etc/profile [root@qianfeng01 ~]# which spark-shell /usr/local/spark-3.1.2/bin/spark-shell [root@qianfeng02 ~]# source /etc/profile [root@qianfeng02 ~]# which spark-shell /usr/local/spark-3.1.2/bin/spark-shell [root@qianfeng03 ~]# source /etc/profile [root@qianfeng03 ~]# which spark-shell /usr/local/spark-3.1.2/bin/spark-shell
5) spark启动集群 进入到安装目录找sbin目录进入 /usr/local/spark-3.1.2 启动 ./sbin/start-all.sh
[root@qianfeng01 local]# cd /usr/local/spark-3.1.2 [root@qianfeng01 spark-3.1.2]# ./sbin/start-all.sh
6) 查看spark集群的进程
[root@qianfeng01 spark-3.1.2]# jps-cluster.sh ---------- qianfeng01 ---------- 14785 NodeManager 16451 Master 4772 NameNode 4982 DataNode 14601 ResourceManager 9006 JobHistoryServer 16526 Worker ---------- qianfeng02 ---------- 8708 Worker 2712 DataNode 2826 SecondaryNameNode 7723 NodeManager ---------- qianfeng03 ---------- 9877 NodeManager 10967 Worker 2168 DataNode
7) 查看spark集群的master的web ui spark提供webUI界面端口是一样8080或8081,内部通信7077 master的webUI : http://qianfeng01:8080 worker的Web UI : http://qianfeng01:8081
8) 基于spark standalone集群提交作业
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://qianfeng01:7077 \
--executor-memory 512m \
--total-executor-cores 2 \
/usr/local/spark-3.1.2/examples/jars/spark-examples_2.12-3.1.2.jar 100
结果如下:
......
22/08/31 16:33:53 INFO TaskSetManager: Finished task 99.0 in stage 0.0 (TID 99) in 10 ms on 192.168.10.102 (executor 1) (100/100)
22/08/31 16:33:53 INFO TaskSchedulerImpl: Removed TaskSet 0.0, whose tasks have all completed, from pool
22/08/31 16:33:53 INFO DAGScheduler: ResultStage 0 (reduce at SparkPi.scala:38) finished in 2.709 s
22/08/31 16:33:53 INFO DAGScheduler: Job 0 is finished. Cancelling potential speculative or zombie tasks for this job
22/08/31 16:33:53 INFO TaskSchedulerImpl: Killing all running tasks in stage 0: Stage finished
22/08/31 16:33:53 INFO DAGScheduler: Job 0 finished: reduce at SparkPi.scala:38, took 2.838844 s
Pi is roughly 3.1413319141331915
......
1.5.4 Yarn 模式集群部署
需要注意:配置yarn的文件中不要保留标签和队列,容易造成后续提交到Yarn中无法执行的效果,队列可以保留但是内存给的足够到时没有什么问题
独立部署(Standalone)模式由Spark自身提供计算资源,无需其他框架提供资源。这种方式降低了和其他第三方资源框架的耦合性,独立性非常强。Spark主要是计算框架,而不是资源调度框架,所以本身提供的资源调度并不是它的强项,所以可以使用Hadoop生态中Yarn进行资源调度操作。
1)将spark-3.1.2-bin-hadoop3.2.tgz文件上传到qianfeng01并解压缩在指定位置
tar -zxvf spark-3.0.0-bin-hadoop3.2.tgz -C /usr/local
2)修改hadoop中的配置文件/usr/local/hadoop-3.3.1/etc/hadoop/yarn-site.xml vi /usr/local/hadoop-3.3.1/etc/hadoop/yarn-site.xml
<!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
分发到不同的节点
scp /usr/local/hadoop-3.3.1/etc/hadoop/yarn-site.xml qianfeng02:/usr/local/hadoop-3.3.1/etc/hadoop scp /usr/local/hadoop-3.3.1/etc/hadoop/yarn-site.xml qianfeng03:/usr/local/hadoop-3.3.1/etc/hadoop
-
进入解压缩后路径的conf目录,修改workers.template文件名为workers
修改spark-env.sh.template文件名为spark-env.sh 修改spark-defaults.conf.template文件名为spark-defaults.conf
[root@qianfeng01 spark-3.1.2]# cd /usr/local/spark-3.1.2/conf/ mv workers.template wokers mv spark-env.sh.template spark-env.sh mv spark-defaults.conf.template spark-defaults.conf
workers文件中添加(如果添加过就不需要再添加) [root@qianfeng01 conf]# vi /usr/local/spark-3.1.2/conf/workers
qianfeng01 qianfeng02 qianfeng03
spark-env.sh文件中添加 [root@qianfeng01 conf]# vi /usr/local/spark-3.1.2/conf/spark-env.sh
export JAVA_HOME=/usr/local/jdk1.8.0_321 HADOOP_CONF_DIR=/usr/local/hadoop-3.3.1/etc/hadoop YARN_CONF_DIR=/usr/local/hadoop-3.3.1/etc/hadoop export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.fs.logDirectory=hdfs://qianfeng01:9820/sparkHistory -Dspark.history.retainedApplications=30"
spark-defaults.conf文件中添加 [root@qianfeng01 conf]# vi /usr/local/spark-3.1.2/conf/spark-defaults.conf
spark.eventLog.enabled true spark.eventLog.dir hdfs://qianfeng01:9820/sparkHistory spark.yarn.historyServer.address=qianfeng01:18080 spark.history.ui.port=18080
分发到不同的节点
scp -r /usr/local/spark-3.1.2/conf/* qianfeng02:/usr/local/spark-3.1.2/conf/ scp -r /usr/local/spark-3.1.2/conf/* qianfeng03:/usr/local/spark-3.1.2/conf/
注意:需要启动hadoop集群,HDFS上的目录需要提前存在。
#启动hdfs级群 start-dfs.sh hdfs dfs -mkdir /sparkHistory #启动yarn级群 stop-yarn.sh start-yarn.sh #停止spark standalone级群,也不需要启动其它spark的级群 [root@qianfeng01 spark-3.1.2]# ./sbin/stop-all.sh
启动spark的历史服务
#在规划的spark历史服务机器上启动spark的历史服务
start-history-server.sh
[root@qianfeng01 spark-3.1.2]# jps-cluster.sh
---------- qianfeng01 ----------
4772 NameNode
4982 DataNode
17880 NodeManager
17593 ResourceManager
18346 HistoryServer ---spark的历史服务
9006 JobHistoryServer
---------- qianfeng02 ----------
2712 DataNode
9240 NodeManager
2826 SecondaryNameNode
---------- qianfeng03 ----------
2168 DataNode
11384 NodeManager
Guff_hys_python数据结构,大数据开发学习,python实训项目-CSDN博客