1. 程式人生 > >Hadoop-2.8.5的HA集群搭建

Hadoop-2.8.5的HA集群搭建

適配 bin tom proto format 切換 enabled 完成 數字

一、Hadoop HA 機制的學習

  1.1、Hadoop 2.X 的架構圖

    技術分享圖片

  2.x版本中,HDFS架構解決了單點故障問題,即引入雙NameNode架構,同時借助共享存儲系統來進行元數據的同步,共享存儲系統類型一般有幾類,如:Shared NAS+NFS、BookKeeper、BackupNode 和 Quorum Journal Manager(QJM),上圖中用的是QJM作為共享存儲組件,通過搭建奇數結點的JournalNode實現主備NameNode元數據操作信息同步。

  1.2、QJM原理

  QJM全稱是Quorum Journal Manager, 由JournalNode(JN)組成,一般是奇數點結點組成。每個JournalNode對外有一個簡易的RPC接口,以供NameNode讀寫EditLog到JN本地磁盤。當寫EditLog時,NameNode會同時向所有JournalNode並行寫文件,只要有N/2+1結點寫成功則認為此次寫操作成功,遵循Paxos協議。其內部實現框架如下:

技術分享圖片

1.3、主備切換機制

  要完成HA,除了元數據同步外,還得有一個完備的主備切換機制,Hadoop的主備選舉依賴於ZooKeeper。下面是主備切換的狀態圖:

  技術分享圖片

  上面介紹了下關於HadoopHA機制,歸納起來主要是兩塊:元數據同步和主備選舉。元數據同步依賴於QJM共享存儲,主備選舉依賴於ZKFC和Zookeeper。整個過程還是比較復雜的,如果能理解Paxos協議,那也能更好的理解這個。

  詳細請參考:https://www.cnblogs.com/qcloud1001/p/7693476.html

二、hadoop2.8.5 的HA 集群搭建準備

  2.1、集群搭建準備

    這裏使用的是:  CentOS7.0   VMware Workstation 14  SecureCRT連接工具

             Hadoop-2.8.5   jdk-1.8.0_191  zookeeper-3.4.6

    apache全系列資源官網下載:http://mirror.bit.edu.cn/apache/

  2.2、虛擬機設置

    打開VMware Workstation 14 通過ALT+E+N打開虛擬網絡編輯器

以下1、2、3 需要記錄,需要在虛擬機中配置

技術分享圖片

  通過cmd也能找到網卡設置

    cmd > ipconfig

技術分享圖片

  2.3、虛擬機設置

  虛擬機安裝可以參考: https://www.cnblogs.com/sxdcgaq8080/p/7466529.html

  網絡適配器:NAT

  內存:512MB~1024MB即可

  安裝可以選擇:最小安裝

  安裝一臺虛擬機即可,其他幾臺可以使用克隆方法:(其他幾臺虛擬機也可以在單機配置完畢後進行復制

    技術分享圖片

  2.4、各虛擬機設置

    2.4.1 靜態ip的設置

    2.4.2 主機名的設置

    2.4.3 hosts設置

    2.4.3 ssh密鑰的設置

    下面進行設置:可以參考我這裏的配置

  技術分享圖片

    修改靜態ip

  這裏的ifcfg-ens33需要根據個人虛擬機的網絡名

cd /etc/sysconfig/network-scripts
ls
vi ifcfg-ens33

    這裏修改:ONBOOT=yes,BOOTPROTO=static

      添加:IPADDR=192.168.182.135  #參考前面的網卡設置
          NETMASK=255.255.255.0  #參考前面的網卡設置
         GATEWAY=192.168.182.2 #參考前面的網卡設置
         DNS1=8.8.8.8

      技術分享圖片

service network restart

  進行網絡重啟後連接測試(個人/外網):ping 主機ip/www.baidu.com

  其他三臺虛擬機設置如上,只有ip需要修改

  主機名修改:

hostname node1
su
vi /etc/sysconfig/network
vi /etc/hostname
reboot

  network中添加:NETWORKING=yes

         HOSTNAME=node1

  hostname中添加:node1

  之後重啟:reboot

  其他三臺虛擬機設置如上,分別修改主機名為node2,node3,node4

  hosts的設置:

vi /etc/hosts

  node1的修改如下:

技術分享圖片

  其他三臺虛擬機設置如上,沒有變化

  ssh密鑰的設置:

    以下命令用於生成ssh鍵值對,復制公鑰形成 id_rsa.pub 到authorized_keys 文件中,並提供擁有者具有authorized_keys文件的讀寫權限。

ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys

  技術分享圖片

  其他三臺虛擬機執行以上命令後,需要對node1進行設置,以後能通過node1免密訪問其他主機。

  通過SecureCRT分別連接4臺虛擬機,需要將node1的公鑰發送到其他主機進行記錄

scp ~/.ssh/id_rsa.pub root@node2:~/.ssh/id_rsa_n1.pub
scp ~/.ssh/id_rsa.pub root@node3:~/.ssh/id_rsa_n1.pub
scp ~/.ssh/id_rsa.pub root@node4:~/.ssh/id_rsa_n1.pub

  技術分享圖片

   發送完畢後,將id_rsa_n1.pub中的內容追加到authorized_keys中

cat ~/.ssh/id_rsa_n1.pub >> ~/.ssh/authorized_keys

  技術分享圖片

  三臺虛擬機完成上面操作可在node1主機中進行驗證

ssh node2
ssh node3

  正確的設置下登陸是不需要密碼的,用exit退出登錄

技術分享圖片

  2.5、jdk1.8.0的設置安裝及hadoop2.8.5的安裝

    2.5.1 jdk1.8的安裝

  首先卸載原centOS系統中附帶的jdk

    通過以下兩個命令查找系統中的jdk

rpm -qa | grep jdk
rpm -qa | grep gcj

  可能的結果是:(也有可能有其他的)

    libgcj-4.1.2-42.el5

    java-1.4.2-gcj-compat-1.4.2.0-40jpp.115

  之後通過  yum -y remove <file>命令卸載

yum -y remove java-1.4.2-gcj-compat-1.4.2.0-40jpp.115

  最後輸入java -version驗證虛擬機中是否還有jdk

  接下來是安裝的過程

1、通過SecureCRT將linux版本的jdk,hadoop,zookeeper(為了後面的搭建)發送到虛擬機上

技術分享圖片通過SFTP進行發送

技術分享圖片

  發送後的tar.gz文件在~文件夾內

     技術分享圖片

使用    tar -zxvf <file>    進行解壓
之後使用    mv ~/<file> /usr/local/java/    移動到/usr/local目錄下

  這裏我的目錄是在/usr/local下

  技術分享圖片

2、各種環境的配置

  linux的環境配置在/etc/profile中

vi /etc/profile

  在文件的最後添加如下的配置(後面的也一並配置了)

  這裏註意各個軟件的目錄位置

export HADOOP_HOME=/usr/local/hadoop2.8.5
export JAVA_HOME=/usr/local/java/jdk1.8.0
export ZOOKEEPER_HOME=/usr/local/zookeeper

export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_INSTALL=$HADOOP_HOME

export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin:$PATH

  後面使用  source /etc/profile  刷新文件即可

  下面進行驗證:

技術分享圖片

  到這裏驗證通過就說明安裝成功了。

三、HA集群搭建的設置

  技術分享圖片

以上是各node上的分布:

NN:namenode  DN:datanode  ZK : zookeeper(QuorumPeerMain)  

ZKFC : DFSZKFailoverController  JN : JournalNode  RM:ResourceManager  

DM:DataNode、NodeManager  

以下配置參考hadoop HA 官網配置:http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html

  各hadoop文件配置:

cd $HADOOP_HOME
ls
cd etc/hadoop

  該目錄下進行hadoop的配置(均在configuration標簽中配置):

core-site.xml

技術分享圖片
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://mycluster</value>
</property>
<property>
   <name>ha.zookeeper.quorum</name>
   <value>node1:2181,node2:2181,node3:2181</value>
</property>
<property>
  <name>hadoop.tmp.dir</name>
  <value>/opt/hadoopHA</value>
</property>
View Code

hdfs-site.xml

技術分享圖片
 <property>
                <name>dfs.nameservices</name>
                <value>mycluster</value>
        </property>
        <property>
                <name>dfs.ha.namenodes.mycluster</name>
                <value>nn1,nn2</value>
        </property>
        <property>
                <name>dfs.namenode.rpc-address.mycluster.nn1</name>
                <value>node1:8020</value>
        </property>
        <property>
                <name>dfs.namenode.rpc-address.mycluster.nn2</name>
                <value>node2:8020</value>
        </property>
        <property>
                <name>dfs.namenode.http-address.mycluster.nn1</name>
                <value>node1:50070</value>
        </property>
        <property>
                <name>dfs.namenode.http-address.mycluster.nn2</name>
                <value>node2:50070</value>
        </property>
        <property>
                <name>dfs.namenode.shared.edits.dir</name>
                <value>qjournal://node2:8485;node3:8485;node4:8485/mycluster</value>
        </property>
        <property>
                <name>dfs.client.failover.proxy.provider.mycluster</name>
                <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
        </property>
        <property>
                <name>dfs.ha.fencing.methods</name>
                <value>sshfence</value>
        </property>
        <property>
                <name>dfs.ha.fencing.ssh.private-key-files</name>
                <value>/root/.ssh/id_rsa</value>
        </property>
        <property>
                <name>dfs.journalnode.edits.dir</name>
                <value>/opt/journal/data</value>
        </property>
        <property>
   <name>dfs.ha.automatic-failover.enabled</name>
   <value>true</value>
 </property>
View Code
cp mapred-site.xml.template mapred-site.xml

  通過這個創建mapred-site.xml配置

mapred-site.xml

技術分享圖片
<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
</property>
View Code

yarn-site.xml

技術分享圖片
<property>
        <name>yarn.resourcemanager.hostname</name>
        <value>node1</value>
</property>
<property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
</property>
<property>
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
View Code

編輯slaves文件,添加以下內容

技術分享圖片
node2
node3
node4
View Code

所有配置完成之後,要全部同步到其他幾臺虛擬機

scp ./* root@node2:/usr/local/hadoop2.8.5/etc/hadoop/
scp ./* root@node3:/usr/local/hadoop2.8.5/etc/hadoop/
scp ./* root@node4:/usr/local/hadoop2.8.5/etc/hadoop/

  對於zookeeper進行配置

cd $ZOOKEEPER_HOME/conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg

修改:dataDir=/opt/zookeeper  #這裏指定zookeeper的data數據目錄(沒有,需要手動創建)
在最後添加:

server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888

現在保存並去創建zookeeper的data數據目錄,在該目錄下

vi myid

  在該文件中不同zookeeper虛擬機中配置不同(不能有錯),跟zoo.cfg後面配置的server有關,myid文件中只有1個數字即可。

node1:1

node2:2

node3:3

四、集群服務的啟動驗證

1、(node1,node2,node3)虛擬機上的zookeeper啟動

  cd $ZOOKEEPER_HOME/bin

  ./zkServer.sh start

  啟動完成後可通過  ./zkServer.sh status  進行查看

2、在node1上進行驗證

  2.1、格式化操作

    cd $HADOOP_HOME/bin

     zkfc格式化:hdfs zkfc -format

     hdfs格式化:hdfs namenode -format

  2.2、HA的啟動

    cd $HADOOP_HOME/sbin

    ./start-dfs.sh(啟動HDFS)

    ./start-yarn.sh(啟動YARN)

  2.3、HA的驗證

    各node主機的hadoop端口驗證

技術分享圖片技術分享圖片

技術分享圖片技術分享圖片

  zookeeper各節點驗證

技術分享圖片

技術分享圖片

技術分享圖片

  2.4 、外部網站驗證

技術分享圖片

技術分享圖片

技術分享圖片

            

Hadoop-2.8.5的HA集群搭建