針對Hadoop 1.x中可能出現的NameNode單點故障(SPOF)或者短期沒法使用的狀況,Hadoop 2.x 經過增長一個NameNode的方式進行了改善,而增長一個NameNode後,實際在沒有出現問題時,只須要一個NameNode,因此兩個NameNode一個處於Standby狀態,一個處於Active狀態。Standby不對外提供服務,僅同步Active NameNode的狀態,以便Active NameNode出現問題時及時切換成Active狀態。java
Hadoop 2.x 的兩個NameNode通常會配置在兩臺獨立的機器上,Active NameNode會響應集羣客戶端,而Standby NameNode只是做爲Active NameNode的備份,保證在Active NameNode出現問題時可以快速的替代它。node
Standby NameNode經過JournalNodes的通訊來與Active NameNode保持同步。linux
Active NameNode和Standby NameNode在哪一個節點上,是由zookeeper經過主備選舉機制來肯定的。apache
NameNode:對應配置相同的兩臺物理機,分別運行Active NameNode和Standby NameNode。vim
JournalNode:JournalNode不會耗費太多的資源,能夠和其它進程部署在一塊兒,如NameNode、Datanode、ResourceManager等,須要至少3個且爲基數,這樣能夠容許(N-1)/2個JNS進程失敗。centos
DataNode:根據數據量的大小和處理數據所需資源進行配置,通常實際應用中數量較多,且分佈在較多的機器上。安全
CentOS-7-x86_64-Minimal-1511.isobash
jdk-8u101-linux-x64.tar.gz網絡
zookeeper-3.4.8.tar.gz架構
hadoop-2.6.0.tar.gz
2.1.1 安裝虛擬機和Linux系統:
我採用的是VMware Workstation 12 Player安裝的centos 7,先安裝VMware,此步驟不作描述。
安裝最小化centos,比較簡單,也不作詳細描述。我沒有設置帳戶,因此開機後的帳戶爲root帳戶,密碼本身設置。
2.1.2 配置、鏈接網絡
centos安裝後須要手動聯網:
開機後登錄root,修改文件進行聯網:
cd /etc/sysconfig/network-scripts/
vi ifcfg-eno16777736
且分別加入主機名和IP地址:
IPADDR=192.168.152.153 //其它節點將最後一個數字加1便可,按照集羣規劃的IP進行設置
重啓網絡服務
service network restart
修改主機名:
hostnamectl set-hostname 主機名
2.1.3 設置IP地址和主機名映射
su root
vim /etc/hosts
192.168.152.155 hadoop-namenode1
192.168.152.153 hadoop-namenode2
192.168.152.154 hadoop-datanode1
關閉防火牆和Selinux
systemctl stop firewalld.service
systemctl disable firewalld.service
vim /etc/selinux/config
SELINUX=disabled
重啓,查看Selinux狀態
gentenforce
2.2.1 建立組和用戶並添加權限:
groupadd hadoop //建立組hadoop
useradd -g hadoop hadoop //建立組hadoop下的用戶hadoop
passwd hadoop //修改用戶hadoop的密碼
yum install vim //安裝vim
vim /etc/sudoers //修改配置文件sudoers給hadoop用戶添加sudo權限,添加如下內容:
hadoop ALL=(ALL) ALL
2.2.2 配置SSH免密碼登陸:
在namenode1節點上生成SSH密鑰對
su hadoop
$ ssh-keygen -t rsa
將公鑰複製到集羣全部節點機器上
$ ssh-copy-id hadoop-namenode1
$ ssh-copy-id hadoop-namenode2
$ ssh-copy-id hadoop-datanode1
經過ssh登陸各節點測試是否免密碼登陸成功
2.3.1 安裝JDK
卸載自帶的openjdk(centos7沒有自帶的openjdk,因此直接安裝jdk便可)
建立安裝路徑:
mkdir apache
tar -xvf jdk-8u101-linux-x64.tar.gz /home/hadoop/apache/
配置環境變量:
vim ~/.bash_profile
添加如下內容:
export JAVA_HOME=/home/hadoop/apache/jdk1.8.0_101
export PATH=$PATH:$JAVA_HOME/bin
保存,經過如下指令使環境變量生效:
source ~/.bash_profile
測試JDK是否安裝成功:
java -version
2.3.2 安裝zookeeper集羣
解壓縮zookeeper安裝包
tar -xvf zookeeper3.4.8.tar.gz /home/hadoop/apache/
刪除安裝包:
rm zookeeper3.4.8.tar.gz
配置hadoop用戶權限:
chown -R hadoop:hadoop zookeeper-3.4.8
修改zookeeper的配置文件:
cd apache/zookeeper-3.4.8/conf
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
設置以下:
tickTime=2000 //客戶端心跳時間(毫秒)
initLimit=10 //循序心跳間隔的最大時間
syncLimit=5 //同步時限
dataDir=/home/hadoop/apache/zookeeper3.4.8/data //數據存儲目錄
dataLogDir=/home/hadoop/apache/zookeeper3.4.8/data/log //數據日誌存儲目錄
clientPort=2181 //端口號
maxClientCnxns=2000 //鏈接zookeeper的最大數量
server.1=hadoop-namenode1:2888:3888 //設置zookeeper的節點
server.2=hadoop-namenode2:2888:3888
server.3=hadoop-datanode1:2888:3888
建立zookeeper的數據存儲目錄和日誌存儲目錄:
cd ..
mkdir -p data/log
修改數據存儲文件和日誌文件的權限:
chown -R hadoop:hadoop data
cd data
chown -R hadoop:hadoop log
在data目錄下建立文件myid,輸入內容爲1
echo "1" >> data/myid //待工做目錄同步到其它兩個節點後分別修改內容爲2和3
將zookeeper工做目錄同步到集羣其它節點
scp -r zookeeper-3.4.8 hadoop@hadoop-namenode2:/home/hadoop/apache/
scp -r zookeeper-3.4.8 hadoop@hadoop-datanode1:/home/hadoop/apache/
分別修改myid的值爲2和3,並配置全部節點的環境變量。
vim ~/.bash_profile
export ZOOKEEPER_HOME=/home/hadoop/apache/zookeeper-3.4.8
export PATH=$PATH:$ZOOKEEPER_HOME/bin
到這裏zookeeper的集羣就已經搭建好了,下面進行啓動:
zkServer.sh start
查看進程:
jps
2.3.3 Hadoop的安裝和配置
在namenode1節點下解壓縮安裝文件
tar -xvf hadoop-2.6.0.tar.gz /home/hadoop/apache/
刪除安裝文件
rm hadoop2.6.0.tar.gz
設置用戶權限
cd apache
chown -R hadoop:hadoop hadoop-2.6.0/
配置文件
cd hadoop-2.6.0/etc/hadoop/
vim hadoop-env.sh
保存後,建立剛纔設定的目錄:
cd /home/hadoop/apache/hadoop-2.6.0
mkdir pids
mkdir -p data/logs
配置core-site.xml:
cd etc/hadoop
vim core-site.xml
配置hdfs-site.xml:
vim hdfs-site.xml
配置mapred-site.xml:
cp mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
配置yarn-site.xml文件:
vim yarn-site.xml
配置slave文件:
vim slaves
hadoop-datanode1
建立配置文件中涉及到的目錄:
cd ../..
mkdir -p data/tmp
mkdir -p data/journal
mkdir -p data/namenode
mkdir -p data/datanode
將hadoop工做目錄同步到集羣其它節點
scp -r hadoop-2.6.0 hadoop@hadoop-namenode2:/home/hadoop/apache/
scp -r hadoop-2.6.0 hadoop@hadoop-datanode1:/home/hadoop/apache/
在全部節點上配置環境變量:
vim ~/.bash_profile
export HADOOP_HOME=/home/hadoop/apache/hadoop-2.6.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
使修改後的環境變量生效:
source ~/.bash_profile
Hadoop集羣初始化
在全部節點上啓動zookeeper集羣:
zkServer.sh start
在hadoop-namenode1上格式化zkfc:
hdfs zkfc -formatZK
啓動journalnode(在namenode1,namenode2和datanode1上):
hadoop-daemon.sh start journalnode
格式化HDFS(在hadoop-namenode1上):
hadoop namenode -format
將格式化後namenode1節點hadoop工做目錄中的元數據目錄複製到namenode2節點
scp-r /home/hadoop/apache/hadoop-2.6.0/data/namenode/* hadoop@hadoop-namenode2:/home/hadoop/apache/hadoop-2.6.0/data/namenode/
啓動Hadoop集羣
在hadoop-namenode1上啓動dfs:
start-dfs.sh
start-dfs.sh命令會開啓如下進程:
namenode
journalnode
DFSZKFailoverController
datanode
啓動YARN(在namenode2上操做)
start-yarn.sh
啓動YARN上的另外一個ResourceManager
yarn-daemon.sh start resourcemanager
啓動YARN的安全代理
yarn-daemon.sh start proxyserver
注:proxyserver充當防火牆的角色,提升訪問集羣的安全性
啓動YARN的歷史任務服務
mr-jobhistory-daemon.sh start historyserver
至此,Hadoop集羣安裝配置完成。