hadoop高可用安裝實踐

 

宿主機配置:
宿主機:小黑 T450
CPU   :I5
內存  :16G
系統  :Windows 10 家庭版 64位
虛擬機:
Oracle VM VirtualBox:
VirtualBox-5.1.30.18389-Win.exe
系統準備:
CentOS-7-x86_64-Minimal-1708.iso
CentOS-7-x86_64-DVD-1708.isonode

Linux系統安裝:linux

CentOS-7-x86_64-Minimal-1708.iso            #最簡化安裝,爲了節省系統資源shell

下載DVD版本,目的是從當yum的軟件源,對於須要的如:vim ssh net-tools 軟件,須要掛在本地源,安裝apache

CentOS-7-x86_64-DVD-1708.isovim

一 :安裝hadoop前系統環境配置:安全

1>掛載yum軟件源:服務器

第一步:光驅加載ISO文件:CentOS-7-x86_64-DVD-1708.iso網絡

操做以下
app

第二步:CentOS系統掛載框架

linux外部存儲通常都掛載在/mnt目錄下,這裏我先建一個容納此光驅的文件夾  cdrom:

-->cd /mnt
-->mkdir cdrome

而後把此光驅掛載到此文件夾下: 

-->mount /dev/cdrom /mnt/cdrom        #/dev/cdrom是光驅的默認路徑

第三步:配置yum軟件包源(使用上一步咱們掛載的本地源)

/etc/yum.repos.d/目錄下

刪除

CentOS-Base.repo

CentOS-Debuginfo.repo

-->cd /etc/yum.repos.d
-->rm -f CentOS-Base.repo
-->rm -f CentOS-Debuginfo.repo

編輯CentOS-Media.repo,把源路徑指定爲掛載源路徑,並開啓使用

-->vi CentOS-Media.repo

-->baseurl:file:///mnt/cdrom/         #指定本地資源掛載路徑
     enabled=1                                  #開啓

2>安裝如下軟件

vim             #功能強大的本文編輯器

net-tools    #查看網絡狀態軟件,例如查看ifconfig命令等

ssh             #遠程安全登陸或文件上傳下載

提示:若是不知道哪一個命令是哪一個軟件包提供的,能夠這樣查看:

-->yum provides ifconfig(具體命令)
或者
-->yum whatprovides ifconfig(具體命令)

------------------------------------------------------------

-->yum -y  install vim
-->yum -y  install net-tools
-->yum -y  install openssh*           #表示安裝源裏openssh開頭的軟件所有安裝

3>修改Linux系統主機名稱: 

-->vim /etc/hostname
-->hadoop-ha-01

4>配置Linux系統主機上網

(1)網卡設置爲橋連

(2)設置網卡參數

-->cd /etc/sysconfig/network-scripts/    
-->ls                                                                      #查找ifcfg-eth*
-->vim ifcfg-eth3                                                  #打開文件編輯
-->onboot=yes                                                     #啓用該網卡

(3)修改網關 

-->vim /etc/sysconfig/network
 NETWORKING=yes
 HOSTNAME=hadoop-ha-01                                #配置永久主機名
 GATEWAY=192.168.1.21                                      #這裏設置網關,也就是那個虛擬網卡的ip

(4)修改DNS 

-->vim /etc/resolv.conf 
nameserver 192.168.1.1                                        #增長一個域名服務器

(5)配置防火牆                                      #這裏先直接關閉 

-->systemctl stop firewalld.service          #中止firewall
-->systemctl disable firewalld.service      #禁止firewall開機啓動

(6)網絡配置好後,重啓網絡
 

-->service network restart

而後重啓Linux系統
-->reboot

--------------------------------------------------------------------------------

二:以上準備好後,咱們開始這手搭建集羣

hadoop-ha集羣規劃圖

主機名稱 IP 軟件 運行進程
hadoop-ha-01 192.168.1.21 JDK、HADOOP NameNode、DFSZKFailoverController(zkfc)
hadoop-ha-02 192.168.1.22 JDK、HADOOP NameNode、DFSZKFailoverController(zkfc)
hadoop-ha-03 192.168.1.23 JDK、HADOOP ResourceManager
hadoop-ha-04 192.168.1.24 JDK、HADOOP ResourceManager
hadoop-ha-05 192.168.1.25 JDK、HADOOP、Zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
hadoop-ha-06 192.168.1.26 JDK、HADOOP、Zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
hadoop-ha-07 192.168.1.27 JDK、HADOOP、Zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain

說明:

hdfs 文件高可用配置  主從NameNode  主機  hadoop-ha-0一、hadoop-ha-02

yarn管理系統高可用配置  主從ResourceManager  主機  hadoop-ha-0三、hadoop-ha-04

由於yarn管理系統NodeManager節點管理器自己就是管理 MR程序在hdfs文件系統的DataNode上執行的,因此把他們配置到一塊兒配置在剩下三臺機器上

 

根據集羣設計圖,須要7臺系統,因此根據hadoop-ha-01鏡像,在虛擬機下搭建7個系統

注意:每一個系統搭建好後須要修改下主機名稱和IP如設計圖
 

1>我這裏用hadoop-ha-01來管理集羣,因此這裏我配置01能夠免密訪問集羣中全部機器

(1)配置ssh免密登錄

-->ssh-keygen                        #生成密鑰
-->ls /root/.ssh                       #查看生成密鑰文件
結果:
id_rsa                   #私鑰
id_rsa.pub            #公鑰
-->ssh-copy-id -i /root/.ssh/id_rsa.pub  root@192.168.1.21         #把公鑰拷貝到遠端服務器        
-->ssh-copy-id -i /root/.ssh/id_rsa.pub  root@192.168.1.22         #把公鑰拷貝到遠端服務器
-->ssh-copy-id -i /root/.ssh/id_rsa.pub  root@192.168.1.23         #把公鑰拷貝到遠端服務器
-->ssh-copy-id -i /root/.ssh/id_rsa.pub  root@192.168.1.24         #把公鑰拷貝到遠端服務器
-->ssh-copy-id -i /root/.ssh/id_rsa.pub  root@192.168.1.25         #把公鑰拷貝到遠端服務器
-->ssh-copy-id -i /root/.ssh/id_rsa.pub  root@192.168.1.26         #把公鑰拷貝到遠端服務器
-->ssh-copy-id -i /root/.ssh/id_rsa.pub  root@192.168.1.27         #把公鑰拷貝到遠端服務器

2>以上所有用ip訪問特別難記也難寫,這裏我在hosts文件裏配置下,ip與主機名的關聯關係 

--vim /etc/hosts
192.168.1.21  hadoop-ha-01
192.168.1.22  hadoop-ha-02
192.168.1.23  hadoop-ha-03
192.168.1.24  hadoop-ha-04
192.168.1.25  hadoop-ha-05
192.168.1.26  hadoop-ha-06
192.168.1.27  hadoop-ha-07

而後發送到集羣每一個機器上
scp /etc/hosts   root@192.168.1.22:/etc/host
scp /etc/hosts   root@192.168.1.23:/etc/host
scp /etc/hosts   root@192.168.1.24:/etc/host
scp /etc/hosts   root@192.168.1.25:/etc/host
scp /etc/hosts   root@192.168.1.26:/etc/host
scp /etc/hosts   root@192.168.1.27:/etc/host

2>安裝集羣用到軟件包

jdk-8u162-linux-x64.tar.gz

hadoop-2.6.5.tar.gz

zookeeper-3.3.6.tar.gz

以上包我都在宿主機下載好了,怎麼發送到虛擬機上呢?我使用了FileZilla工具來作這件事

我準備把軟件所有安裝到/usr/app目錄下,因此集羣裏全部機器所有新建app目錄(這個能夠提早搞) 

-->mkdir /usr/app

3>解壓jdk 而且發送的集羣全部機器上 

-->tar -zxvf jdk-8u162-linux-x64.tar.gz

4>在hadoop-ha-05上解壓 zookeeper-3.3.6.tar.gz 

-->tar -zxvf  zookeeper-3.3.6.tar.gz

配置zookeeper: 

-->cd /root/app/zookeeper-3.3.6/conf/
-->cp zoo_sample.cfg zoo.cfg
-->vim zoo.cfg
dataDir=/root/app/zookeeper-3.3.6/tmp
#在最後添加:
server.1=hadoop-ha-05:2888:3888
server.2=hadoop-ha-06:2888:3888
server.3=hadoop-ha-07:2888:3888
#保存退出

而後建立一個tmp文件夾 

-->mkdir /root/app/zookeeper-3.3.6/tmp

#根據zzo.cfg配置文件server.*  在集羣上建myid文件 

-->echo 1 > /root/app/zookeeper-3.3.6/tmp/myid        #這個文件名必須事myid

將配置好的zookeeper拷貝到其餘節點 

-->scp -r /root/app/zookeeper-3.3.6/ hadoop-ha-06:/root/app/
-->scp -r /root/app/zookeeper-3.3.6/ hadoop-ha-07:/root/app/
            
            注意:修改hdp-ha-0六、hdp-ha-07對應/hadoop-ha-/zookeeper-3.3.6/tmp/myid內容
            hdp-ha-06:
                echo 2 > /root/app/zookeeper-3.3.6/tmp/myid
            hdp-ha-07:
                echo 3 > /root/app/zookeeper-3.3.6/tmp/myid

5>安裝hadoop               #先在hadoop-ha-01上

解壓:
-->tar -zxvf hadoop-2.6.5.tar.gz

#hadoop配置   hadoo-env.sh 

export JAVA_HOME=/usr/app/jdk1.8.0_162

#hadoop配置   core-site.xml 

<configuration>
                    <!-- 指定hdfs的nameservice爲ns1 -->
                    <property>
                        <name>fs.defaultFS</name>
                        <value>hdfs://ns1/</value>
                    </property>
                    <!-- 指定hadoop臨時目錄 -->
                    <property>
                        <name>hadoop.tmp.dir</name>
                        <value>/usr/app/hadoop-2.6.5/tmp</value>
                    </property>
                    
                    <!-- 指定zookeeper地址 -->
                    <property>
                        <name>ha.zookeeper.quorum</name>
                        <value>hadoop-ha-05:2181,hadoop-ha-06:2181,hadoop-ha-07:2181</value>
                    </property>
                </configuration>

#hadoop配置   hdfs-site.xml
 

<configuration>
                    <!--指定hdfs的nameservice爲ns1,須要和core-site.xml中的保持一致 -->
                    <property>
                        <name>dfs.nameservices</name>
                        <value>ns1</value>
                    </property>
                    <!-- ns1下面有兩個NameNode,分別是nn1,nn2 -->
                    <property>
                        <name>dfs.ha.namenodes.ns1</name>
                        <value>nn1,nn2</value>
                    </property>
                    <!-- nn1的RPC通訊地址 -->
                    <property>
                        <name>dfs.namenode.rpc-address.ns1.nn1</name>
                        <value>hadoop-ha-01:9000</value>
                    </property>
                    <!-- nn1的http通訊地址 -->
                    <property>
                        <name>dfs.namenode.http-address.ns1.nn1</name>
                        <value>hadoop-ha-01:50070</value>
                    </property>
                    <!-- nn2的RPC通訊地址 -->
                    <property>
                        <name>dfs.namenode.rpc-address.ns1.nn2</name>
                        <value>hadoop-ha-02:9000</value>
                    </property>
                    <!-- nn2的http通訊地址 -->
                    <property>
                        <name>dfs.namenode.http-address.ns1.nn2</name>
                        <value>hadoop-ha-02:50070</value>
                    </property>
                    <!-- 指定NameNode的元數據在JournalNode上的存放位置 -->
                    <property>
                        <name>dfs.namenode.shared.edits.dir</name>
                        <value>qjournal://hadoop-ha-05:8485;hadoop-ha-06:8485;hadoop-ha-07:8485/ns1</value>
                    </property>
                    <!-- 指定JournalNode在本地磁盤存放數據的位置 -->
                    <property>
                        <name>dfs.journalnode.edits.dir</name>
                        <value>/usr/app/hadoop-2.6.5/journaldata</value>
                    </property>
                    <!-- 開啓NameNode失敗自動切換 -->
                    <property>
                        <name>dfs.ha.automatic-failover.enabled</name>
                        <value>true</value>
                    </property>
                    <!-- 配置失敗自動切換實現方式 -->
                    <property>
                        <name>dfs.client.failover.proxy.provider.ns1</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>/root/.ssh/id_rsa</value>
                    </property>
                    <!-- 配置sshfence隔離機制超時時間 -->
                    <property>
                        <name>dfs.ha.fencing.ssh.connect-timeout</name>
                        <value>30000</value>
                    </property>
                </configuration>

#hadoop配置   mapred-site.xml

<configuration>
                    <!-- 指定mr框架爲yarn方式 -->
                    <property>
                        <name>mapreduce.framework.name</name>
                        <value>yarn</value>
                    </property>
                </configuration>

#hadoop配置   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>hadoop-ha-03</value>
                        </property>
                        <property>
                           <name>yarn.resourcemanager.hostname.rm2</name>
                           <value>hadoop-ha-04</value>
                        </property>
                        <!-- 指定zk集羣地址 -->
                        <property>
                           <name>yarn.resourcemanager.zk-address</name>
                           <value>hadoop-ha-05:2181,hadoop-ha-06:2181,hadoop-ha-07:2181</value>
                        </property>
                        <property>
                           <name>yarn.nodemanager.aux-services</name>
                           <value>mapreduce_shuffle</value>
                        </property>
                </configuration>

#hadoop配置   slaves
修改slaves(slaves是指定子節點的位置,由於要在hadoop-ha-01上啓動HDFS、在hadoop-ha-03啓動yarn,因此hadoop-ha-01上的slaves文件指定的是datanode的位置,hadoop-ha-03上的slaves文件指定的是nodemanager的位置) 

hadoop-ha-05
hadoop-ha-06
hadoop-ha-07

最後把hadoop安裝目錄拷貝到集羣每一個機器上

slaves理論上事須要修改的!及

hadoop-ha-01上啓動hdfs,因此須要知道datanode的位置,因此把啓動datanode的節點放入hadoop-ha-01機器的slaves文件裏

hadoop-ha-03上啓動yarn,因此須要知道nodemanager的位置,因此把啓動nodemanager的節點讓如hadoop-ha-03機器的slaves文件裏
-----------------------------------------------------------------
三:配置環境變量:
 

-->vim /etc/profile
#jdk的集羣全部機器都須要配
export JAVA_HOME=/usr/app/jdk1.8.0_162
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

#hadoop的集羣全部機器都須要配
export HADOOP_HOME=/usr/app/hadoop-2.6.5
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH  #在jdk基礎上改

#zookeeper只在05/06/07上配置
export ZOOKEEPER_HOME=/usr/app/zookeeper-3.3.6
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin:$PATH   #在jdk基礎上改

四:搭建完成後,開始啓動          #須要注意啓動順序

 

#啓動zookeeper集羣(分別在hadoop-ha-0五、hadoop-ha-0六、hadoop-ha-上啓動zk)
zkServer.sh start
#查看狀態:一個leader,兩個follower
zkServer.sh status

#啓動journalnode(分別在在hadoop-ha-0五、hadoop-ha-0六、hadoop-ha-07上執行)
hadoop-daemon.sh start journalnode
#運行jps命令檢驗,hdp-ha-0五、hdp-ha-0六、hdp-ha-07上多了JournalNode進程

#格式化HDFS
#在hadoop-ha-01上執行命令:
hdfs namenode -format
#格式化後會在根據core-site.xml中的hadoop.tmp.dir配置生成個文件,這裏我配置的是/usr/app/hadoop-2.6.5/tmp,而後將/usr/app/hadoop-2.6.5/tmp拷貝到hadoop-ha-02的/usr/app/hadoop-2.6.5/下。
scp -r tmp/ hadoop-ha-02:/root/app/hadoop-2.6.5/

#格式化ZKFC(在hdp-ha-01上執行便可)
hdfs zkfc -formatZK
        
#啓動HDFS(在hdp-ha-01上執行)
start-dfs.sh


#啓動YARN
#(是在hdp-ha-03上執行start-yarn.sh,把namenode和resourcemanager分開是由於性能問題,由於他們都要佔用大量資源,因此把他們分開了,他們分開了就要分別在不一樣的機器上啓動)

start-yarn.sh
相關文章
相關標籤/搜索