本博客詳細(xì)介紹Standalone模式下的Spark集群的部署。
1.軟件硬件環(huán)境
主機(jī)操作系統(tǒng):三臺為實驗室服務(wù)器(均為Centos 7.3)。
虛擬機(jī)運行環(huán)境:Java 1.8( 1.8.0_144-b01)、Hadoop 2.8.2、Scala 2.11.8、Spark 2.2.0(spark-2.2.0-bin-hadoop2.7)
Note: Starting version 2.0, Spark is built with Scala 2.11 by default. Scala 2.10 users should download the Spark source package and build with Scala 2.10 support.
2.集群網(wǎng)絡(luò)環(huán)境
網(wǎng)絡(luò)基本配置
在root 用戶下打開/etc/sysconfig/network 對文件進(jìn)行如下配置
NETWORKING=yes
HOSTNAME=master

然后是配置生效:
hostname master
在slave1與slave2節(jié)點上的root用戶下重復(fù)相同的操作,分別將主機(jī)名改為slave1、salve2。
如果需要修改hostname,直接使用文本編輯器修改/etc/hostname配置文件(此種方法修改的是靜態(tài)主機(jī)名)。
前者是IP地址,后者是主機(jī)名,分別復(fù)制放在/etc/hosts 文件中,然后三臺虛擬機(jī)可以相互ping 的通。
59.68.29.103 slave1
59.68.29.105 master
59.68.29.108 slave2
注意:請將下面的
Static hostname的localhost名稱分別改為master、slave1、slave2,不然之后在WebUI上無法顯示節(jié)點信息內(nèi)容。

本集群共包含三個節(jié)點,所有節(jié)點均是Centos7.3 64位系統(tǒng),防火墻均禁用,每個節(jié)點上創(chuàng)建一個zhoujian用戶,用戶的主目錄是/home/zhoujian ,節(jié)點之間可以免密碼SSH訪問,節(jié)點的IP地址和主機(jī)名如下表:
| 序號 | IP地址 | 機(jī)器名 | 類型 | 用戶名 |
|---|---|---|---|---|
| 1 | 59.68.29.105 | master | NameNode/Master | zhoujian |
| 2 | 59.68.29.103 | slave1 | DateNode/Worker | zhoujian |
| 3 | 59.68.29.108 | slave2 | DateNode/Worker | zhoujian |
其中NameNode表示Hadoop集群中的主節(jié)點,DateNode表示Hadoop集群中的從節(jié)點,Master表示Spark集群中的主節(jié)點,Worker表示Spark集群中的從節(jié)點。
每個節(jié)點都創(chuàng)建一個zhoujian 的用戶:

3.軟件的安裝
1.配置服務(wù)器之間SSH無密碼登錄
原理:就是將三臺虛擬機(jī)的
id_rsa.pub公鑰都放在authorized_keys中,然后將authorized_keys放到/root/.ssh目錄下并執(zhí)行chmod 600 authorized_keys授予權(quán)限,即可將三臺虛擬機(jī)互通。
第一步:使用下面命令生成密鑰
ssh-keygen -t rsa
第二步:復(fù)制公鑰文件
cat id_rsa_pub >> authorized_keys
第三步:修改authorized_keys文件的權(quán)限
chomd 600 authorized_keys
第四步:三臺虛擬機(jī)的公鑰都復(fù)制到authorized_keys文件中
scp /root/.ssh/authorized_keys slave1:/root/.ssh/
scp /root/.ssh/authorized_keys slave2:/root/.ssh/
分別在slave1、slave2重復(fù)第三步的操作
第五步:驗證免密鑰登錄

2.安裝JDK
這里就不講了。
3.安裝Hadoop
1.上傳和解壓
安裝路徑為:/usr/local/hadoop/
2.修改hadoop目錄下的一系列配置文件
修改/usr/local/hadoop/hadoop-2.8.2/etc/hadoop中的配置文件,如下圖

第一步:配置hadoop-env.sh
打開hadoop-env.sh ,配置JDK路徑,在文件靠前的部分找到下面的一行代碼,然后添加實際的Java安裝路徑。

第二步:配置yarn-env.sh
打開yarn-env.sh,配置JDK的路徑。
在文件靠前的部分找到下面的一行代碼:

將這行代碼修改為一下形式:

第三步:配置core-site.xml
分別在master、slave1、slave2上切換至zhoujian 用戶,然后在主目錄下創(chuàng)建目錄hadoopdata
mkdir /home/zhoujian/hadoopdata
用以下代碼覆蓋core-site.xml文件中的內(nèi)容
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/zhoujian/hadoopdata</value>>
</property>
第四步:配置hdfs-site.xml
用以下代碼替換hdfs-site.xml中的內(nèi)容
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
第五步:配置yarn-site.xml
用以下代碼覆蓋yarn-site.xml中的內(nèi)容
<property>
<name>yarn.nodemanager.aux-service</name>
<value>mapreudce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:18040</value>
</property>
<property>
<name>yarn.resourcemanager.shceduler.address</name>
<value>master:18030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:18025</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:18141</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:18088</value>
</property>
第六步:配置 mapred-site.xml
復(fù)制/usr/local/hadoop/hadoop-2.8.2/etc/hadoop 目錄下的mapred-site.xml.template 文件,另存為該目錄下的mapred-site.xml
cp /usr/local/hadoop/hadoop-2.8.2/etc/hadoop/mapred-site.xml.template /usr/local/hadoop/hadoop-2.8.2/etc/hadoop/mapred-site.xml
用下面的代碼覆蓋mapred-site.xml中的內(nèi)容
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
第七步:配置slaves文件
用以下的代碼替換slaves中的內(nèi)容
slave1
slave2
需要注意:此處既可以給出兩個節(jié)點的IP地址,也可以給出機(jī)器名,但是要求每一個IP地址或機(jī)器獨占一行。
3.配置從節(jié)點
將master節(jié)點的安裝目錄/usr/local/hadoop/hadoop-2.8.2的hadoop-2.8.2 文件夾分別復(fù)制至每個節(jié)點的/usr/local/hadoop 目錄下。
#遠(yuǎn)程拷貝:將hadoop-2.8.2目錄文件復(fù)制到slave1的hadoop文件夾下
scp -r /usr/local/hadoop/hadoop-2.8.2/ slave1:/usr/local/hadoop/
scp -r /usr/local/hadoop/hadoop-2.8.2 slave2:/usr/local/hadoop/

4.配置系統(tǒng)文件
分別在master、slave1、slave2上以zhoujian用戶執(zhí)行以下步驟。
第一步:配置系統(tǒng)文件(centos 7 是修改/etc/profile 文件)
vim /etc/profile
第二步:在打開的.bash_profile文件中配置以下環(huán)境變量
export HADOOP_HOME=/usr/local/hadoop/hadoop-2.8.2
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
第三步:使其配置生效
source /etc/profile
5.啟動Hadoop集群
第一步:格式化文件系統(tǒng)
在master節(jié)點上執(zhí)行下面的格式化命令
hdfs namenode -format

格式化成功之后,可以看到/home/zhoujian/hadoopdata/dfs/name/current 目錄中有一系列的文件:

第二步:啟動Hadoop
進(jìn)入hadoop-2.8.2文件夾
cd /usr/local/hadoop/hadoop-2.8.2
執(zhí)行啟動命令
sbin/start-all.sh

第三步:驗證
master的終端執(zhí)行jps指令后出現(xiàn)4個進(jìn)程,在slave1、slave2的終端執(zhí)行jps指令后會出現(xiàn)3個進(jìn)程。
master節(jié)點:

slave1節(jié)點:

slave2節(jié)點:

備注:NameNode的端口號是50070,resourcemanager端口號是18088
4.安裝Scala
第一步:上傳至/usr/local/scala并解壓scala-2.11.8.tgz
tar -zvxf scala-2.11.8.tgz
第二步:配置環(huán)境變量
vim /etc/profile
在/etc/profile 文件中添加以下環(huán)境變量
export SCALA_HOME=/usr/local/scala/scala-2.11.8
export PATH=$PATH:$SCALA_HOME/bin
第三步:使環(huán)境變量生效
source /etc/profile
第四步:將scala-2.11.8發(fā)送至slave1、slave2
scp -r /usr/local/scala/scala-2.11.8 slave1:/usr/local/scala
scp -r /usr/local/scala/scala-2.11.8 slave2:/usr/local/scala
分別在slave1、salve2上重復(fù)第2步
第五步:驗證
分別在master、salve1、salve2中執(zhí)行scala -version ,如果安裝成功則顯示下面的

5.安裝Spark
1.下載并解壓spark安裝包
在master節(jié)點上傳壓縮包并解壓,上傳位置為/usr/local/spark
tar -zvxf spark-2.2.0-bin-hadoop2.7.tgz
2.配置Spark-env.sh
第一步: /usr/local/spark/spark-2.2.0-bin-hadoop2.7/conf目錄下文件如下所示:

復(fù)制其中的spark-env.sh.template 并另存為該目錄下的spark-env.sh
cp spark-env.sh.template spark-env.sh
第二步:打開spark-env.sh ,將一下代碼添加至spark-env.sh 中
#用戶根據(jù)實際安裝情況進(jìn)行配置
export HADOOP_CONF_DIR=/usr/local/hadoop/hadoop-2.8.2/
export JAVA_HOME=/usr/local/java/jdk1.8.0_144/
export SCALA_HOME=/usr/local/scala/scala-2.11.8
#綁定一個外部IP給master,master節(jié)點所在的機(jī)器的ip
export SPARK_MASTER_IP=59.68.29.105
#master啟動的端口號
export SPARK_MASTER_PORT=7077
#master的webUI端口號
export SPARK_MASTER_WEBUI_PORT=8080
#worker的啟動端口號
export SPARK_WORKER_PORT=7078
#worker的webUI端口號
export SPARK_WORKER_WEBUI_PORT=8081
#作業(yè)可用的CPU內(nèi)核數(shù)量(默認(rèn):所有可用)
export SPARK_WORKER_CORES=1
export SPARK_WORKER_INSTANCES=1
#作業(yè)可使用的內(nèi)存容量
export SPARK_WORKER_MEMORY=2g
3.配置spark-defaults.conf.template
第一步:進(jìn)入/usr/local/spark/spark-2.2.0-bin-hadoop2.7/conf ,復(fù)制spark-defaults.conf.template 并另存為該目錄下的spark-defaults.conf
cp spark-defaults.conf.template spark-defaults.conf
第二步:打開spark-defaults.conf,并添加以下代碼
#該參數(shù)需要根據(jù)用戶master節(jié)點的實際ip地址進(jìn)行配置
spark.master=spark://59.68.29.105:7077
4.配置slaves
第一步:進(jìn)入/usr/local/spark/spark-2.2.0-bin-hadoop2.7/conf ,復(fù)制slaves.template 并另存為該目錄下的slaves
cp slaves.template slaves
第二步:在salves中添加子節(jié)點機(jī)器名或IP地址
#需要注意slaves文件時每個機(jī)器名或ip地址獨占一行
59.68.29.103
59.68.29.108
5.配置環(huán)境變量
第一步:配置環(huán)境變量
vim /etc/profile
在/etc/profile 文件中添加以下環(huán)境變量
export SPARK_HOME=/usr/local/spark/spark-2.2.0-bin-hadoop2.7
export PATH=$PATH:$SPARK_HOME/bin
第二步:使環(huán)境變量生效
source /etc/profile
第三步:將scala-2.11.8發(fā)送至slave1、slave2
scp -r /usr/local/spark/spark-2.2.0-bin-hadoop2.7 slave1:/usr/local/spark
scp -r /usr/local/spark/spark-2.2.0-bin-hadoop2.7 slave2:/usr/local/spark
分別在slave1、slave2上重復(fù)第1步
6.啟動Spark
第一步:啟動Hadoop
第二步:進(jìn)入spark-2.2.0-bin-hadoop2.7啟動集群
#開啟
sbin/start-master.sh
sbin/start-slaves.sh
#停止
sbin/stop-master.sh
sbin/stop-slaves.sh
第三步:驗證集群時候搭建成功,分別在master、slave1、slave2上通過jps命令查看進(jìn)程



4.參考資料
Spark大數(shù)據(jù)分析實戰(zhàn)
https://my.oschina.net/xingkongxia/blog/610397
http://www.powerxing.com/install-hadoop-in-centos/
http://www.xuetuwuyou.com/course/149
http://docs.scala-lang.org/?_ga=2.265178895.1288223642.1513144087-1990176989.1511426647