Hadoop集羣搭建

 

配置IP,修改主機名,關閉防火牆,配置SSH免密碼登陸java

 

 

1.準備Linux環境
    1.0點擊VMware快捷方式,右鍵打開文件所在位置 -> 雙擊vmnetcfg.exe -> VMnet1 host-only ->修改subnet ip 設置網段:192.168.8.0 子網掩碼:255.255.255.0 -> apply -> ok
        回到windows --> 打開網絡和共享中心 -> 更改適配器設置 -> 右鍵VMnet1 -> 屬性 -> 雙擊IPv4 -> 設置windows的IP:192.168.8.100 子網掩碼:255.255.255.0 -> 點擊肯定
        在虛擬軟件上 --My Computer -> 選中虛擬機 -> 右鍵 -> settings -> network adapter -> host only -> ok    
    1.1修改主機名
        vim /etc/sysconfig/network
        
        NETWORKING=yes
        HOSTNAME=itcast01    ###
 
    1.2修改IP
        兩種方式:
        第一種:經過Linux圖形界面進行修改(強烈推薦)
            進入Linux圖形界面 -> 右鍵點擊右上方的兩個小電腦 -> 點擊Edit connections -> 選中當前網絡System eth0 -> 點擊edit按鈕 -> 選擇IPv4 -> method選擇爲manual -> 點擊add按鈕 -> 添加IP:192.168.8.118 子網掩碼:255.255.255.0 網關:192.168.1.1 -> apply
    
        第二種:修改配置文件方式(屌絲程序猿專用)
            vim /etc/sysconfig/network-scripts/ifcfg-eth0
            
            DEVICE="eth0"
            BOOTPROTO="static"               ###
            HWADDR="00:0C:29:3C:BF:E7"
            IPV6INIT="yes"
            NM_CONTROLLED="yes"
            ONBOOT="yes"
            TYPE="Ethernet"
            UUID="ce22eeca-ecde-4536-8cc2-ef0dc36d4a8c"
            IPADDR="192.168.8.118"           ###
            NETMASK="255.255.255.0"          ###
            GATEWAY="192.168.8.1"            ###
            
    1.3修改主機名和IP的映射關係
        vim /etc/hosts
            
        192.168.8.118    itcast01
    
    1.4關閉防火牆
        #查看防火牆狀態
        service iptables status
        #關閉防火牆
        service iptables stop
        #查看防火牆開機啓動狀態
        chkconfig iptables --list
        #關閉防火牆開機啓動
        chkconfig iptables off
    
    1.5重啓Linux
        reboot
View Code

 

 

集羣搭建步驟node

 

1.上傳zk安裝包

2.解壓

3.配置(先在一臺節點上配置)
    3.1添加一個zoo.cfg配置文件
    $ZOOKEEPER/conf
    mv zoo_sample.cfg zoo.cfg
    
    3.2修改配置文件(zoo.cfg)
        dataDir=/itcast/zookeeper-3.4.5/data
        
        server.5=itcast05:2888:3888
        server.6=itcast06:2888:3888
        server.7=itcast07:2888:3888
    
    3.3在(dataDir=/itcast/zookeeper-3.4.5/data)建立一個myid文件,裏面內容是server.N中的N(server.2裏面內容爲2)
        echo "5" > myid
    
    3.4將配置好的zk拷貝到其餘節點 
        scp -r /itcast/zookeeper-3.4.5/ itcast06:/itcast/
        scp -r /itcast/zookeeper-3.4.5/ itcast07:/itcast/
    
    3.5注意:在其餘節點上必定要修改myid的內容
        在itcast06應該講myid的內容改成6 (echo "6" > myid)
        在itcast07應該講myid的內容改成7 (echo "7" > myid)
        
4.啓動集羣
    分別啓動zk
        ./zkServer.sh start







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

zookeeper的默認配置文件爲zookeeper/conf/zoo_sample.cfg,須要將其修改成zoo.cfg。其中各配置項的含義,解釋以下:

1.tickTime:CS通訊心跳時間
Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每一個 tickTime 時間就會發送一個心跳。tickTime以毫秒爲單位。
tickTime=2000  

2.initLimit:LF初始通訊時限
集羣中的follower服務器(F)與leader服務器(L)之間初始鏈接時能容忍的最多心跳數(tickTime的數量)。
initLimit=5  

3.syncLimit:LF同步通訊時限
集羣中的follower服務器與leader服務器之間請求和應答之間能容忍的最多心跳數(tickTime的數量)。
syncLimit=2  
 
4.dataDir:數據文件目錄
Zookeeper保存數據的目錄,默認狀況下,Zookeeper將寫數據的日誌文件也保存在這個目錄裏。
dataDir=/home/michael/opt/zookeeper/data  

5.clientPort:客戶端鏈接端口
客戶端鏈接 Zookeeper 服務器的端口,Zookeeper 會監聽這個端口,接受客戶端的訪問請求。
clientPort=2181 

6.服務器名稱與地址:集羣信息(服務器編號,服務器地址,LF通訊端口,選舉端口)
這個配置項的書寫格式比較特殊,規則以下:
server.N=YYY:A:B 

server.1=itcast05:2888:3888
server.2=itcast06:2888:3888
server.3=itcast07:2888:3888


——————————————————————————————————————
zookeper配置說明
hadoop2.0已經發布了穩定版本了,增長了不少特性,好比HDFS HA、YARN等。最新的hadoop-2.4.1又增長了YARN HA

注意:apache提供的hadoop-2.4.1的安裝包是在32位操做系統編譯的,由於hadoop依賴一些C++的本地庫,
因此若是在64位的操做上安裝hadoop-2.4.1就須要從新在64操做系統上從新編譯
(建議第一次安裝用32位的系統,我將編譯好的64位的也上傳到羣共享裏了,若是有興趣的能夠本身編譯一下)

前期準備就不詳細說了,課堂上都介紹了
1.修改Linux主機名
2.修改IP
3.修改主機名和IP的映射關係
    ######注意######若是大家公司是租用的服務器或是使用的雲主機(如華爲用主機、阿里雲主機等)
    /etc/hosts裏面要配置的是內網IP地址和主機名的映射關係    
4.關閉防火牆
5.ssh免登錄 
6.安裝JDK,配置環境變量等

集羣規劃:
    主機名        IP                安裝的軟件                    運行的進程
    itcast01    192.168.1.201    jdk、hadoop                    NameNode、DFSZKFailoverController(zkfc)
    itcast02    192.168.1.202    jdk、hadoop                    NameNode、DFSZKFailoverController(zkfc)
    itcast03    192.168.1.203    jdk、hadoop                    ResourceManager
    itcast04    192.168.1.204    jdk、hadoop                    ResourceManager
    itcast05    192.168.1.205    jdk、hadoop、zookeeper        DataNode、NodeManager、JournalNode、QuorumPeerMain
    itcast06    192.168.1.206    jdk、hadoop、zookeeper        DataNode、NodeManager、JournalNode、QuorumPeerMain
    itcast07    192.168.1.207    jdk、hadoop、zookeeper        DataNode、NodeManager、JournalNode、QuorumPeerMain
    
說明:
    1.在hadoop2.0中一般由兩個NameNode組成,一個處於active狀態,另外一個處於standby狀態。Active NameNode對外提供服務,而Standby NameNode則不對外提供服務,僅同步active namenode的狀態,以便可以在它失敗時快速進行切換。
    hadoop2.0官方提供了兩種HDFS HA的解決方案,一種是NFS,另外一種是QJM。這裏咱們使用簡單的QJM。在該方案中,主備NameNode之間經過一組JournalNode同步元數據信息,一條數據只要成功寫入多數JournalNode即認爲寫入成功。一般配置奇數個JournalNode
    這裏還配置了一個zookeeper集羣,用於ZKFC(DFSZKFailoverController)故障轉移,當Active NameNode掛掉了,會自動切換Standby NameNode爲standby狀態
    2.hadoop-2.2.0中依然存在一個問題,就是ResourceManager只有一個,存在單點故障,hadoop-2.4.1解決了這個問題,有兩個ResourceManager,一個是Active,一個是Standby,狀態由zookeeper進行協調
安裝步驟:
    1.安裝配置zooekeeper集羣(在itcast05上)
        1.1解壓
            tar -zxvf zookeeper-3.4.5.tar.gz -C /itcast/
        1.2修改配置
            cd /itcast/zookeeper-3.4.5/conf/
            cp zoo_sample.cfg zoo.cfg
            vim zoo.cfg
            修改:dataDir=/itcast/zookeeper-3.4.5/tmp
            在最後添加:
            server.1=itcast05:2888:3888
            server.2=itcast06:2888:3888
            server.3=itcast07:2888:3888
            保存退出
            而後建立一個tmp文件夾
            mkdir /itcast/zookeeper-3.4.5/tmp
            再建立一個空文件
            touch /itcast/zookeeper-3.4.5/tmp/myid
            最後向該文件寫入ID
            echo 1 > /itcast/zookeeper-3.4.5/tmp/myid
        1.3將配置好的zookeeper拷貝到其餘節點(首先分別在itcast0六、itcast07根目錄下建立一個itcast目錄:mkdir /itcast)
            scp -r /itcast/zookeeper-3.4.5/ itcast06:/itcast/
            scp -r /itcast/zookeeper-3.4.5/ itcast07:/itcast/
            
            注意:修改itcast0六、itcast07對應/itcast/zookeeper-3.4.5/tmp/myid內容
            itcast06:
                echo 2 > /itcast/zookeeper-3.4.5/tmp/myid
            itcast07:
                echo 3 > /itcast/zookeeper-3.4.5/tmp/myid
    
    2.安裝配置hadoop集羣(在itcast01上操做)
        2.1解壓
            tar -zxvf hadoop-2.4.1.tar.gz -C /itcast/
        2.2配置HDFS(hadoop2.0全部的配置文件都在$HADOOP_HOME/etc/hadoop目錄下)
            #將hadoop添加到環境變量中
            vim /etc/profile
            export JAVA_HOME=/usr/java/jdk1.7.0_55
            export HADOOP_HOME=/itcast/hadoop-2.4.1
            export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
            
            #hadoop2.0的配置文件所有在$HADOOP_HOME/etc/hadoop下
            cd /itcast/hadoop-2.4.1/etc/hadoop
            
            2.2.1修改hadoo-env.sh
                export JAVA_HOME=/usr/java/jdk1.7.0_55
                
            2.2.2修改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>/itcast/hadoop-2.4.1/tmp</value>
                    </property>
                    <!-- 指定zookeeper地址 -->
                    <property>
                        <name>ha.zookeeper.quorum</name>
                        <value>itcast05:2181,itcast06:2181,itcast07:2181</value>
                    </property>
                </configuration>
                
            2.2.3修改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>itcast01:9000</value>
                    </property>
                    <!-- nn1的http通訊地址 -->
                    <property>
                        <name>dfs.namenode.http-address.ns1.nn1</name>
                        <value>itcast01:50070</value>
                    </property>
                    <!-- nn2的RPC通訊地址 -->
                    <property>
                        <name>dfs.namenode.rpc-address.ns1.nn2</name>
                        <value>itcast02:9000</value>
                    </property>
                    <!-- nn2的http通訊地址 -->
                    <property>
                        <name>dfs.namenode.http-address.ns1.nn2</name>
                        <value>itcast02:50070</value>
                    </property>
                    <!-- 指定NameNode的元數據在JournalNode上的存放位置 -->
                    <property>
                        <name>dfs.namenode.shared.edits.dir</name>
                        <value>qjournal://itcast05:8485;itcast06:8485;itcast07:8485/ns1</value>
                    </property>
                    <!-- 指定JournalNode在本地磁盤存放數據的位置 -->
                    <property>
                        <name>dfs.journalnode.edits.dir</name>
                        <value>/itcast/hadoop-2.4.1/journal</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>/home/hadoop/.ssh/id_rsa</value>
                    </property>
                    <!-- 配置sshfence隔離機制超時時間 -->
                    <property>
                        <name>dfs.ha.fencing.ssh.connect-timeout</name>
                        <value>30000</value>
                    </property>
                </configuration>
            
            2.2.4修改mapred-site.xml
                <configuration>
                    <!-- 指定mr框架爲yarn方式 -->
                    <property>
                        <name>mapreduce.framework.name</name>
                        <value>yarn</value>
                    </property>
                </configuration>    
            
            2.2.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>itcast03</value>
                        </property>
                        <property>
                           <name>yarn.resourcemanager.hostname.rm2</name>
                           <value>itcast04</value>
                        </property>
                        <!-- 指定zk集羣地址 -->
                        <property>
                           <name>yarn.resourcemanager.zk-address</name>
                           <value>itcast05:2181,itcast06:2181,itcast07:2181</value>
                        </property>
                        <property>
                           <name>yarn.nodemanager.aux-services</name>
                           <value>mapreduce_shuffle</value>
                        </property>
                </configuration>
            
                
            2.2.6修改slaves(slaves是指定子節點的位置,由於要在itcast01上啓動HDFS、在itcast03啓動yarn,因此itcast01上的slaves文件指定的是datanode的位置,itcast03上的slaves文件指定的是nodemanager的位置)
                itcast05
                itcast06
                itcast07

            2.2.7配置免密碼登錄
                #首先要配置itcast01到itcast0二、itcast0三、itcast0四、itcast0五、itcast0六、itcast07的免密碼登錄
                #在itcast01上生產一對鑰匙
                ssh-keygen -t rsa
                #將公鑰拷貝到其餘節點,包括本身
                ssh-coyp-id itcast01
                ssh-coyp-id itcast02
                ssh-coyp-id itcast03
                ssh-coyp-id itcast04
                ssh-coyp-id itcast05
                ssh-coyp-id itcast06
                ssh-coyp-id itcast07
                #配置itcast03到itcast0四、itcast0五、itcast0六、itcast07的免密碼登錄
                #在itcast03上生產一對鑰匙
                ssh-keygen -t rsa
                #將公鑰拷貝到其餘節點
                ssh-coyp-id itcast04
                ssh-coyp-id itcast05
                ssh-coyp-id itcast06
                ssh-coyp-id itcast07
                #注意:兩個namenode之間要配置ssh免密碼登錄,別忘了配置itcast02到itcast01的免登錄
                在itcast02上生產一對鑰匙
                ssh-keygen -t rsa
                ssh-coyp-id -i itcast01                
        
        2.4將配置好的hadoop拷貝到其餘節點
            scp -r /itcast/ itcast02:/
            scp -r /itcast/ itcast03:/
            scp -r /itcast/hadoop-2.4.1/ root@itcast04:/itcast/
            scp -r /itcast/hadoop-2.4.1/ root@itcast05:/itcast/
            scp -r /itcast/hadoop-2.4.1/ root@itcast06:/itcast/
            scp -r /itcast/hadoop-2.4.1/ root@itcast07:/itcast/
        ###注意:嚴格按照下面的步驟
        2.5啓動zookeeper集羣(分別在itcast0五、itcast0六、tcast07上啓動zk)
            cd /itcast/zookeeper-3.4.5/bin/
            ./zkServer.sh start
            #查看狀態:一個leader,兩個follower
            ./zkServer.sh status
            
        2.6啓動journalnode(分別在在itcast0五、itcast0六、tcast07上執行)
            cd /itcast/hadoop-2.4.1
            sbin/hadoop-daemon.sh start journalnode
            #運行jps命令檢驗,itcast0五、itcast0六、itcast07上多了JournalNode進程
        
        2.7格式化HDFS
            #在itcast01上執行命令:
            hdfs namenode -format
            #格式化後會在根據core-site.xml中的hadoop.tmp.dir配置生成個文件,這裏我配置的是/itcast/hadoop-2.4.1/tmp,而後將/itcast/hadoop-2.4.1/tmp拷貝到itcast02的/itcast/hadoop-2.4.1/下。
            scp -r tmp/ itcast02:/itcast/hadoop-2.4.1/
        
        2.8格式化ZK(在itcast01上執行便可)
            hdfs zkfc -formatZK
        
        2.9啓動HDFS(在itcast01上執行)
            sbin/start-dfs.sh

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

        
    到此,hadoop-2.4.1配置完畢,能夠統計瀏覽器訪問:
        http://192.168.1.201:50070
        NameNode 'itcast01:9000' (active)
        http://192.168.1.202:50070
        NameNode 'itcast02:9000' (standby)
    
    驗證HDFS HA
        首先向hdfs上傳一個文件
        hadoop fs -put /etc/profile /profile
        hadoop fs -ls /
        而後再kill掉active的NameNode
        kill -9 <pid of NN>
        經過瀏覽器訪問:http://192.168.1.202:50070
        NameNode 'itcast02:9000' (active)
        這個時候itcast02上的NameNode變成了active
        在執行命令:
        hadoop fs -ls /
        -rw-r--r--   3 root supergroup       1926 2014-02-06 15:36 /profile
        剛纔上傳的文件依然存在!!!
        手動啓動那個掛掉的NameNode
        sbin/hadoop-daemon.sh start namenode
        經過瀏覽器訪問:http://192.168.1.201:50070
        NameNode 'itcast01:9000' (standby)
    
    驗證YARN:
        運行一下hadoop提供的demo中的WordCount程序:
        hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar wordcount /profile /out
    
    OK,大功告成!!!
2.4.1 HDFS HA & YARN HA
hadoop2.0已經發布了穩定版本了,增長了不少特性,好比HDFS HA、YARN等。

注意:apache提供的hadoop-2.2.0的安裝包是在32位操做系統編譯的,由於hadoop依賴一些C++的本地庫,
因此若是在64位的操做上安裝hadoop-2.2.0就須要從新在64操做系統上從新編譯
(建議第一次安裝用32位的系統,我將編譯好的64位的也上傳到羣共享裏了,若是有興趣的能夠本身編譯一下)

前期準備就不詳細說了,課堂上都介紹了
1.修改Linux主機名
2.修改IP
3.修改主機名和IP的映射關係
    ######注意######若是大家公司是租用的服務器或是使用的雲主機(如華爲用主機、阿里雲主機等)
    /etc/hosts裏面要配置的是內網IP地址和主機名的映射關係    
4.關閉防火牆
5.ssh免登錄 
6.安裝JDK,配置環境變量等

集羣規劃:
    主機名        IP                安裝的軟件                    運行的進程
    itcast01    192.168.1.201    jdk、hadoop                    NameNode、DFSZKFailoverController
    itcast02    192.168.1.202    jdk、hadoop                    NameNode、DFSZKFailoverController
    itcast03    192.168.1.203    jdk、hadoop                    ResourceManager
    itcast04    192.168.1.204    jdk、hadoop、zookeeper        DataNode、NodeManager、JournalNode、QuorumPeerMain
    itcast05    192.168.1.205    jdk、hadoop、zookeeper        DataNode、NodeManager、JournalNode、QuorumPeerMain
    itcast06    192.168.1.206    jdk、hadoop、zookeeper        DataNode、NodeManager、JournalNode、QuorumPeerMain
    
說明:
    在hadoop2.0中一般由兩個NameNode組成,一個處於active狀態,另外一個處於standby狀態。Active NameNode對外提供服務,而Standby NameNode則不對外提供服務,僅同步active namenode的狀態,以便可以在它失敗時快速進行切換。
    hadoop2.0官方提供了兩種HDFS HA的解決方案,一種是NFS,另外一種是QJM。這裏咱們使用簡單的QJM。在該方案中,主備NameNode之間經過一組JournalNode同步元數據信息,一條數據只要成功寫入多數JournalNode即認爲寫入成功。一般配置奇數個JournalNode
    這裏還配置了一個zookeeper集羣,用於ZKFC(DFSZKFailoverController)故障轉移,當Active NameNode掛掉了,會自動切換Standby NameNode爲standby狀態
    
安裝步驟:
    1.安裝配置zooekeeper集羣
        1.1解壓
            tar -zxvf zookeeper-3.4.5.tar.gz -C /itcast/
        1.2修改配置
            cd /itcast/zookeeper-3.4.5/conf/
            cp zoo_sample.cfg zoo.cfg
            vim zoo.cfg
            修改:dataDir=/itcast/zookeeper-3.4.5/tmp
            在最後添加:
            server.1=itcast04:2888:3888
            server.2=itcast05:2888:3888
            server.3=itcast06:2888:3888
            保存退出
            而後建立一個tmp文件夾
            mkdir /itcast/zookeeper-3.4.5/tmp
            再建立一個空文件
            touch /itcast/zookeeper-3.4.5/tmp/myid
            最後向該文件寫入ID
            echo 1 > /itcast/zookeeper-3.4.5/tmp/myid
        1.3將配置好的zookeeper拷貝到其餘節點(首先分別在itcast0五、itcast06根目錄下建立一個itcast目錄:mkdir /itcast)
            scp -r /itcast/zookeeper-3.4.5/ itcast05:/itcast/
            scp -r /itcast/zookeeper-3.4.5/ itcast06:/itcast/
            
            注意:修改itcast0五、itcast06對應/itcast/zookeeper-3.4.5/tmp/myid內容
            itcast05:
                echo 2 > /itcast/zookeeper-3.4.5/tmp/myid
            itcast06:
                echo 3 > /itcast/zookeeper-3.4.5/tmp/myid
    
    2.安裝配置hadoop集羣
        2.1解壓
            tar -zxvf hadoop-2.2.0.tar.gz -C /itcast/
        2.2配置HDFS(hadoop2.0全部的配置文件都在$HADOOP_HOME/etc/hadoop目錄下)
            #將hadoop添加到環境變量中
            vim /etc/profile
            export JAVA_HOME=/usr/java/jdk1.7.0_55
            export HADOOP_HOME=/itcast/hadoop-2.2.0
            export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
            
            #hadoop2.0的配置文件所有在$HADOOP_HOME/etc/hadoop下
            cd /itcast/hadoop-2.2.0/etc/hadoop
            
            2.2.1修改hadoo-env.sh
                export JAVA_HOME=/usr/java/jdk1.7.0_55
                
            2.2.2修改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>/itcast/hadoop-2.2.0/tmp</value>
                    </property>
                    <!-- 指定zookeeper地址 -->
                    <property>
                        <name>ha.zookeeper.quorum</name>
                        <value>itcast04:2181,itcast05:2181,itcast06:2181</value>
                    </property>
                </configuration>
                
            2.2.3修改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>itcast01:9000</value>
                    </property>
                    <!-- nn1的http通訊地址 -->
                    <property>
                        <name>dfs.namenode.http-address.ns1.nn1</name>
                        <value>itcast01:50070</value>
                    </property>
                    <!-- nn2的RPC通訊地址 -->
                    <property>
                        <name>dfs.namenode.rpc-address.ns1.nn2</name>
                        <value>itcast02:9000</value>
                    </property>
                    <!-- nn2的http通訊地址 -->
                    <property>
                        <name>dfs.namenode.http-address.ns1.nn2</name>
                        <value>itcast02:50070</value>
                    </property>
                    <!-- 指定NameNode的元數據在JournalNode上的存放位置 -->
                    <property>
                        <name>dfs.namenode.shared.edits.dir</name>
                        <value>qjournal://itcast04:8485;itcast05:8485;itcast06:8485/ns1</value>
                    </property>
                    <!-- 指定JournalNode在本地磁盤存放數據的位置 -->
                    <property>
                        <name>dfs.journalnode.edits.dir</name>
                        <value>/itcast/hadoop-2.2.0/journal</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>
            
            2.2.4修改mapred-site.xml
                <configuration>
                    <!-- 指定mr框架爲yarn方式 -->
                    <property>
                        <name>mapreduce.framework.name</name>
                        <value>yarn</value>
                    </property>
                </configuration>    
            
            2.2.5修改yarn-site.xml
                <configuration>
                    <!-- 指定resourcemanager地址 -->
                    <property>
                        <name>yarn.resourcemanager.hostname</name>
                        <value>itcast03</value>
                    </property>
                    <!-- 指定nodemanager啓動時加載server的方式爲shuffle server -->
                    <property>
                        <name>yarn.nodemanager.aux-services</name>
                        <value>mapreduce_shuffle</value>
                    </property>
                </configuration>
            
                
            2.2.6修改slaves(slaves是指定子節點的位置,由於要在itcast01上啓動HDFS、在itcast03啓動yarn,因此itcast01上的slaves文件指定的是datanode的位置,itcast03上的slaves文件指定的是nodemanager的位置)
                itcast04
                itcast05
                itcast06

            2.2.7配置免密碼登錄
                #首先要配置itcast01到itcast0二、itcast0三、itcast0四、itcast0五、itcast06的免密碼登錄
                #在itcast01上生產一對鑰匙
                ssh-keygen -t rsa
                #將公鑰拷貝到其餘節點,包括本身
                ssh-coyp-id itcast01
                ssh-coyp-id itcast02
                ssh-coyp-id itcast03
                ssh-coyp-id itcast04
                ssh-coyp-id itcast05
                ssh-coyp-id itcast06
                
                #配置itcast03到itcast0四、itcast0五、itcast06的免密碼登錄
                #在itcast03上生產一對鑰匙
                ssh-keygen -t rsa
                #將公鑰拷貝到其餘節點
                ssh-coyp-id itcast04
                ssh-coyp-id itcast05
                ssh-coyp-id itcast06
                
                #注意:兩個namenode之間要配置ssh免密碼登錄,別忘了配置itcast02到itcast01的免登錄
                在itcast02上生產一對鑰匙
                ssh-keygen -t rsa
                ssh-coyp-id -i itcast01                
        
        2.4將配置好的hadoop拷貝到其餘節點
            scp -r /itcast/ itcast02:/
            scp -r /itcast/ itcast03:/
            scp -r /itcast/hadoop-2.2.0/ root@itcast04:/itcast/
            scp -r /itcast/hadoop-2.2.0/ root@itcast05:/itcast/
            scp -r /itcast/hadoop-2.2.0/ root@itcast06:/itcast/
        
        ###注意:嚴格按照下面的步驟
        2.5啓動zookeeper集羣(分別在itcast0四、itcast0五、itcast06上啓動zk)
            cd /itcast/zookeeper-3.4.5/bin/
            ./zkServer.sh start
            #查看狀態:一個leader,兩個follower
            ./zkServer.sh status
            
        2.6啓動journalnode(在itcast01上啓動全部journalnode,注意:是調用的hadoop-daemons.sh這個腳本,注意是複數s的那個腳本)
            cd /itcast/hadoop-2.2.0
            sbin/hadoop-daemons.sh start journalnode
            #運行jps命令檢驗,itcast0四、itcast0五、itcast06上多了JournalNode進程
        
        2.7格式化HDFS
            #在itcast01上執行命令:
            hdfs namenode -format
            #格式化後會在根據core-site.xml中的hadoop.tmp.dir配置生成個文件,這裏我配置的是/itcast/hadoop-2.2.0/tmp,而後將/itcast/hadoop-2.2.0/tmp拷貝到itcast02的/itcast/hadoop-2.2.0/下。
            scp -r tmp/ itcast02:/itcast/hadoop-2.2.0/
        
        2.8格式化ZK(在itcast01上執行便可)
            hdfs zkfc -formatZK
        
        2.9啓動HDFS(在itcast01上執行)
            sbin/start-dfs.sh

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

    到此,hadoop2.2.0配置完畢,能夠統計瀏覽器訪問:
        http://192.168.1.201:50070
        NameNode 'itcast01:9000' (active)
        http://192.168.1.202:50070
        NameNode 'itcast02:9000' (standby)
    
    驗證HDFS HA
        首先向hdfs上傳一個文件
        hadoop fs -put /etc/profile /profile
        hadoop fs -ls /
        而後再kill掉active的NameNode
        kill -9 <pid of NN>
        經過瀏覽器訪問:http://192.168.1.202:50070
        NameNode 'itcast02:9000' (active)
        這個時候itcast02上的NameNode變成了active
        在執行命令:
        hadoop fs -ls /
        -rw-r--r--   3 root supergroup       1926 2014-02-06 15:36 /profile
        剛纔上傳的文件依然存在!!!
        手動啓動那個掛掉的NameNode
        sbin/hadoop-daemon.sh start namenode
        經過瀏覽器訪問:http://192.168.1.201:50070
        NameNode 'itcast01:9000' (standby)
    
    驗證YARN:
        運行一下hadoop提供的demo中的WordCount程序:
        hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount /profile /out
    
    OK,大功告成!!!
2.2.0 HDFS HA

 

集羣搭建問題描述shell

 1  hadoop 版本下載    http://archive.cloudera.com/cdh4/cdh/4/apache

相關文章
相關標籤/搜索