搭建hadoop2 HA

1、簡介

1.1 背景:

針對Hadoop 1.x中可能出現的NameNode單點故障(SPOF)或者短期沒法使用的狀況,Hadoop 2.x 經過增長一個NameNode的方式進行了改善,而增長一個NameNode後,實際在沒有出現問題時,只須要一個NameNode,因此兩個NameNode一個處於Standby狀態,一個處於Active狀態。Standby不對外提供服務,僅同步Active NameNode的狀態,以便Active NameNode出現問題時及時切換成Active狀態。java

 

1.2 架構:

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

 

1.3 HDFS HA配置:

NameNode:對應配置相同的兩臺物理機,分別運行Active NameNode和Standby NameNode。vim

JournalNode:JournalNode不會耗費太多的資源,能夠和其它進程部署在一塊兒,如NameNode、Datanode、ResourceManager等,須要至少3個且爲基數,這樣能夠容許(N-1)/2個JNS進程失敗。centos

DataNode:根據數據量的大小和處理數據所需資源進行配置,通常實際應用中數量較多,且分佈在較多的機器上。安全

 

2、安裝配置

各安裝文件版本信息

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 安裝centos 7

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 Hadoop安裝前的準備:

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 Hadoop安裝、配置 

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集羣安裝配置完成。  

相關文章
相關標籤/搜索