spark有三种部署模式,分别为:本地部署(local),伪分布式部署(独立集群部署standalone),完全分布式集群部署(外部集群管理器部署)
前两种大多数情况下用于开发调测,并不用于生产环境。
一、搭建前的准备
1.jdk1.8.0_171.zip(spark2.2及以后版本不在支持jdk1.7及以下版本)
2.scala-2.11.1.tgz
3.hadoop-3.0.3.tar.gz
4.spark-2.3.1-bin-hadoop2.7.tgz(spark版本要和hadoop版本相对应)
5.zookeeper-3.4.10.tar.gz
下载以上压缩包,注意版本兼容性
二、本地模式搭建
1.配置SSH免密码登陆
#生成公钥
ssh-keygen -t rsa
#将公钥加入authorized_keys(授权用户)
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
验证执行 ssh root@localhost 不需要密码直接登陆,配置成功。
2.安装jdk
将jdk压缩包解压到本地用户目录下(/usr/local/java),并配置环境变量:
vim /etc/profile
export JAVA_HOME=/usr/local/java
export CLASSPATH=$JAVA_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$CLASSPATH
source /etc/profile
然后执行java -version 正确显示jdk版本信息,表示jdk安装成功
3.安装scala
将scala压缩包解压到本地用户目录下(/usr/local/scala),并配置环境变量:
vim /etc/profile
export SCALA_HOME=/usr/local/scala
export PATH=$PATH:$SCALA_HOME/bin
source /etc/profile
然后执行scala -version正确显示scala版本信息,表示scala安装成功
4.本地安装
将spark压缩包解压到本地用户目录下(/usr/local/spark),并配置环境变量:
vim /etc/profile
export SPARK_HOME=/usr/local/spark
export PATH=$PATH:$SPARK_HOME/bin
source /etc/profile
进入$SPARK_HOME/conf目录下,拷贝spark-env.sh.template文件至spark-env.sh,并编辑:
vim spark-env.sh
export SPARK_MASTER_HOST=master #master节点主机名
export SPARK_MASTER_IP=10.10.10.1 #master节点IP地址
export JAVA_HOME=/usr/local/java
export SPARK_LOCAL_IP=10.10.10.1
export SPARK_WORKER_MEMORY=1g #worker节点内存
export SPARK_WORKER_CORES=2 #worker节点核心数
执行spark-shell,进入spark命令模式,既代表spark本地模式部署完毕。
执行/usr/local/spark/sbin/start-all.sh,启动spark。执行jps,如下:
22080 Master
22235 Jps
22190 Worker
二、伪分布式搭建
准备三台服务器:10.10.10.1(master),10.10.10.2(slave01),10.10.10.3(slave02)。(IP(hostname)}
(1)建立相同的账户
分别在三台服务器上执行:
useradd -u 0 -o -g root -G root -d /home/username username
usermod -u 0 -o -g root -G root username
passwd username
su username
输入密码,切换到新建用户(已下以spark为例)
(2)修改/etc/hosts
分别修改三台服务器的/etc/hosts文件:
vim /etc/hosts
10.10.10.1 master master
10.10.10.2 slave01 slave01
10.10.10.3 slave02 slave02
(3)配置SSH免密码登陆(具体看上节)
三台服务器相互之间都要配置
(4) 安装jdk,scala(具体看上节)
(5)安装spark
修改spark-env.sh
export SPARK_MASTER_HOST=master #master节点主机名
export SPARK_MASTER_IP=10.10.10.1 #master节点IP地址
export JAVA_HOME=/usr/local/java
export SPARK_LOCAL_IP=10.10.10.1
export SPARK_WORKER_MEMORY=1g #worker节点内存
export SPARK_WORKER_CORES=2 #worker节点核心数
修改slaves
cp slaves.template slaves
vim slaves
slave01
slave02
slaves文件只在master结点起作用,只有添加在slaves文件中的结点才会被作为slave结点启动。
将jdk,scala,spark发送到其他两台服务器上,并配置相应环境变量
执行/usr/local/spark/sbin/start.all,执行jps,master如下:
23332 Jps
23256 Master
worker如下:
27222 Jps
27162 Worker
表示启动成功
三、完全分布式部署(以yarn为例)
在伪分布式部署的基础上
(1)安装hadoop
解压hadoop到用户目录(/usr/local/hadoop)
添加环境变量:
vim /etc/profile
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile
进入$HADOOP_CONF_DIR目录,
修改hadoop-env.sh文件
vim hadoop-env.sh
export JAVA_HOME=$JAVA_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_LIBEXEC_DIR=$HADOOP_HOME/libexec
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
修改core-site.xml文件
vim core-site.xml
<configuration>
<property>
#分布式文件系统入口
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
</configuration>
修改hdfs-site.xml
vim hdfs-site.xml
<configuration>
<property>
#备份副本数
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
#程序中访问hdfs,修改关闭权限检查
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<property>
#名称节点数据目录
<name>dfs.namenode.name.dir</name>
<value>/usr/local/hadoop/hdfs/name</value>
</property>
<property>
#数据节点数据目录
<name>dfs.datanode.data.dir</name>
<value>/usr/local/hadoop/hdfs/data</value>
</property>
<property>
#名称节点http ui访问url
<name>dfs.namenode.http-address</name>
<value>master:50070</value>
</property>
<property>
#二级名称节点http ui访问url
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
<property>
#开启hdfs web界面
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
修改mapred-site.xml文件
vim mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>
/usr/local/hadoop/etc/hadoop,
/usr/local/hadoop/share/hadoop/common/*,
/usr/local/hadoop/share/hadoop/common/lib/*,
/usr/local/hadoop/share/hadoop/hdfs/*,
/usr/local/hadoop/share/hadoop/hdfs/lib/*,
/usr/local/hadoop/share/hadoop/mapreduce/*,
/usr/local/hadoop/share/hadoop/mapreduce/lib/*,
/usr/local/hadoop/share/hadoop/yarn/*,
/usr/local/hadoop/share/hadoop/yarn/lib/*
</value>
</property>
</configuration>
修改yarn-site.xml文件
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
#资源管理节点地址
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
#资源管理器web 访问地址
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
</configuration>
修改slaves(文件,无则创建,hadoop3.0以上为workers文件)
slave01
slave02
进入/usr/local/hadoop/sbin,
修改start-dfs.sh及stop-dfs.sh文件,增加如下类容:
HDFS_DATANODE_USER=spark
HDFS_DATANODE_SECURE_USER=spark
HDFS_NAMENODE_USER=spark
HDFS_SECONDARYNAMENODE_USER=spark
修改start-yarn.sh及stop-yarn.sh文件,增加如下内容:
YARN_RESOURCEMANAGER_USER=spark
HADOOP_SECURE_DN_USER=spark
YARN_NODEMANAGER_USER=spark
复制hadoop到其他两台服务器,并配置相应环境变量
scp -r /usr/local/hadoop root@spark02:/usr/local/
执行:
hadoop namenode -format
格式化名称节点,(如发现报错,可清理名称节点目录,重新执行)
执行 /usr/local/hadoop/sbin/start-all.sh,执行jps查看:
master如下:
5171 SecondaryNameNode
5561 ResourceManager
4810 NameNode
6060 Jps
slave如下:
5012 Jps
4698 NodeManager
4589 DataNode
表示hadoop部署成功
(2)修改spark
修改spark-env.sh
export SPARK_HOME=/usr/local/spark
export HADOOP_CONF_DIR=$HADOOP_CONF_DIR
export YARN_CONF_DIR=$HADOOP_CONF_DIR
export SPARK_DIST_CLASSPATH=$($HADOOP_HOME/bin/hadoop classpath)
至此部署完成
*HA完全分布式部署将在本文最后章节讲解