CentOS7.5搭建spark2.3.1集群
一 下载安装包
1 官方下载
官方下载地址:http://spark.apache.org/downloads.html
2 安装前提
- Java8 安装成功
- zookeeper 安装参考:CentOS7.5搭建Zookeeper3.4.12集群
- hadoop 安装参考:CentOS7.5搭建Hadoop2.7.6集群
- Scala 安装成功
注意:从Spark2.0版开始,默认使用Scala 2.11构建。Scala 2.10用户应该下载Spark源包并使用Scala 2.10支持构建 。
3 集群规划
节点名称 | IP | Zookeeper | Master | Worker |
node21 | 192.168.100.21 |
Zookeeper |
主Master | |
node22 | 192.168.100.22 |
Zookeeper |
备Master | Worker |
node23 | 192.168.100.23 |
Zookeeper |
Worker |
二 集群安装
1 解压缩
[admin@node21 software]$ tar zxvf spark-2.3.1-bin-hadoop2.7.tgz -C /opt/module/
[admin@node21 module]$ mv spark-2.3.1-bin-hadoop2.7 spark-2.3.1
2 修改配置文件
(1)进入配置文件所在目录
[admin@node21 ~]$ cd /opt/module/spark-2.3.1/conf/
[admin@node21 conf]$ ll
total 36
-rw-rw-r-- 1 admin admin 996 Jun 2 04:49 docker.properties.template
-rw-rw-r-- 1 admin admin 1105 Jun 2 04:49 fairscheduler.xml.template
-rw-rw-r-- 1 admin admin 2025 Jun 2 04:49 log4j.properties.template
-rw-rw-r-- 1 admin admin 7801 Jun 2 04:49 metrics.properties.template
-rw-rw-r-- 1 admin admin 870 Jul 4 23:50 slaves.template
-rw-rw-r-- 1 admin admin 1292 Jun 2 04:49 spark-defaults.conf.template
-rwxrwxr-x 1 admin admin 4861 Jul 5 00:25 spark-env.sh.template
(2)复制spark-env.sh.template并重命名为spark-env.sh
[admin@node21 conf]$ cp spark-env.sh.template spark-env.sh
[admin@node21 conf]$ vi spark-env.sh
编辑并在文件末尾添加如下配置内容
#指定默认master的ip或主机名
export SPARK_MASTER_HOST=node21
#指定maaster提交任务的默认端口为7077
export SPARK_MASTER_PORT=7077
#指定masster节点的webui端口
export SPARK_MASTER_WEBUI_PORT=8080
#每个worker从节点能够支配的内存数
export SPARK_WORKER_MEMORY=1g
#允许Spark应用程序在计算机上使用的核心总数(默认值:所有可用核心)
export SPARK_WORKER_CORES=1
#每个worker从节点的实例(可选配置)
export SPARK_WORKER_INSTANCES=1
#指向包含Hadoop集群的(客户端)配置文件的目录,运行在Yarn上配置此项
export HADOOP_CONF_DIR=/opt/module/hadoop-2.7.6/etc/hadoop
#指定整个集群状态是通过zookeeper来维护的,包括集群恢复
export SPARK_DAEMON_JAVA_OPTS="
-Dspark.deploy.recoveryMode=ZOOKEEPER
-Dspark.deploy.zookeeper.url=node21:2181,node22:2181,node23:2181
-Dspark.deploy.zookeeper.dir=/spark"
(3)复制slaves.template成slaves,并修改配置内容
[admin@node21 conf]$ cp slaves.template slaves
[admin@node21 conf]$ vi slaves
修改从节点
node22
node23
(4)将安装包分发给其他节点
[admin@node21 module]$ scp -r spark-2.3.1 admin@node22:/opt/module/
[admin@node21 module]$ scp -r spark-2.3.1 admin@node23:/opt/module/
修改node22节点上conf/spark-env.sh配置的MasterIP为SPARK_MASTER_IP=node22
3 配置环境变量
所有节点均要配置
[admin@node21 spark-2.3.1]$ sudo vi /etc/profile
export SPARK_HOME=/opt/module/spark-2.3.1
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
[admin@node21 spark-2.3.1]$ source /etc/profile
三 启动集群
1 启动zookeeper集群
所有zookeeper节点均要执行
[admin@node21 ~]$ zkServer.sh start
2 启动Hadoop集群
[admin@node21 ~]$ start-dfs.sh
[admin@node22 ~]$ start-yarn.sh
[admin@node23 ~]$ yarn-daemon.sh start resourcemanager
3 启动Spark集群
启动spark:启动master节点:sbin/start-master.sh 启动worker节点:sbin/start-slaves.sh
或者:sbin/start-all.sh
[admin@node21 spark-2.3.1]$ sbin/start-all.sh
starting org.apache.spark.deploy.master.Master, logging to /opt/module/spark-2.3.1/logs/spark-admin-org.apache.spark.deploy.master.Master-1-node21.out
node22: starting org.apache.spark.deploy.worker.Worker, logging to /opt/module/spark-2.3.1/logs/spark-admin-org.apache.spark.deploy.worker.Worker-1-node22.out
node23: starting org.apache.spark.deploy.worker.Worker, logging to /opt/module/spark-2.3.1/logs/spark-admin-org.apache.spark.deploy.worker.Worker-1-node23.out
注意:备用master节点需要手动启动
[admin@node22 spark-2.3.1]$ sbin/start-master.sh
starting org.apache.spark.deploy.master.Master, logging to /opt/module/spark-2.3.1/logs/spark-admin-org.apache.spark.deploy.master.Master-1-node22.out
4 查看进程
[admin@node21 spark-2.3.1]$ jps
1316 QuorumPeerMain
3205 Jps
3110 Master
1577 DataNode
1977 DFSZKFailoverController
1788 JournalNode
2124 NodeManager [admin@node22 spark-2.3.1]$ jps
1089 QuorumPeerMain
1233 DataNode
1617 ResourceManager
1159 NameNode
1319 JournalNode
1735 NodeManager
3991 Master
4090 Jps
1435 DFSZKFailoverController
3918 Worker [admin@node23 spark-2.3.1]$ jps
1584 ResourceManager
1089 QuorumPeerMain
1241 JournalNode
2411 Worker
1164 DataNode
1388 NodeManager
2478 Jps
四 验证集群HA
1 看Web页面Master状态
node21是ALIVE状态,node22为STANDBY状态,WebUI查看:http://node21:8080/
从节点连接地址:http://node22:8081/
2 验证HA的高可用
手动干掉node21上面的Master进程,node21:8080无法访问,node22:8080状态如下,Master状态成功自动进行切换。
3 HA注意点
- 主备切换过程中不能提交Application。
- 主备切换过程中不影响已经在集群中运行的Application。因为Spark是粗粒度资源调度。
五集群提交命令方式
1 Standalone模式
1.1 Standalone-client
(1)提交命令
[admin@node21 spark-2.3.1]$ ./bin/spark-submit --class org.apache.spark.examples.SparkPi \
--master spark://node21:7077 \
--executor-memory 500m \
--total-executor-cores 1 \
examples/jars/spark-examples_2.11-2.3.1.jar 10
或者
[admin@node21 spark-2.3.1]$ ./bin/spark-submit --class org.apache.spark.examples.SparkPi \
--master spark://node21:7077 \
--deploy-mode client \
--executor-memory 500m \
--total-executor-cores 1 \
examples/jars/spark-examples_2.11-2.3.1.jar 10
(2)提交原理图解
(3)执行流程
- client模式提交任务后,会在客户端启动Driver进程。
- Driver会向Master申请启动Application启动的资源。
- 资源申请成功,Driver端将task发送到worker端执行。
- worker将task执行结果返回到Driver端。
(4)总结
client模式适用于测试调试程序。Driver进程是在客户端启动的,这里的客户端就是指提交应用程序的当前节点。在Driver端可以看到task执行的情况。生产环境下不能使用client模式,是因为:假设要提交100个application到集群运行,Driver每次都会在client端启动,那么就会导致客户端100次网卡流量暴增的问题。
1.2 Standalone-cluster
(1)提交命令
[admin@node21 spark-2.3.1]$ ./bin/spark-submit --class org.apache.spark.examples.SparkPi \
--master spark://node21:7077 \
--deploy-mode cluster \
examples/jars/spark-examples_2.11-2.3.1.jar 10
(2)提交原理图解
(3)执行流程
- cluster模式提交应用程序后,会向Master请求启动Driver.
- Master接受请求,随机在集群一台节点启动Driver进程。
- Driver启动后为当前的应用程序申请资源。
- Driver端发送task到worker节点上执行。
- worker将执行情况和执行结果返回给Driver端。
(4)总结
Driver进程是在集群某一台Worker上启动的,在客户端是无法查看task的执行情况的。假设要提交100个application到集群运行,每次Driver会随机在集群中某一台Worker上启动,那么这100次网卡流量暴增的问题就散布在集群上。
2 Yarn模式
2.1 yarn-client
(1)提交命令
以client
模式启动Spark应用程序:
$ ./bin/spark-submit --class path.to.your.Class --master yarn --deploy-mode client [options] <app jar> [app options]
例如
[admin@node21 spark-2.3.1]$ ./bin/spark-submit --class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode client \
examples/jars/spark-examples_2.11-2.3.1.jar 10
(2)提交原理图解
(3)执行流程
- 客户端提交一个Application,在客户端启动一个Driver进程。
- 应用程序启动后会向RS(ResourceManager)发送请求,启动AM(ApplicationMaster)的资源。
- RS收到请求,随机选择一台NM(NodeManager)启动AM。这里的NM相当于Standalone中的Worker节点。
- AM启动后,会向RS请求一批container资源,用于启动Executor.
- RS会找到一批NM返回给AM,用于启动Executor。
- AM会向NM发送命令启动Executor。
- Executor启动后,会反向注册给Driver,Driver发送task到Executor,执行情况和结果返回给Driver端。
(4)总结
Yarn-client模式同样是适用于测试,因为Driver运行在本地,Driver会与yarn集群中的Executor进行大量的通信,会造成客户机网卡流量的大量增加.
ApplicationMaster的作用:
- 为当前的Application申请资源
- 给NodeManager发送消息启动Executor。
注意:ApplicationMaster有launchExecutor和申请资源的功能,并没有作业调度的功能。
2.2 yarn-cluster
(1)提交命令
以cluster
模式启动Spark应用程序:
$ ./bin/spark-submit --class path.to.your.Class --master yarn --deploy-mode cluster [options] <app jar> [app options]
例如
[admin@node21 spark-2.3.1]$ ./bin/spark-submit --class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
examples/jars/spark-examples_2.11-2.3.1.jar 10
(2)提交原理图解
(3)执行流程
- 客户机提交Application应用程序,发送请求到RS(ResourceManager),请求启动AM(ApplicationMaster)。
- RS收到请求后随机在一台NM(NodeManager)上启动AM(相当于Driver端)。
- AM启动,AM发送请求到RS,请求一批container用于启动Executor。
- RS返回一批NM节点给AM。
- AM连接到NM,发送请求到NM启动Executor。
- Executor反向注册到AM所在的节点的Driver。Driver发送task到Executor。
(4)总结
Yarn-Cluster主要用于生产环境中,因为Driver运行在Yarn集群中某一台nodeManager中,每次提交任务的Driver所在的机器都是随机的,不会产生某一台机器网卡流量激增的现象,缺点是任务提交后不能看到日志。只能通过yarn查看日志。
ApplicationMaster的作用:
- 为当前的Application申请资源
- 给NodeManager发送消息启动Excutor。
- 任务调度。
停止集群任务命令:yarn application -kill applicationID
六 配置历史服务器
1 临时配置
对本次提交的应用程序起作用
./spark-shell --master spark://node21:7077
--name myapp1
--conf spark.eventLog.enabled=true
--conf spark.eventLog.dir=hdfs://node21:8020/spark/test
停止程序,在Web Ui中Completed Applications对应的ApplicationID中能查看history。
2 永久配置
spark-default.conf配置文件中配置HistoryServer,对所有提交的Application都起作用
在客户端节点,进入../spark-2.3.1/conf/ spark-defaults.conf最后加入:
//开启记录事件日志的功能
spark.eventLog.enabled true
//设置事件日志存储的目录
spark.eventLog.dir hdfs://node21:8020/spark/test
//设置HistoryServer加载事件日志的位置
spark.history.fs.logDirectory hdfs://node21:8020/spark/test
//日志优化选项,压缩日志
spark.eventLog.compress true
启动HistoryServer:
./start-history-server.sh
访问HistoryServer:node21:18080,之后所有提交的应用程序运行状况都会被记录。
七 故障问题
1 Worker节点无法启动
[admin@node21 spark-2.3.1]$ sbin/start-all.sh
starting org.apache.spark.deploy.master.Master, logging to /opt/module/spark-2.3.1/logs/spark-admin-org.apache.spark.deploy.master.Master-1-node21.out
node23: starting org.apache.spark.deploy.worker.Worker, logging to /opt/module/spark-2.3.1/logs/spark-admin-org.apache.spark.deploy.worker.Worker-1-node23.out
node22: starting org.apache.spark.deploy.worker.Worker, logging to /opt/module/spark-2.3.1/logs/spark-admin-org.apache.spark.deploy.worker.Worker-1-node22.out
node23: failed to launch: nice -n 0 /opt/module/spark-2.3.1/bin/spark-class org.apache.spark.deploy.worker.Worker --webui-port 8081 --port 7078 spark://node21:7077
node23: full log in /opt/module/spark-2.3.1/logs/spark-admin-org.apache.spark.deploy.worker.Worker-1-node23.out
node22: failed to launch: nice -n 0 /opt/module/spark-2.3.1/bin/spark-class org.apache.spark.deploy.worker.Worker --webui-port 8081 --port 7078 spark://node21:7077
node22: full log in /opt/module/spark-2.3.1/logs/spark-admin-org.apache.spark.deploy.worker.Worker-1-node22.out
由于之前在conf/spark-env.sh里配置了如下信息
#每个worker从节点的端口(可选配置)
export SPARK_WORKER_PORT=7078
#每个worker从节点的wwebui端口(可选配置)
export SPARK_WORKER_WEBUI_PORT=8081
可能是由于端口问题去掉上述两项配置,重启成功。
2 启动Spark on YARN报错
2.1 Caused by: java.net.ConnectException: Connection refused
[admin@node21 spark-2.3.1]$ spark-shell --master yarn --deploy-mode client
报错原因:内存资源给的过小,yarn直接kill掉进程,则报rpc连接失败、ClosedChannelException等错误。
解决方法:先停止YARN服务,然后修改yarn-site.xml,增加如下内容
<!--是否将对容器强制实施虚拟内存限制 -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<!--设置容器的内存限制时虚拟内存与物理内存之间的比率 -->
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>4</value>
</property>
将新的yarn-site.xml文件分发到其他Hadoop节点对应的目录下,最后在重新启动YARN。
重新执行以下命令启动spark on yarn,启动成功
2.2 java.lang.ClassNotFoundException: org.apache.spark.examples.SparkPi
[admin@node21 spark-2.3.1]$ ./bin/spark-submit --class org.apache.spark.examples.SparkPi \
> --master yarn \
> --deploy-mode client \
> examples/jars/spark-examples_2.11-2.3.1.jar 10
报错信息如下:
2018-07-13 05:19:14 WARN NativeCodeLoader:62 - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
java.lang.ClassNotFoundException: org.apache.spark.examples.SparkPi
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.apache.spark.util.Utils$.classForName(Utils.scala:238)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:851)
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:198)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:228)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:137)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
2018-07-13 05:19:15 INFO ShutdownHookManager:54 - Shutdown hook called
2018-07-13 05:19:15 INFO ShutdownHookManager:54 - Deleting directory /tmp/spark-d0c9c44a-40bc-4220-958c-c2f976361d64
解决方法:
CentOS7.5搭建spark2.3.1集群的更多相关文章
- Storm(二)CentOS7.5搭建Storm1.2.2集群
一.Storm的下载 官网下载地址:http://storm.apache.org/downloads.html 这里下载最新的版本storm1.2.2,进入之后选择一个镜像下载 二.Storm伪分布 ...
- HBase(二)CentOS7.5搭建HBase1.2.6HA集群
一.安装前提 1.HBase 依赖于 HDFS 做底层的数据存储 2.HBase 依赖于 MapReduce 做数据计算 3.HBase 依赖于 ZooKeeper 做服务协调 4.HBase源码是j ...
- centos7 下搭建hadoop2.9 分布式集群
首先说明,本文记录的是博主搭建的3节点的完全分布式hadoop集群的过程,环境是centos 7,1个nameNode,2个dataNode,如下: 1.首先,创建好3个Centos7的虚拟机,具体的 ...
- CentOS7.5搭建Solr7.4.0集群服务
一.Solr集群概念 solr单机版搭建参考: https://www.cnblogs.com/frankdeng/p/9615253.html 1.概念 SolrCloud(solr 云)是Solr ...
- CentOS7.5搭建ELK6.2.4集群及插件安装
一 简介 Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎.它允许您快速,近实时地存储,搜索和分析大量数据.它通常用作支持具有复杂搜索功能和需求的应用程序的底层引擎/技术. 下载地址 ...
- 在CentOS7下搭建Hadoop2.9.0集群
系统环境:CentOS 7 JDK版本:jdk-8u191-linux-x64 MYSQL版本:5.7.26 Hadoop版本:2.9.0 Hive版本:2.3.4 Host Name Ip User ...
- CentOS7.5搭建ES6.2.4集群与简单测试
一 简介 Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎.它允许您快速,近实时地存储,搜索和分析大量数据.它通常用作支持具有复杂搜索功能和需求的应用程序的底层引擎/技术. 下载地址 ...
- Zookeeper(一)CentOS7.5搭建Zookeeper3.4.12集群与命令行操作
一. 分布式安装部署 1.0 下载地址 官网首页: https://zookeeper.apache.org/ 下载地址: http://mirror.bit.edu.cn/apache/zookee ...
- centos7环境搭建Eureka-Server注册中心集群
目的:测试和线上使用这套独立的Eureka-Server注册中心集群,目前3台虚拟机集群,后续可直接修改配置文件进行新增或减少集群机器. 系统环境: Centos7x64 java8+(JDK1.8+ ...
随机推荐
- Java——字符串排序
import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Test { ...
- Java——删除Map集合中key-value值
通过迭代器删除Map集合中的key-value值 Iterator<String> iter = map.keySet().iterator(); while(iter.hasNext() ...
- css实现手机端导航栏左右滑动
<html> <head> <meta charset="utf-8"> <meta name="viewport" ...
- PHP时间操作
PHP中对日期进行处理常用的几个函数如下: date(format,timestamp): 把时间戳格式化为更易读的日期和时间 format : 必需,规定输出日期字符串的格式 timestamp : ...
- 【C++】VS Code配置
0.前言 本文已配置C++环境为例,本文主要是面向刚开始接触VS Code的朋友,采用生成默认配置任务的方法,在编写本文过程中大量参考了官方文档,感兴趣的朋友可直接前往传送门. 环境: win10 + ...
- [PHP工具推荐]0001.分析和解析代码的7大工具
引言:PHP已成为时下最热门的编程语言之一,然而却有许多PHP程序员苦恼找不到合适的工具来帮助自己分析和解析PHP代码.今天SD就为大家介绍几个非常不错的工具,来帮助程序员们提高自己的工作效率,一起来 ...
- TCP 半连接队列和全连接队列满了会发生什么?又该如何应对?
前言 网上许多博客针对增大 TCP 半连接队列和全连接队列的方式如下: 增大 TCP 半连接队列的方式是增大 /proc/sys/net/ipv4/tcp_max_syn_backlog: 增大 TC ...
- 脚本:Tomcat日志切割
Tomcat日志切割脚本 #!/bin/bash #Tomcat日志切割 Tomcat_logs_path=/data/server/tomcat-8080/logs d=`date +%F` d7= ...
- Alpha冲刺 —— 5.6
这个作业属于哪个课程 软件工程 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 Alpha冲刺 作业正文 正文 github链接 项目地址 其他参考文献 无 一.会议内容 1.展 ...
- Rocket - interrupts - Parameters
https://mp.weixin.qq.com/s/eD1_hG0n8W2Wodk25N5KnA 简单介绍interrupts相关的Parameters. 1. IntRange 定义一个中断号区间 ...