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 环境
- 进入解压缩后的路径,执行如下指令
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