Spark知识梳理

勤奋不是嘴上说说而已,而是实际的行动,在勤奋的苦度中持之以恒,永不退却。业精于勤,荒于嬉;行成于思,毁于随。在人生的仕途上,我们毫不迟疑地选择勤奋,她是几乎于世界上一切成就的催产婆。只要我们拥着勤奋去思考,拥着勤奋的手去耕耘,用抱勤奋的心去对待工作,浪迹红尘而坚韧不拔,那么,我们的生命就会绽放火花,让人生的时光更加的闪亮而精彩。

导读:本篇文章讲解 Spark知识梳理,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

Spark核心模块

模块 功能
Spark Core Spark Core提供了Spark最核心最基础的功能,Spark的其他功能:Spark SQL、Spark Streaming、Spark MLib和Spark GraphX都是在Spark Core的基础上扩展的
Spark SQL Spark SQL是Spark用来操作结构化数据的组件,通过Spark SQL,用户可以使用SQL或者HQL(Hive 的SQL)来查询数据
Spark Streaming Spark Streaming是Spark平台上针对实时数据针对流式计算的组件,提供了丰富的处理流的API
Spark MLib Spark MLib是Spark提供的一个机器学习算法库。MLib不仅提供了模型评估数据导入等额外的功能,还提供了一些更底层的一些机器学习原语。
Spark GraphX GraphX是Spark面向图计算提供的框架与算法库。

Spark环境配置 – spark-3.0.0-bin-hadoop3.2.tgz

模式 应用
Local 模式 Local 模式,就是不需要其他任何节点资源就可以在本地执行 Spark 代码的环境,一般用于教学,调试,演示等
Standalone 模式 Spark 自身节点运行的集群模式,也就是我们所谓的独立部署(Standalone)模式,它体现了经典的 master-slave 模式。

Local 模式

上传并解压

tar -xvzf spark-3.0.0-bin-hadoop3.2.tgz
mv spark-3.0.0-bin-hadoop3.2 spark-standalone

在这里插入图片描述

启动 Local 环境

  1. 进入解压缩后的路径,执行如下指令
cd spark-local/bin
spark-shell

在这里插入图片描述
2) 启动成功后,可以输入网址进行 Web UI 监控页面访问

http://虚拟机地址:4040/
我们这里使用的是205
http://192.168.0.205:4040/jobs/

在这里插入图片描述
3 命令行工具

在解压缩文件夹下的 data 目录中,添加 word.txt 文件:
Hello World
Hello Spark
Hello World
Hello Scala
执行命令:
sc.textFile("data/word.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect

result:
在这里插入图片描述
4.退出

Ctrl+C或者:quit

5.提交任务

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master local[2] \
./examples/jars/spark-examples_2.12-3.0.0.jar \
10

1) --class 表示要执行程序的主类,此处可以更换为咱们自己写的应用程序
2) --master local[2] 部署模式,默认为本地模式,数字表示分配的虚拟 CPU 核数量
3) spark-examples_2.12-3.0.0.jar 运行的应用类所在的 jar 包,实际使用时,可以设定为咱
们自己打的 jar 包
4) 数字 10 表示程序的入口参数,用于设定当前应用的任务数量

Standalone 模式(Master-Slave模式)

200 201 202
Spark Worker Master Worker Worker

上传到master(200)的机器上,并解压

tar -xvzf spark-3.0.0-bin-hadoop3.2.tgz
mv spark-3.0.0-bin-hadoop3.2 spark-standalone

修改配置文件

1) 进入解压缩后路径的 conf 目录,修改 slaves.template 文件名为 slaves
mv slaves.template slaves
2) 修改 slaves 文件,添加 work 节点
master
slave1
slave2
3) 修改 spark-env.sh.template 文件名为 spark-env.sh
mv spark-env.sh.template spark-env.sh
4) 修改 spark-env.sh 文件,添加 JAVA_HOME 环境变量和集群对应的 master 节点
export JAVA_HOME=/opt/module/jdk1.8.0_144
SPARK_MASTER_HOST=master
SPARK_MASTER_PORT=7077
注意:7077 端口,相当(类似)于 hadoop3 内部通信的 8020 端口,此处的端口需要确认自己的 Hadoop配置
5) 分发 spark-standalone 目录
scp -r spark-standalone slave1:`pwd`
scp -r spark-standalone slave2:`pwd`

启动集群

1) 执行脚本命令:
sbin/start-all.sh

2) 查看三台服务器运行进程
================master================
3330 Jps
3238 Worker
3163 Master
================slave1================
2966 Jps
2908 Worker
================slave2================
2978 Worker
3036 Jps
3) 查看 Master 资源监控 Web UI 界面: http://master:8080

在这里插入图片描述

4 提交应用
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://master:7077 \
./examples/jars/spark-examples_2.12-3.0.0.jar \
10
1) --class 表示要执行程序的主类
2) --master spark://master:7077 独立部署模式,连接到 Spark 集群
3) spark-examples_2.12-3.0.0.jar 运行类所在的 jar 包
4) 数字 10 表示程序的入口参数,用于设定当前应用的任务数量

5 提交参数说明
在提交应用中,一般会同时一些提交参数
bin/spark-submit \
--class <main-class>
--master <master-url> \
... # other options
<application-jar> \
[application-arguments]
参数 解释 可选值举例
–class Spark 程序中包含主函数的类
–master Spark 程序运行的模式(环境) 模式:local[*]、spark://linux1:7077、
Yarn
–executor-memory 1G 指定每个 executor 可用内存为 1G
–total-executor-cores 2 指定所有executor使用的cpu核数为2个
–executor-cores 指定每个executor使用的cpu核数
application-jar 打包好的应用 jar,包含依赖。这个 URL 在集群中全局可见。 比如 hdfs:// 共享存储系统,如果是file:// path,那么所有的节点的path 都包含同样的 jar
application-arguments 传给 main()方法的参数

配置历史服务

由于 spark-shell 停止掉后,集群监控 master:4040 页面就看不到历史任务的运行情况,所以
开发时都配置历史服务器记录任务运行情况。
1) 修改 spark-defaults.conf.template 文件名为 spark-defaults.conf
mv spark-defaults.conf.template spark-defaults.conf

2) 修改 spark-default.conf 文件,配置日志存储路径
spark.eventLog.enabled true
spark.eventLog.dir hdfs://master:8020/spark/logs
注意:需要启动 hadoop 集群,HDFS 上的 spark目录需要提前存在。
sbin/start-dfs.sh
hadoop fs -mkdir /spark
hadoop fs -mkdir /spark/logs
3) 修改 spark-env.sh 文件, 添加日志配置
export SPARK_HISTORY_OPTS="
-Dspark.history.ui.port=18080
-Dspark.history.fs.logDirectory=hdfs://master:8020/spark/logs
-Dspark.history.retainedApplications=30"
参数 1 含义:WEB UI 访问的端口号为 18080
参数 2 含义:指定历史服务器日志存储路径
参数 3 含义:指定保存 Application 历史记录的个数,如果超过这个值,旧的应用程序
信息将被删除,这个是内存中的应用数,而不是页面上显示的应用数。

4) 分发配置文件
scp spark-default.conf slave1:`pwd`
scp spark-default.conf slave2:`pwd`
scp spark-env.sh slave1:`pwd`
scp spark-env.sh slave2:`pwd`

5) 重新启动集群和历史服务
sbin/start-all.sh
sbin/start-history-server.sh

6) 重新执行任务
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://master:7077 \
./examples/jars/spark-examples_2.12-3.0.0.jar \
10

7) 查看历史服务:http://master:18080

配置HA(高可用)

所谓的高可用是因为当前集群中的 Master 节点只有一个,所以会存在单点故障问题。所以为了解决单点故障问题,需要在集群中配置多个 Master 节点,一旦处于活动状态的 Master发生故障时,由备用 Master 提供服务,保证作业可以继续执行。这里的高可用一般采用
Zookeeper 设置
master(200) slave1(201) slave2(202)
Spark Master/Zookeeper/Worker Master/Zookeeper/Worker Zookeeper/Worker
1) 停止集群
sbin/stop-all.sh
2) 启动 Zookeeper
每个节点上zkServer.sh start
3) 修改 spark-env.sh 文件添加如下配置
注释如下内容:
#SPARK_MASTER_HOST=linux1
#SPARK_MASTER_PORT=7077
添加如下内容:
#Master 监控页面默认访问端口为 8080,但是可能会和 Zookeeper 冲突,所以改成 8989,也可以自
定义,访问 UI 监控页面时请注意
SPARK_MASTER_WEBUI_PORT=8989
export SPARK_DAEMON_JAVA_OPTS="
-Dspark.deploy.recoveryMode=ZOOKEEPER
-Dspark.deploy.zookeeper.url=master,salve1,salve2
-Dspark.deploy.zookeeper.dir=/spark"
4) 分发配置文件
5) 启动集群
sbin/start-all.sh

在这里插入图片描述

6) 启动 slave1的单独 Master 节点,此时 slave1节点 Master 状态处于备用状态
sbin/start-master.sh

在这里插入图片描述

7) 提交应用到高可用集群
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://master:7077,salve1:7077 \
./examples/jars/spark-examples_2.12-3.0.0.jar \
10
8) 停止 master的 Master 资源监控进程
jps
24497 HistoryServer
27457 Worker
17218 SecondaryNameNode
25477 QuorumPeerMain
27788 Jps
17022 NameNode
27391 Master
kill 27391 
9) 查看 slave1的 Master 资源监控 Web UI,稍等一段时间后,slave1节点的 Master 状态
提升为活动状态

在这里插入图片描述

Yarn模式

Spark 主要是计算框架,而不是资源调度框架,所以本身提供的资源调度并不是它的强项,所以还是和其他专业的资源调度框架集成会更靠谱一些,所以整理整合Yarn
准备
tar -xzvf spark-3.0.0-bin-hadoop3.2.tgz 
mv spark-3.0.0-bin-hadoop3.2 spark-yarn

修改配置文件

1) 修改 hadoop 配置文件./hadoop/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>

2) 修改 conf/spark-env.sh,添加 JAVA_HOME 和 YARN_CONF_DIR 配置
mv spark-env.sh.template spark-env.sh

export JAVA_HOME=/usr/java/jdk1.8.0_131
YARN_CONF_DIR=/home/hadoop/hadoop-2.7.3/etc/hadoop

启动 HDFS 以及 YARN 集群

[root@master home]# jps
30338 Jps
30259 ResourceManager
29898 NameNode
30095 SecondaryNameNode
[root@slave1 spark-standalone]# jps
2434 Jps
2308 NodeManager
2185 DataNode
[root@slave2 conf]# jps
1856 NodeManager
1733 DataNode
2025 Jps

提交应用

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
./examples/jars/spark-examples_2.12-3.0.0.jar \
10

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

配置历史服务器

1) 修改 spark-defaults.conf.template 文件名为 spark-defaults.conf
mv spark-defaults.conf.template spark-defaults.conf
2) 修改 spark-default.conf 文件,配置日志存储路径
spark.eventLog.enabled true
spark.eventLog.dir hdfs://master:8020/spark/logs
注意:需要启动 hadoop 集群,HDFS 上的目录需要提前存在。
[root@master hadoop]# sbin/start-dfs.sh
[root@master hadoop]# hadoop fs -mkdir /spark
[root@master hadoop]# hadoop fs -mkdir /spark
3) 修改 spark-env.sh 文件, 添加日志配置
export SPARK_HISTORY_OPTS="
-Dspark.history.ui.port=18080
-Dspark.history.fs.logDirectory=hdfs://master:8020/spark/logs
-Dspark.history.retainedApplications=30"
⚫ 参数 1 含义:WEB UI 访问的端口号为 18080
⚫ 参数 2 含义:指定历史服务器日志存储路径
⚫ 参数 3 含义:指定保存 Application 历史记录的个数,如果超过这个值,旧的应用程序
信息将被删除,这个是内存中的应用数,而不是页面上显示的应用数。
4) 修改 spark-defaults.conf
spark.yarn.historyServer.address=master:18080
spark.history.ui.port=18080
5) 启动历史服务
sbin/start-history-server.sh
6) 重新提交应用
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode client \
./examples/jars/spark-examples_2.12-3.0.0.jar \
10

在这里插入图片描述

在这里插入图片描述

出现问题

如果打不开Web UI需要查看关闭防火墙

查看防火墙状态
iptables防火墙 firewall防火墙
查看防火墙状态 service iptables status systemctl status firewalld
停止防火墙 service iptables stop systemctl stop firewalld/service firewalld stop
启动防火墙 service iptables start service firewalld start
重启防火墙 service iptables restart service firewalld restart
永久关闭防火墙 chkconfig iptables off 停止firewall systemctl stop firewalld.service 禁止firewall开机启动 systemctl disable firewalld.service
永久关闭后重启 chkconfig iptables on 设置防火墙开机启动:systemctl enable iptables.service
开启80端口 vim /etc/sysconfig/iptables加入-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT 重启

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/140792.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!