Spark环境搭建

文章目录

      • 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环境搭建_第1张图片

官网介绍

Spark环境搭建_第2张图片

流行原因

Spark环境搭建_第3张图片
Spark环境搭建_第4张图片

组成模块

Spark环境搭建_第5张图片


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

准备工作

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

原理

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

Spark环境搭建_第6张图片

操作-开箱即用

  • 上传解压安装包
    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

Spark环境搭建_第7张图片

  • 打开http:// node1:4040

Spark环境搭建_第8张图片

  • 准备文件
    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环境搭建_第9张图片


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

原理

Spark环境搭建_第10张图片

操作

  • 集群规划

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环境搭建_第11张图片

  • 启动spark-shell

/opt/software/spark/spark-3.0.3/bin/spark-shell --master spark://node1:7077
Spark环境搭建_第12张图片

  • 提交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环境搭建_第13张图片

  • 查看结果
    Spark环境搭建_第14张图片

  • 查看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(高可用)

原理

Spark环境搭建_第15张图片

操作

  • 启动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/
Spark环境搭建_第16张图片

http://node2:8080/
Spark环境搭建_第17张图片

  • 模拟node1宕机

jps
kill -9 进程id

  • 再次查看web-ui

http://node1:8080/
Spark环境搭建_第18张图片

http://node2:8080/
Spark环境搭建_第19张图片

  • 测试 wordCount

/opt/software/spark/spark-3.0.3/bin/spark-shell --master spark://node1:7077,node2:7077
Spark环境搭建_第20张图片

运行:

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环境搭建_第21张图片
在这里插入图片描述


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>


	
	 <property>
		 <name>yarn.nodemanager.aux-servicesname>
		 <value>mapreduce_shufflevalue>
	 property>
	 
	 
	 <property>
		 <name>yarn.resourcemanager.hostnamename>
		 <value>node2value>
	 property>

	  
    <property>
        <name>yarn.nodemanager.resource.memory-mbname>
        <value>20480value>
    property>
    <property>
        <name>yarn.scheduler.minimum-allocation-mbname>
        <value>2048value>
    property>
    <property>
        <name>yarn.nodemanager.vmem-pmem-rationame>
        <value>4value>
    property>
	 
	 
	 <property>
		 <name>yarn.nodemanager.env-whitelistname>
		 <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOMEvalue>
 	property>

 	 
	<property>
		 <name>yarn.log-aggregation-enablename>
		 <value>truevalue>
	property>

	
	
	<property> 
		 <name>yarn.log.server.urlname> 
		 <value>http://node1:19888/jobhistory/logsvalue>
	property>
	
	
	<property>
		 <name>yarn.log-aggregation.retain-secondsname>
		 <value>604800value>
	property>

	<property>
        <name>yarn.nodemanager.pmem-check-enabledname>
        <value>falsevalue>
    property>
    <property>
        <name>yarn.nodemanager.vmem-check-enabledname>
        <value>falsevalue>
    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环境搭建_第22张图片

Spark HistoryServer服务WEB UI页面:

http://node1:18080
Spark环境搭建_第23张图片

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

client 模式下:

spark的Driver驱动程序,运行在提交任务的客户端上,和集群的通信成本高
因为Driver在客户端,所以Driver中的程序执行结果可以在客户端控制台看到
Spark环境搭建_第24张图片

  • cluster 模式(开发使用)

cluster模式下:

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

Spark环境搭建_第25张图片

操作

  • 需要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

Spark环境搭建_第26张图片
Spark环境搭建_第27张图片

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

Spark环境搭建_第28张图片
Spark环境搭建_第29张图片

你可能感兴趣的:(大数据,spark,大数据)