Spark集羣安裝用戶手冊
1. 安裝虛擬機,安裝centos7(liunx操作系統)虛擬機取名爲CDHNode1
2. 爲centos7操作系統設置靜態ip
2.1虛擬機網絡適配器採用橋接方法
2.2配置DNS:
修改 /etc/resolv.conf 文件,添加如下代碼:
nameserver 192.168.1.101
2.3.配置固定IP地址:
修改 /etc/sysconfig/network-scripts/ifcfg-eth0 文件,該文件全部代碼如下:
設置靜態ip完成(虛擬機克隆時只需要改一下ip)克隆虛擬機至五個(192.168.1.101 192.168.1.102 192.168.1.103 192.168.1.104 192.168.1.105)
2.3修改對應的主機名CDHNode1至CDHNode5
Vim etc/sysconfig/network
3.使用Xshell遠程連接centos系統
3.1、首先點擊新建按鈕,如下;在新建會話屬性對話框中輸入名稱和需要連接的主機ip地址。
3.2、接下來點擊左側的用戶身份驗證,輸入要登錄主機的用戶名和密碼,點擊確定,此時創建成功。
3.3 4、此時連接成功,即可進行遠程操作
3.4依次連接CDHNode1到CDNode5
3.5:同步各主機的時間
a. 使用data設置日期時間
b. date –s 09/31/17 設置日期爲2017年09月31日
c. date –s 13:48:59
- 配置ssh免密登錄
接上面的配置,我們已經使用Xshell遠程登錄上五個節點。下面我們就配置免密碼登錄hadoop用戶,如果你使用root用戶登錄的,需要先切換到hadoop用戶,使用 su hadoop命令切換。步驟如下:
3.1、首先切換到hadoop的家目錄下,使用cd /home/hadoop命令來切換。然後在hadoop家目錄下創建 .ssh目錄。
3.2然後生成hadoop用戶的rsa(非對稱加密算法),運行如下命令後,一直回車,即可生成hadoop的公鑰和私鑰 shh –keygen –t rsa
3.3 切換到 .ssh目錄下,即可看到已經生成的公鑰和私鑰。
3.4 按照上面的步驟,在所有節點上生成公鑰和私鑰,接下來需要把所有節點的公鑰發到CDHNode1節點的授權文件。如下圖,我們使用Xshell最下方的撰寫欄向所有節點發送ssh-copy-id CDHNode1命令。
3.5 可以查看CDHNode1節點的授權文件authorized_keys中是否把所有節點的公鑰都添加到此文件中,若有節點沒有加入,則可以使用上一步命令重新添加。
3.6然後我們就把這個文件拷貝到其他節點的.ssh目錄下
CDHNode3、CDHNode4、CDHNode5按照上述命令自己執行。注意,這個命令是在CDHNode1節點上執行的。
3.7根據下圖,可以看到CDHNode5下已經複製了一份authorized_keys文件。下面以CDHNode5爲例,修改.ssh目錄以及.ssh目錄下的文件的權限。其他節點按照如下步驟 一 一 修改
3.8修改好權限後,至此ssh配置成功,可以使用ssh測試是否配置成功,第一次使用ssh連接其他節點時需要輸入yes,退出使用exit命令,在第二次登陸時,就不需要在輸入,如下圖直接登陸並顯示最後登錄時間
提示:rsa非對稱加密算法是把公鑰發送個對方,對方使用公鑰對數據進行加密後,自己在使用私鑰對數據進行解密。
免密碼登錄的原理:
1. 需要依靠密鑰,也就是自己創建的一對密鑰,並把公鑰放到需要訪問的服務器上。
2. 如果你需要連接SSH服務器,客戶端軟件就會向服務器發出請求,請求用你的密鑰進行安全驗證。
3. 服務器收到請求後,現在該服務器上的主目錄下尋找你的公鑰,然後把它和你發送過來的公鑰進行比較。如果兩個密鑰一致,服務端就用公鑰加密“質詢”(challenge),並把它發送給客戶端軟件。
4. 客戶端收到“質詢”後,就用你的私鑰進行解密。再把它發送個服務器。
5. 服務器比較發送來的“質詢”和原先的是否一致,如果一致則進行授權,完成建立會話的操作。
腳本工具的使用
此處使用腳本文件的目的是爲了簡化安裝步驟,畢竟有五個節點,如果全部使用命令一個一個操作,太費時費力了。爲了簡化操作,我們使用腳本文件來幫助我們執行多個重複的命令。就就相當於windows的批處理,把所有的命令集中起來,一個命令完成多個操作。
下面我們在CDHNode1節點上新建三個文件,deploy.conf(配置文件),deploy.sh(實現文件複製的shell腳本文件),runRemoteCdm.sh(在遠程節點上執行命令的shell腳本文件)。
1、我們把三個文件放到/home/hadoop/tools目錄下,先創建此目錄
[hadoop@CDHNode1 ~]
3、首先創建deploy.conf文件
[hadoop@CDHNode1 tools]$ vi deploy.conf
CDHNode1,all,zookeeper,journalnode,namenode,resourcemanager,
CDHNode2,all,slave,zookeeper,journalnode,namenode,datanode,resourcemanager,
CDHNode3,all,slave,zookeeper,journalnode,datanode,nodemanager,
CDHNode4,all,slave,journalnode,datanode,nodemanager,
CDHNode5,all,slave,journalnode,datanode,nodemanager,
先解釋一下這個文件,這個文件就是配置在每個幾點上的功能。比如zookeeper安裝在CDHnode1、CDHnode2、CDHnode3這三個主機上。其他的自己對比查看。
4、創建deploy.sh文件
[hadoop@CDHNode1 tools]$ vi deploy.sh
!/bin/bash
set -x
if [ $# -lt 3 ]
then
echo “Usage: ./deply.sh srcFile(or Dir) descFile(or Dir) MachineTag”
echo “Usage: ./deply.sh srcFile(or Dir) descFile(or Dir) MachineTag confFile”
exit
fi
src=
tag=
then
confFile=/usr/hadoop/tools/deploy.conf
else
confFile=$4
fi
if [ -f
then
for server in cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'
do
scp
then
for server in cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'
do
scp -r
done
else
echo “Error: No source file exist”
fi
else
echo “Error: Please assign config file or run deploy.sh command with deploy.conf in same directory”
fi
5、創建 runRemoteCmd.sh 腳本文件
[hadoop@CDHNode1 tools]$ vi runRemoteCmd.sh
!/bin/bash
set -x
if [ $# -lt 2 ]
then
echo “Usage: ./runRemoteCmd.sh Command MachineTag”
echo “Usage: ./runRemoteCmd.sh Command MachineTag confFile”
exit
fi
cmd=
if [ ‘a’$3’a’ == ‘aa’ ]
then
confFile=/usr/hadoop/tools/deploy.conf
else
confFile=$3
fi
if [ -f $confFile ]
then
for server in cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'
do
echo “*********
done
else
echo “Error: Please assign config file or run deploy.sh command with deploy.conf in same directory”
fi
6、給腳本文件添加執行權限。
[hadoop@CDHNode1 tools]
7、把tools目錄添加到環境變量PATH中。
[hadoop@CDHNode1 tools]$vi /home/hadoop/.bash_profile
添加下面內容?
tools
export PATH=
9、在CDHNode1節點上,通過runRemoteCmd.sh腳本,一鍵創建所有節點的軟件安裝目錄/home/hadoop/app。
[hadoop@CDHNode1 tools]$ runRemoteCmd.sh “mkdir /home/hadoop/app” all
我們可以在所有節點查看到/home/hadoop/app目錄已經創建成功。
我們先來說一下軟件的安裝步驟:
對於解壓安裝的軟件,安裝步驟爲:
1. 使用rz命令上傳要安裝的文件,此命令只能在遠程連接工具xshell上執行,不能再centos虛擬機上執行
2. 使用tar -zxvf softwarename.tar.gz
3. 修改配置文件(根據需要而定,有時可省略)
4. 在環境變量文件中配置環境變量
5. 使用source 是環境變量文件即時生效。
安裝JDK
首先在CDHNode1上安裝jdk,然後複製到其他節點。
1、上傳使用rz後,找到下載的jdk文件(jdk-7u79-Linux-x64.tar.gz )即可,選擇後就可以上傳,上傳需要時間。
[hadoop@CDHNode1 ~]
2、解壓.jdk-8u131-linux-i586.tar.gz
[hadoop@CDHNode1 app]$ tar zxvf jdk-7u79-linux-x64.tar.gz //解壓
3、修改jdk的名字,刪除上傳的壓縮文件.jdk-8u131-linux-i586.tar.gz
[hadoop@CDHNode1 app]
4、配置環境變量
[hadoop@CDHNode1 app]$vi /home/hadoop/.bash_profile
java
export JAVA_HOME=/home/hadoop/app/jdk
export CLASSPATH=.:
export PATH=
5、使環境變量文件即時生效
[hadoop@CDHNode1 app]$source /home/hadoop/.bash_profile
6、查看是否安裝成功,查看Java版本
[hadoop@CDHNode1 app]# java -version
出現以上結果就說明CDHNode1節點上的jdk安裝成功。
然後將CDHNode1下的jdk安裝包複製到其他節點上。
[hadoop@CDHNode1 app]$ deploy.sh jdk /home/hadoop/app/ slave
CDHNode2、CDHNode3、CDHNode4、CDHNode5加點重複CDHNode1上的jdk配置即可。就是在其他節點上從第4步開始配置。
、安裝Zookeeper
首先在CDHNode1上安裝Zookeeper,然後複製到其他節點。
1、 將本地下載好的zookeeper-3.4.6.tar.gz安裝包,上傳至CDHNode1節點下的/home/hadoop/app目錄下。
[hadoop@CDHNode1 app]$ rz //選擇本地下載好的zookeeper-3.4.8.tar.gz
2、解壓zookeeper-3.4.8.tar.gz
[hadoop@CDHNode1 app]$ tar zxvf zookeeper-3.4.8.tar.gz
3、修改zookeeper的名字,刪除上傳的壓縮文件zookeeper-3.4.8.tar.gz
[hadoop@CDHNode1 app]
4、修改Zookeeper中的配置文件。
[hadoop@CDHNode1 app]
hadoop@CDHNode1 conf]$ vi zoo.cfg
添加下面的
The number of milliseconds of each tick
tickTime=2000
The number of ticks that the initial
synchronization phase can take
initLimit=10
The number of ticks that can pass between
sending a request and getting an acknowledgement
syncLimit=5
the directory where the snapshot is stored.
do not use /tmp for storage, /tmp here is just
example sakes.
數據文件目錄與日誌目錄
dataDir=/home/hadoop/data/zookeeper/zkdata
dataLogDir=/home/hadoop/data/zookeeper/zkdatalog
the port at which the clients will connect
clientPort=2181
server.服務編號=主機名稱:Zookeeper不同節點之間同步和通信的端口:選舉端口(選舉leader)
server.1=CDHNode1:2888:3888
server.2=CDHNode2:2888:3888
server.3=CDHNode3:2888:3888
administrator guide before turning on autopurge.
http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
The number of snapshots to retain in dataDir
autopurge.snapRetainCount=3
Purge task interval in hours
Set to “0” to disable auto purge feature
autopurge.purgeInterval=1
5、配置環境變量
[hadoop@CDHNode1 app]
6、使環境變量文件即時生效
[hadoop@CDHNode1 app]$source /home/hadoop/.bash_profile
7、通過遠程命令deploy.sh將Zookeeper安裝目錄拷貝到其他節點(CDHNode2、CDHNode3)上面
[hadoop@CDHNode1 app]$deploy.sh zookeeper /home/hadoop/app/ zookeeper
8、通過遠程命令runRemoteCmd.sh在所有的zookeeper節點(CDHNode1、CDHNode2、CDHNode3)上面創建目錄:
[hadoop@CDHNode1 app]
9、然後分別在CDHNode1、CDHNode2、CDHNode3上面,進入zkdata目錄下,創建文件myid,裏面的內容分別填充爲:1、2、3, 這裏我們以CDHNode1爲例。
[hadoop@CDHNode1 app]
//輸入數字1
CDHNode2輸入數字2、CDHNode3輸入數字3。
10、在CDHNode2、CDHNode3上面配置Zookeeper環境變量。按照第5、6步配置。
11、使用runRemoteCmd.sh 腳本,啓動所有節點(CDHNode1、CDHNode2、CDHNode3)上面的Zookeeper。
[hadoop@CDHNode1 zkdata]$ runRemoteCmd.sh “/home/hadoop/app/zookeeper/bin/zkServer.sh start” zookeeper
12、查看所有節點上面的QuorumPeerMain進程是否啓動。
[hadoop@CDHNode1 zkdata]$ runRemoteCmd.sh “jps” zookeeper
13、查看所有Zookeeper節點狀態。
[hadoop@CDHNode1 zkdata]$ runRemoteCmd.sh “/home/hadoop/app/zookeeper/bin/zkServer.sh status” zookeeper
如果一個節點爲leader,另2個節點爲follower,則說明Zookeeper安裝成功。
安裝hadoop
首先在CDHNode1上安裝hadoop,然後複製到其他節點。
1、 將本地下載好的hadoop-2.7.3.tar.gz安裝包,上傳至CDHNode1節點下的/home/hadoop/app目錄下。
[hadoop@CDHNode1 app]$ rz //選擇本地下載好的hadoop-2.7.3.tar.gz
2、 解壓hadoop-2.7.3.tar.gz
[hadoop@CDHNode1 app]$ tar zxvf hadoop-2.7.3.tar.gz //解壓
3、 修改hadoop的名字,刪除上傳的壓縮文件hadoop-2.7.3.tar.gz
[hadoop@CDHNode1 app]
4、 配置環境變量
[hadoop@CDHNode1 app]$vi /home/hadoop/.bash_profile
添加
hadoop_home 2.7.3 path
HADOOP_HOME=/home/hadoop/app/hadoop
PATH=
export HADOOP_HOME PATH
5、 使環境變量文件即時生效
[hadoop@CDHNode1 app]$source /home/hadoop/.bash_profile
6、 切換到/home/hadoop/app/hadoop/etc/hadoop/目錄下,修改配置文件。
[hadoop@CDHNode1 app]
export JAVA_HOME=/home/hadoop/app/jdk
配置core-site.xml
[hadoop@CDHNode1 hadoop]$ vi core-site.xml
fs.defaultFS
hdfs://cluster1
hadoop.tmp.dir
/home/hadoop/data/tmp
ha.zookeeper.quorum
CDHNode1:2181,CDHNode2:2181,CDHNode3:2181,CDHNode4:2181,CDHNode5:2181
配置hdfs-site.xml
[hadoop@CDHNode1 hadoop]$ vi hdfs-site.xml
dfs.replication
3
dfs.permissions
false
dfs.permissions.enabled
false
dfs.nameservices
cluster1
dfs.ha.namenodes.cluster1
CDHNode1,CDHNode2
dfs.namenode.rpc-address.cluster1.CDHNode1
CDHNode1:9000
dfs.namenode.http-address.cluster1.CDHNode1
CDHNode1:50070
dfs.namenode.rpc-address.cluster1.CDHNode2
CDHNode2:9000
dfs.namenode.http-address.cluster1.CDHNode2
CDHNode2:50070
dfs.ha.automatic-failover.enabled
true
dfs.namenode.shared.edits.dir
qjournal://CDHNode1:8485;CDHNode2:8485;CDHNode3:8485;CDHNode4:8485;CDHNode5:8485/cluster1
dfs.client.failover.proxy.provider.cluster1
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.journalnode.edits.dir
/home/hadoop/data/journaldata/jn
dfs.ha.fencing.methods
shell(/bin/true)
dfs.ha.fencing.ssh.private-key-files
/home/hadoop/.ssh/id_rsa
dfs.ha.fencing.ssh.connect-timeout
10000
dfs.namenode.handler.count
100
配置 slave
[hadoop@CDHNode1 hadoop]$ vi slaves
CDHNode3
CDHNode4
CDHNode5
YARN安裝配置
配置mapred-site.xml
[hadoop@CDHNode1 hadoop]$ vi mapred-site.xml
mapreduce.framework.name
yarn
<– 指定運行mapreduce的環境是Yarn,與hadoop1不同的地方 –>
配置yarn-site.xml
[hadoop@CDHNode1 hadoop]$ vi yarn-site.xml
yarn.resourcemanager.connect.retry-interval.ms
2000
yarn.resourcemanager.ha.enabled
true
yarn.resourcemanager.ha.automatic-failover.enabled
true
yarn.resourcemanager.ha.automatic-failover.embedded
true
yarn.resourcemanager.cluster-id
yarn-rm-cluster
yarn.resourcemanager.ha.rm-ids
rm1,rm2
yarn.resourcemanager.hostname.rm1
CDHNode1
yarn.resourcemanager.hostname.rm2
CDHNode2
yarn.resourcemanager.recovery.enabled
true
yarn.resourcemanager.zk.state-store.address
CDHNode1:2181,CDHNode2:2181,CDHNode3:2181,CDHNode4:2181,CDHNode5:2181
yarn.resourcemanager.zk-address
CDHNode1:2181,CDHNode2:2181,CDHNode3:2181,CDHNode4:2181,CDHNode5:2181
yarn.resourcemanager.address.rm1
CDHNode1:8032
yarn.resourcemanager.scheduler.address.rm1
CDHNode1:8034
yarn.resourcemanager.webapp.address.rm1
CDHNode1:8088
yarn.resourcemanager.address.rm2
CDHNode2:8032
yarn.resourcemanager.scheduler.address.rm2
CDHNode2:8034
yarn.resourcemanager.webapp.address.rm2
CDHNode2:8088
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.nodemanager.aux-services.mapreduce_shuffle.class
org.apache.hadoop.mapred.ShuffleHandler
向所有節點分發hadoop安裝包。
[hadoop@CDHNode1 app]$ deploy.sh hadoop /home/hadoop/app/ slave
建立好目錄(用於存放數據的目錄):
runRemoteCmd.sh “mkdir -p /home/hadoop/data/name” all
runRemoteCmd.sh “mkdir -p /home/hadoop/data/hdfs/edits” all
runRemoteCmd.sh “mkdir -p /home/hadoop/data/datanode” all
runRemoteCmd.sh “mkdir -p /home/hadoop/data/journaldata/jn” all
runRemoteCmd.sh “mkdir -p /home/hadoop/data/tmp” all
runRemoteCmd.sh “touch /home/hadoop/app/hadoop/etc/hadoop/excludes” all
runRemoteCmd.sh “mkdir -p /home/hadoop/data/pid” all
當你的在初始化工程中出錯,要把相關目錄的文件刪除,然後再重新初始化
rm -rf /home/hadoop/data/name/*
rm -rf /home/hadoop/data/hdfs/edits/*
rm -rf /home/hadoop/data/datanode/*
rm -rf /home/hadoop/data/journaldata/jn/*
rm -rf /home/hadoop/data/tmp/*
集羣初始化
1、啓動所有節點上面的Zookeeper進程
[hadoop@CDHNode1 hadoop]$ runRemoteCmd.sh “/home/hadoop/app/zookeeper/bin/zkServer.sh start” zookeeper
2、啓動所有節點上面的journalnode進程
[hadoop@CDHNode1 hadoop]$ runRemoteCmd.sh “/home/hadoop/app/hadoop/sbin/hadoop-daemon.sh start journalnode” all
2、 首先在主節點上(比如,CDHNode1)執行格式化
[hadoop@CDHNode1 hadoop]
[hadoop@CDHNode1 hadoop]$bin/hdfs namenode //啓動namenode
注意:執行完上述命令後,程序就會在等待狀態,只有執行完下一步時,利用按下ctrl+c來結束namenode進程。
4、與此同時,需要在備節點(比如 CDHNode2)上執行數據同步
注意:同時是在執行完上一步後,上一步程序停止的情況下執行此步驟的
[hadoop@CDHNode2 hadoop]$ bin/hdfs namenode -bootstrapStandby //同步主節點和備節點之間的元數據
5、CDHNode2同步完數據後,緊接着在CDHNode1節點上,按下ctrl+c來結束namenode進程。 然後關閉所有節點上面的journalnode進程
[hadoop@CDHNode1 hadoop]$ runRemoteCmd.sh “/home/hadoop/app/hadoop/sbin/hadoop-daemon.sh stop journalnode” all //然後停掉各節點的journalnode
6、如果上面操作沒有問題,我們可以一鍵啓動hdfs所有相關進程
[hadoop@CDHNode1 hadoop]$ sbin/start-dfs.sh
啓動成功之後,查看關閉其中一個namenode ,然後在啓動namenode 觀察切換的狀況
7、驗證是否啓動成功
通過web界面查看namenode啓動情況。
啓動成功之後,查看關閉其中一個namenode ,然後在啓動namenode 觀察切換的狀況
使用命令 kill
上傳文件至hdfs
[hadoop@CDHNode1 hadoop]
[hadoop@CDHNode1 hadoop]
如果上面操作沒有問題說明hdfs配置成功。
啓動YARN
1、在CDHNode1節點上執行。
[hadoop@CDHNode1 hadoop]$ sbin/start-yarn.sh
2、在CDHNode2節點上面執行。
[hadoop@CDHNode2 hadoop]$ sbin/yarn-daemon.sh start resourcemanager
同時打開一下web界面。
http://192.168.1.101:8088
關閉1 再啓動
集羣關啓順序
關閉YARN
a、在CDHNode2節點上面執行
hadoop@CDHNode2 hadoop]$ sbin/yarn-daemon.sh stop resourcemanager
b、在CDHNode1節點上執行
[hadoop@CDHNode1 hadoop]$ sbin/stop-yarn.sh
c、關閉HDFS
hadoop@CDHNode1 hadoop]$ sbin/stop-dfs.sh
d、關閉zookeeper
[hadoop@CDHNode1 hadoop]$ runRemoteCmd.sh “/home/hadoop/app/zookeeper/bin/zkServer.sh stop” zookeeper
再次啓動集羣
a、啓動zookeeper
[hadoop@CDHNode1 hadoop]$ runRemoteCmd.sh “/home/hadoop/app/zookeeper/bin/zkServer.sh start” zookeeper
b、啓動HDFS
[hadoop@CDHNode1 hadoop]$ sbin/start-dfs.sh
c、在CDHNode1節點上執行
[hadoop@CDHNode1 hadoop]$ sbin/start-yarn.sh
d、在CDHNode2節點上面執行
[hadoop@CDHNode2 hadoop]$ sbin/yarn-daemon.sh start resourcemanager
至此,hadoop 分佈式集羣搭建完畢
安裝spark集羣
1. 按照上面的步驟安裝scala
[hadoop@CDHNode1 app]
[hadoop@CDHNode1 app]
- 配置scala
配置環境變量
[hadoop@cdhnode1 app]$ vim /home/hadoop/.bash_profile
set scala
export SCALA_HOME=/home/hadoop/app/scala
export PATH=
立即生效環境變量的配置
Source /home/Hadoop/.bash_profile
進入scala命令行
向其他節點分發安裝包
[hadoop@CDHNode1 app]
添加
export SPARK_HOME=/home/hadoop/app/spark
export PATH=
立即生效環境變量的配置
Source /home/Hadoop/.bash_profile
配置spark-env.sh
[hadoop@cdhnode1 app]
添加如下內容
set enviroment
export JAVA_HOME=/home/hadoop/app/jdk
export SCALA_HOME=/home/hadoop/app/scala
export SPARK_MASTER_IP=192.168.1.101
export SPARK_WORKER_MEMORY=2g
export HADOOP_CONF_DIR=/home/hadoop/app/hadoop/etc/Hadoop
配置slaves
[hadoop@cdhnode1 conf]$ vim slaves
添加
CDHNode1
CDHNode2
CDHNode3
CDHNode4
CDHNode5
在啓動hadoop的基礎上啓動spark
[hadoop@cdhnode1 spark]$ sbin/start-all.sh
Spark安裝完成。