1.引言
在前面的博客中介绍了Spark的伪分布安装,在本篇博客中将介绍一下Spark的集群部署,在本博客中Spark的调度采用Hadoop的Yarn平台,因此在安装Spark之前,需要先部署Hadoop
的集群,因为我在安装Hadoop
集群的时候,配置了HA
的自动切换,因此也需要安装zookeeper
集群。其次Spark
是基于scala
开发的,综上所述,在本博客中会搭建三个集群:
zookeeper
集群hadoop
集群spark
集群
在本博客中安装环境为:
- 操作系统为:
Centos6.7
jdk
的版本为:1.7
jdk
的安装路径为:/usr/local/jdk
hadoop
的版本为:2.6.1
hadoop
的安装路径为:/usr/local/hadoop
zookeeper
的版本为:3.4.9
zookeeper
的安装路径为:/usr/local/zookeeper
scala
的版本为:2.11.8
scala
的安装路径为:/usr/local/scala
spark
的版本为:2.0.0
spark
的安装路径为:/usr/local/spark
- 使用
root
用户进行集群搭建
接下来我将按照下表进行搭建集群环境:
HOST 名称 | ip 地址 | 运行的进程 |
---|---|---|
hadoop1 | 192.168.159.130 | NameNode,ResourceManger,JournalNode,QuorumPeerMain,DFSZKFailoverController,Master |
hadoop2 | 192.168.159.131 | NameNode,JournalNode,QuorumPeerMain,DFSZKFailoverController |
hadoop3 | 192.168.159.132 | DataNode,NodeManger,JournalNode,QuorumPeerMain,Worker |
hadoop4 | 192.168.159.133 | DataNode,NodeManger,Worker |
hadoop5 | 192.168.159.134 | DataNode,NodeManger,Worker |
2. 搭建Hadoop
集群
如何搭建Hadoop
自动切换NameNode
的集群,请参考链接:Hadoop 2.6.1 集群部署—自动切换HA
在上面的链接中介绍了如何搭建zookeeper
集群和hadoop
集群,搭建完成后,实现了以下表格的内容,因此接下来我们只需要在此基础上搭建spark
集群即可。
HOST 名称 | ip 地址 | 运行的进程 |
---|---|---|
hadoop1 | 192.168.159.130 | NameNode,ResourceManger,JournalNode,QuorumPeerMain,DFSZKFailoverController |
hadoop2 | 192.168.159.131 | NameNode,JournalNode,QuorumPeerMain,DFSZKFailoverController |
hadoop3 | 192.168.159.132 | DataNode,NodeManger,JournalNode,QuorumPeerMain |
hadoop4 | 192.168.159.133 | DataNode,NodeManger |
hadoop5 | 192.168.159.134 | DataNode,NodeManger |
3. 安装scala
环境
- 解压scala安装包并改名
//解压scala安装包
tar -zxvf scala-2.11.8.tgz -C /usr/local/
//进入/usr/local文件夹
cd /usr/local
//改名文件夹
mv scala-2.11.8 scala
- 修改环境变量
//编辑环境变量文件
vim /etc/profile
//环境变量的内容修改:
export SCALA_HOME=/usr/local/scala
export PATH=$PATH:$SCALA_HOME/bin
- 将
scala
分发到hadoop2,hadoop3,hadoop4,hadoop5
机器
scp -rq /usr/local/scala hadoop2:/usr/local/
scp -rq /usr/local/scala hadoop3:/usr/local/
scp -rq /usr/local/scala hadoop4:/usr/local/
scp -rq /usr/local/scala hadoop5:/usr/local/
- 将环境变量文件分发到
hadoop2,hadoop3,hadoop4,hadoop5
机器
scp /etc/profile hadoop2:/etc/profile
scp /etc/profile hadoop3:/etc/profile
scp /etc/profile hadoop4:/etc/profile
scp /etc/profile hadoop5:/etc/profile
- 在各机器上重新加载环境变量
//在hadoop1,hadoop2,hadoop3,hadoop4,hadoop5执行命令重新加载环境变量
source /etc/profile
4. 安装spark
集群
4.1 解压spark安装包并改名
//解压spark安装包
tar -zxvf spark-2.0.0-bin-hadoop2.6.tgz -C /usr/local/
//进入/usr/local目录
cd /usr/local
//修改文件夹名称
mv spark-2.0.0-bin-hadoop2.6 spark
4.2 修改配置文件spark-env.sh
- 修改
spark-env.sh
配置文件内容
//修改spark-env.sh配置文件
vim spark-env.sh
//配置文件内容:
/*
SPARK_LOCAL_IP:本机ip或hostname(每台机器都不一样)
SPARK_LOCAL_DIRS:配置spark的local目录
SPARK_MASTER_IP:master节点ip或hostname
SPARK_MASTER_WEBUI_PORT:web页面端口
SPARK_MASTER_OPTS:spark-shell启动使用核数(根据自己电脑实际情况写)
SPARK_WORKER_CORES:Worker的cpu核数
SPARK_WORKER_MEMORY:Worker内存大小
SPARK_WORKER_DIR:worker目录
SPARK_WORKER_OPTS:worker自动清理及清理时间间隔
SPARK_HISTORY_OPTS:history server页面端口、备份数、log日志在HDFS的位置(这里需要注意,因为我使用的是hadoop的ha,所以采用逻辑名cluster1,如果不使用HA,应该使用hdfs://hadoop1:9000/var/log/spark的格式)
SPARK_LOG_DIR:配置Spark的log日志目录
JAVA_HOME:jdk的安装地址
SCALA_HOME:scala的安装地址
SPARK_WORKER_MEMORY:Worker内存大小
SPARK_MASTER_IP:master节点ip或hostname
HADOOP_HOME:hadoop的安装地址
HADOOP_CONF_DIR:hadoop配置文件的安装地址
*/
SPARK_LOCAL_IP=hadoop1
SPARK_LOCAL_DIRS=/usr/local/spark
SPARK_MASTER_IP=hadoop1
SPARK_MASTER_WEBUI_PORT=8080
export SPARK_MASTER_OPTS="-Dspark.deploy.defaultCores=4"
SPARK_WORKER_CORES=2
SPARK_WORKER_MEMORY=1g
SPARK_WORKER_DIR=/usr/local/spark/work
export SPARK_WORKER_OPTS="-Dspark.worker.cleanup.enabled=true -Dspark.worker.cleanup.appDataTtl=604800"
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://cluster1/var/log/spark"
SPARK_LOG_DIR=/usr/local/spark/logs
export JAVA_HOME=/usr/local/jdk
export SCALA_HOME=/usr/local/scala
export SPARK_MASTER_IP=hadoop1
export SPARK_WORKER_MEMORY=1024m
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop/
4.3 修改配置文件spark-defaults.conf
- 修改
spark-defaults.conf
配置文件内容
//将模版文件修改为配置文件
cp spark-defaults.conf.template spark-defaults.conf
//修改配置文件
vim spark-defaults.conf
// 配置文件的内容:
/*
spark.eventLog.enabled:eventLog是否生效
spark.eventLog.compress:eventLog是否启用压缩(cpu性能好的情况下建议开启,以减少内存等的占用)
spark.eventLog.dir: eventLog的文件存放位置,与spark-env.sh中的history server配置位置一致,这两个位置必须手动创建,否则spark启动失败
spark.broadcast.blockSize:广播块大小
spark.executor.cores:Executor的cpu核数
spark.executor.memory:Executor的内存大小
spark.executor.heartbeatInterval:Executor心跳交换时间间隔
spark.files.fetchTimeout:文件抓取的timeout
spark.task.maxFailures:作业最大失败次数(达到此次数后,该作业不再继续执行,运行失败)
spark.serializer:设置序列化机制(默认使用java的序列化,但是速度很慢,建议使用Kryo)
spark.kryoserializer.buffer.max:序列化缓冲大小
spark.akka.frameSize:Akka调度帧大小
spark.default.parallelism:默认并行数
spark.network.timeout:最大网络延时
spark.speculation:Spark推测机制(建议开启)
*/
spark.eventLog.enabled true
spark.eventLog.compress true
spark.eventLog.dir hdfs://cluster1/var/log/spark
spark.broadcast.blockSize 8m
spark.executor.cores 1
spark.executor.memory 512m
spark.executor.heartbeatInterval 20s
spark.files.fetchTimeout 120s
spark.task.maxFailures 6
spark.serializer org.apache.spark.serializer.KryoSerializer
spark.kryoserializer.buffer.max 256m
spark.akka.frameSize 128
spark.default.parallelism 20
spark.network.timeout 300s
spark.speculation true
- 创建
hadoop
的历史日志目录(在hadoop1
上操作)
//首先进入hadoop的bin目录
cd /usr/local/hadoop/bin
//创建文件夹命令
./hadoop fs -mkdir /var
./hadoop fs -mkdir /var/log
./hadoop fs -mkdir /var/log/spark
4.4 修改slaves
配置文件
- 编辑
slaves
配置文件
//编辑slaves文件
vim slaves
//slaves内容(设置从节点的位置)
hadoop3
hadoop4
hadoop5
4.5 将spark
分发到其他节点,并修改配置
- 将
spark
分发到其他节点
scp -rq /usr/local/spark hadoop3:/usr/local/
scp -rq /usr/local/spark hadoop4:/usr/local/
scp -rq /usr/local/spark hadoop5:/usr/local/
- 修改
hadoop3,hadoop4,hadoop5
的spark-env.sh
配置(只需要修改SPARK_LOCAL_IP
配置)
4.6 启动Spark
集群
- 在
hadoop1
启动spark
集群
//启动master和slaves
start-all.sh
//停止master和slaves
stop-all.sh
//启动job历史端口
./start-history-server.sh
4.7 查看Spark集群是否启动成功
- 访问地址:http://hadoop1:8080,出现以下界面启动成功。
- 访问地址:http://hadoop1:18080查看历史job日志,出现以下界面启动成功。