spark集群安装之前需要满足如下条件:
- 集群主机名和hosts文件映射一一对应
- 集群ssh免密登录配置
- 集群每个节点防火墙关闭
- JDK正确安装
- Scala正确安装
- Hadoop集群安装,因为Spark存储层要用到HDFS,所以应该至少保证HDFS服务的正常运行
集群环境:3节点,node01,node02,node03.
standalone模式
下载,解压spark,我用的是spark-2.1.3-bin-2.6.0-cdh5.14.0版本,在node01上进行操作,安装目录:/export/servers.tar -zxvf spark-2.1.3-bin-2.6.0-cdh5.14.0 -C /export/servers
进入到spark的conf目录下,修改slaves文件和 spark-env.sh文件
cd /export/servers/spark-2.1.3-bin-2.6.0-cdh5.14.0/conf cp slaves.template slaves cp spark-env.sh.template spark-env.sh
修改slaves,添加worker任务节点vim slaves #添加worker节点 node02 node03
修改spark-env.sh,添加配置项
vim spark-env.sh
#配置java环境变量
export JAVA_HOME=/export/servers/jdk1.8.0_141
#指定spark Master的IP
export SPARK_MASTER_HOST=bdata05
#指定spark Master的端口
export SPARK_MASTER_PORT=7077
#scala 环境变量
export SCALA_HOME=/export/servers/scala-2.11.8
#hadoop的配置文件目录
export HADOOP_CONF_DIR=/export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop
将spark文件夹分发到node02,node03节点上
scp -r spark-2.1.3-bin-2.6.0-cdh5.14.0 node02:$PWD
scp -r spark-2.1.3-bin-2.6.0-cdh5.14.0 node03:$PWD
在node01节点上启动spark,在spark主目录下启动cd /export/servers/spark-2.1.3-bin-2.6.0-cdh5.14.0 sbin/start-all.sh
查看状态,就可以确认启动成功了.
启动过程中如果报JAVA_HOME not set,参见另一篇博客java_home not set 解决
配置历史服务器
spark的历史服务配置,需要修改hadoop的hdfs-site.xml和yarn-site.xml文件
#修改hdfs-site.xml
#添加如下配置
<!-- 关闭hdfs的文件权限 -->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
#修改yarn-site.xml
#添加如下配置
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
进入到spark的conf目录,修改spark-defaults.conf和spark-env.sh文件
cd /export/servers/spark-2.1.3-bin-2.6.0-cdh5.14.0/conf
cp spark-defaults.conf.template spark-defaults.conf
vim spark-defaults.conf
#添加如下配置
spark.eventLog.enabled true
spark.eventLog.dir hdfs://node01:8020/spark/history
#保存退出
#编辑spark-env.sh
vim spark-env.sh
#添加如下配置
SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://node01:8020/spark/history -Dspark.history.retainedApplications=3 -Dspark.history.ui.port=18080"
注意:在启动sparkhistoryserver之前需要在hdfs上建好spark/history目录.
参数描述:
spark.eventLog.dir:Application在运行过程中所有的信息均记录在该属性指定的路径下;
spark.history.ui.port=18080 WEBUI访问的端口号为18080
spark.history.fs.logDirectory=hdfs://node01:8020/spark/history 配置了该属性后,在start-history-server.sh时就无需再显式的指定路径,Spark History Server页面只展示该指定路径下的信息
spark.history.retainedApplications=3 指定保存Application历史记录的个数,如果超过这个值,旧的应用程序信息将被删除,这个是内存中的应用数,而不是页面上显示的应用数。
将配置好的spark文件拷贝到其他节点上,启动sparkhistoryserver,在spark目录下启动.sbin/start-history-server.sh
定时删除sparkhistory任务
随着任务的运行,sparkhistory越来越大,需要定时清除sparkhistory文件,进入spark的conf目录,编辑spark-defaults.conf文件
cd /export/servers/spark-2.1.3-bin-2.6.0-cdh5.14.0/conf
vim spark-defaults.conf
#添加如下配置
spark.history.fs.cleaner.enabled true
spark.history.fs.cleaner.interval 1d
spark.history.fs.cleaner.maxAge 7d
参数说明
spark.history.fs.cleaner.enabled:指定history-server的日志是定时清除.
spark.history.fs.cleaner.interval:指定history-server的日志检查间隔,默认每一天会检查一下日志文件
spark.history.fs.cleaner.maxAge:指定history-server日志生命周期,当检查到某个日志文件的生命周期为7d时,则会删除该日志文件
分发到各个节点,重新启动spark history server就好了.
spark ha搭建
在实际生产中,需要搭建ha服务,防止单点故障的情况发生.spark ha搭建需要借助Zookeeper,并且至少启动两个master来实现ha,配置方式比较简单.在spark的conf目录下,编辑spark-env.sh文件
cd /export/servers/spark-2.1.3-bin-2.6.0-cdh5.14.0/conf
vim spark-env.sh
#注释掉master host
#export SPARK_MASTER_HOST=node01
#添加新的内容
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node01:2181,node02:2181,node03:2181 -Dspark.deploy.zookeeper.dir=/spark"
#将内容分发到其他两台机器
scp spark-env.sh node02:$PWD
scp spark-env.sh node02:$PWD
在node01上启动sbin/start-all.sh
,在node02节点上启动sbin/start-master.sh
打开网页输入node01:8080
,输入node02:8080
,注意:输入node01,node02,需要在hosts文件配置映射.
观察到 一个active master,一个standby master.