總體步驟
?
1、分配機器,各安裝什么軟件
2、每個節點設置時間一致,設置開機自動校驗時間。
3、每個節點修改主機名。
4、每個節點配置hosts。
5、每個節點關閉防火墻。
6、上傳JDK,配置JDK
7、創建hadoop用戶。
8、給hadoop用戶配置root組
-------以下hadoop用戶的操作---------
9、開啟ssh免密登錄。
10、上傳Zookeeper到HA8,解壓
11、環境變量配置zookeeper
12、配置zoo.cfg文件。
13、創建zoo.cfg中配置的文件夾
14、配置myid文件
15、刪除zookeeper安裝目錄下無用的幫助文檔。
16、scp zookeeper的安裝目錄到8,9,10節點。
17、修改其他節點上的 myid文件
18、scp 環境變量到其他節點。
19、source 各個節點的環境變量。
20、啟動。
21、查看狀態。
22、停止Zookeeper
23、上傳hadoop 壓縮包,解壓
24、配置hadoop 環境變量
25、配置hadoop-HA參數
26、scp環境變量到1~7節點
27、source 環境變量1~7節點
28、scp hadoop.xxx文件夾到1~7節點
29、啟動
?
*將整個過程編程shell或Python命令
?
1、分配機器
10臺centos
?
機器名 | 安裝的軟件 | 進程 |
HA1 | JDK,hadoop | namenode,zkfc |
HA2 | JDK,hadoop | namenode,zkfc |
HA3 | JDK,hadoop | resourcemanager |
HA4 | JDK,hadoop | resourcemanager |
HA5 | JDK,hadoop | datenode,nodemanager |
HA6 | JDK,hadoop | datenode,nodemanager |
HA7 | JDK,hadoop | datenode,nodemanager |
HA8 | JDK,zookeeper,hadoop | JournalNode、QuorumPeerMain,zkfc狀態值,yarn的ha狀態值 |
HA9 | JDK,zookeeper,hadoop | JournalNode、QuorumPeerMain,zkfc狀態值,yarn的ha狀態值 |
HA10 | JDK,zookeeper,hadoop | JournalNode、QuorumPeerMain,zkfc狀態值,yarn的ha狀態值 |
?
?
2、每個節點設置時間一致,設置開機自動校驗時間。
chkconfig --list
chkconfig --level 12345 ntpdate?on
service ntpdate start
?
?
3、每個節點修改主機名。
vi /etc/sysconfig/network
hostname HA123456...10
?
?
4、每個節點配置hosts。
vi /etc/hosts
?
192.168.18.136 HA1
192.168.18.137 HA2
192.168.18.138 HA3
192.168.18.139 HA4
192.168.18.140 HA5
192.168.18.141 HA6
192.168.18.142 HA7
192.168.18.143 HA8
192.168.18.144 HA9
192.168.18.145 HA10
?
//要編寫一個shell腳本,如果集群里有幾十臺怎么辦?
?
5、每個節點關閉防火墻。
chkconfig iptables off
service iptables stop
?
6、新建application文件夾,上傳JDK,配置JDK
每臺機器都需要
1、HA1上傳JDK壓縮包到根目錄
2、解壓到根目錄
tar -xzvf jdk-8u73-linux-x64.tar.gz
vi /etc/profile
export JAVA_HOME=/jdk1.8.0_73
export PATH=$PATH:$JAVA_HOME/bin
刪除一些無用的文件
拷貝到其他機器,在向所有窗口發送中輸入:
scp -r HA1:/jdk1.8.0_73/ $HOSTNAME:/
?
拷貝 /etc/profile 到其他機器
scp HA1:/etc/profile $HOSTNAME:/etc/profile
source /etc/profile
?
7、 創建hadoop賬號
adduser hadoop
passwd hadoop
123456
?
8、給hadoop用戶配置root組
vi /etc/sudoers
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
在這里添加
hadoop ALL=(ALL) ALL
?
?
------------以下hadoop用戶的操作-----------------
9、開啟ssh免密登錄。
ssh-keygen -t rsa
touch?authorized_keys
修改authorized_keys文件權 限為 600,命令:chmod 600 authorized_keys
如果不修改權限,通不過linux的權限認證,ssh會無效的
?
這個ssh免密登錄是針對hadoop用戶。root用戶沒有配置,不能免密登錄對方。ssh免密是用戶有效
?
10、上傳Zookeeper到HA8,解壓
上傳到home文件夾下
解壓到home文件夾下
tar -xzvf zookeeper-3.3.6.tar.gz
?
11、環境變量配置zookeeper
sudo vi /etc/profile
export ZOOKEEPER_HOME=/home/hadoop/zookeeper-3.3.6
export PATH=$PATH:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin
?
?
12、配置zoo.cfg文件。
cd conf/
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
dataDir=/home/hadoop/zookeeper-3.3.6/data
dataLogDir=/application/zookeeper-3.3.6/log
?
server.1=HA8:2888:3888
server.2=HA9:2888:3888
server.3=HA10:2888:3888
?
13、創建zoo.cfg中配置的文件夾
[hadoop@HA8 zookeeper-3.3.6]$ mkdir data
[hadoop@HA8 zookeeper-3.3.6]$ mkdir log
?
?
14、配置myid文件
cd data
vi myid
1
不能帶有空格或空行
?
15、刪除zookeeper安裝目錄下無用的幫助文檔。
rm -rf docs dist-maven/
rm -rf src.zip *.txt javafx-src.zip *.html
rm -rf *.xml *.txt src zookeeper-3.3.6.jar.*
?
?
16、scp zookeeper的安裝目錄到8,9,10節點。
[hadoop@HA8 ~]$ scp -r zookeeper-3.3.6 HA9:/home/hadoop
[hadoop@HA8 ~]$ scp -r zookeeper-3.3.6 HA10:/home/hadoop
?
?
17、修改其他節點上的 myid文件
cd data
vi myid?
2 ?另一臺 3
不能帶有空格或空行
?
18、scp 環境變量到其他節點。
sudo scp /etc/profile HA9:/etc/profile
sudo scp /etc/profile HA10:/etc/profile
?
?
19、source 各個節點的環境變量。
source /etc/profile
?
20、啟動。
?8,9,10三臺機器都要運行
zkServer.sh start
?
21、查看狀態。
8,9,10三臺都要運行
jsp
zkServer.sh status
?
22、停止Zookeeper
Zookeeper安裝啟動成功后,先stop。
8,9,10三臺都要運行
zkServer.sh stop
?
23、上傳hadoop 壓縮包,解壓
[hadoop@HA1 hadoop-2.7.3]$ tar -xzvf hadoop-2.7.3.tar.gz
?
24、配置hadoop 環境變量
sodu vi /etc/profile
?
export HADOOP_HOME=/home/hadoop/hadoop-2.7.3
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
?
除了配置HA1,還要配置 HA8,9,10
?
25、配置hadoop-HA參數
25.1修改hadoop-env.sh
vi hadoop-env.sh
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/jdk1.8.0_73
?
25.2修改core-site.xml
<configuration>
<!-- 指定hdfs的nameservice為nbdo -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://nbdo/</value>
</property>
<!-- 指定hadoop臨時目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/app/hdpdata/</value>
</property>
?
<!-- 指定zookeeper地址 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>HA8:2181,HA9:2181,HA10:2181</value>
</property>
</configuration>
?
25.3修改hdfs-site.xml
<configuration>
<!--指定hdfs的nameservice為nbdo,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>nbdo</value>
</property>
<!-- nbdo下面有兩個NameNode,分別是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.nbdo</name>
<value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.nbdo.nn1</name>
<value>HA1:9000</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.nbdo.nn1</name>
<value>HA1:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.nbdo.nn2</name>
<value>HA2:9000</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.nbdo.nn2</name>
<value>HA2:50070</value>
</property>
<!-- 指定NameNode的edits元數據在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://HA8:8485;HA9:8485;HA10:8485/nbdo</value>
</property>
<!-- 指定JournalNode在本地磁盤存放數據的位置 -->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/journaldata</value>
</property>
<!-- 開啟NameNode失敗自動切換 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失敗自動切換實現方式 -->
<property>
<name>dfs.client.failover.proxy.provider.nbdo</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔離機制方法,多個機制用換行分割,即每個機制暫用一行,防止腦裂問題-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<!-- 使用sshfence隔離機制時需要ssh免登陸 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<!-- 配置sshfence隔離機制超時時間 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>
?
?
25.4修改mapred-site.xml
[hadoop@HA1 hadoop]$ cp mapred-site.xml.template mapred-site.xml
[hadoop@HA1 hadoop]$ vi mapred-site.xml
?
<configuration>
<!-- 指定mr框架為yarn方式 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
?
25.5修改yarn-site.xml
<configuration>
<!-- 開啟RM高可用 -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<!-- 指定RM的cluster id -->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yrc</value>
</property>
<!-- 指定RM的名字 -->
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<!-- 分別指定RM的地址 -->
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>HA3</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>HA4</value>
</property>
<!-- 指定zk集群地址 -->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>HA8:2181,HA9:2181,HA10:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
?
25.5修改slaves
(slaves是指定子節點的位置,因為要在HA1和HA2上啟動HDFS、在HA3和HA4啟動yarn,所以HA1和HA2上的slaves文件指定的是datanode的位置,HA3和HA4上的slaves文件指定的是nodemanager的位置)
HA5
HA6
HA7
?
26、scp環境變量到1~7節點
sudo scp HA1:/etc/profile $HOSTNAME:/etc/profile
?
?
27、source 環境變量1~7節點
source /etc/profile
?
28、scp hadoop.xxx文件夾其他9臺機器
刪除share文件下的doc文件夾
rm -rf doc
scp -r HA1:/home/hadoop/hadoop-2.7.3 $HOSTNAME:/home/hadoop/
?
?
?
29、啟動
順序嚴格按照
29.1啟動Zookeeper
HA8,9,10
zkServer.sh start
?
29.2啟動journalnode
HA8,9,10
hadoop-daemon.sh start journalnode
?
29.3格式化HDFS
#在HA1上執行命令:
hdfs namenode -format
#格式化后會在根據core-site.xml中的hadoop.tmp.dir配置生成個文件,這里我配置的是/home/hadoop/app/hdpdata/,然后將/home/hadoop/app/hdpdata/拷貝到HA2的/home/hadoop/app/hdpdata/。
scp -r
##也可以這樣,建議HA2上運行:hdfs namenode -bootstrapStandby
?
29.4格式化ZKFC(在HA1上執行一次即可)
hdfs zkfc -formatZK
?
29.5啟動HDFS(在HA1上執行)
sbin/start-dfs.sh
?
?
29.6啟動YARN
(#####注意#####:是在HA3上執行start-yarn.sh,把namenode和resourcemanager分開是因為性能問題,因為他們都要占用大量資源,所以把他們分開了,他們分開了就要分別在不同的機器上啟動)
HA3上:sbin/start-yarn.sh
HA4上:yarn-daemon.sh start resourcemanager
?
yarn-ha,還需要手動啟動(HA4上:yarn-daemon.sh start resourcemanager)第二個resourcemanager,
因為start-yarn.sh不具備啟動第二個resourcemanager的功能
?
?
[hadoop@HA1 .ssh]$ jps
2949 DFSZKFailoverController
3064 Jps
2622 NameNode
[hadoop@HA1 .ssh]$
?
[hadoop@HA2 .ssh]$ jps
2040 NameNode
2154 DFSZKFailoverController
2287 Jps
?
[hadoop@HA3 ~]$ jps
2593 ResourceManager
2859 Jps
?
[hadoop@HA4 ~]$ jps
2320 ResourceManager
2376 Jps
[hadoop@HA4 ~]$
?
[hadoop@HA5 ~]$ jps
2331 Jps
2220 NodeManager
2015 DataNode
[hadoop@HA5 ~]$
?
[hadoop@HA6 ~]$ jps
2317 Jps
2206 NodeManager
2015 DataNode
[hadoop@HA6 ~]$
?
[hadoop@HA7 ~]$ jps
2419 NodeManager
2551 Jps
2008 DataNode
[hadoop@HA7 ~]$
?
[hadoop@HA8 ~]$ jps
2187 Jps
1979 QuorumPeerMain
2031 JournalNode
[hadoop@HA8 ~]$
?
[hadoop@HA9 ~]$ jps
2001 JournalNode
2157 Jps
1951 QuorumPeerMain
[hadoop@HA9 ~]$
?
[hadoop@HA10 ~]$ jps
2178 Jps
2019 JournalNode
1961 QuorumPeerMain
[hadoop@HA10 ~]$
?
http://192.168.18.136:50070/(HDFS管理界面)
?
?
http://192.168.18.138:8088/ (MR管理界面)
?
?