Hadoop集羣安裝配置

1、準備工做java

1.首先準備好七臺虛擬機,並確保都已經安裝配置好jdk。node

2.Hadoop3.2.0+jdk1.8自行到官網下載shell

3.修改好相稱的主機名,並在hosts文件中相互添加。apache

  ######注意######若是大家公司是租用的服務器或是使用的雲主機(如華爲用主機、阿里雲主機等)
  /etc/hosts裏面要配置的是內網IP地址和主機名的映射關係。vim

4.修改好相稱的IP地址,方便往後的管理,配置。centos

5.爲了知足訪問需求,關閉防火牆,或者在防火牆配置中解除對某些端口的保護。瀏覽器

6.配置ssh免密登陸服務器

  ssh生成密匙 ssh-keygen -t rsa -b 4096 一路回車
  centos中
  生成ssh免密登陸密鑰
  ssh-keygen -t rsa
  cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
  ssh-copy-id 目標地址的ip
  unbuntu中 在vi /etc/ssh/sshd_config 添加:PermitRootLogin yes
  配置完成後再 service ssh restart框架

2、安裝說明ssh

集羣規劃:
主機名 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

說明:

  在hadoop集羣中一般由兩個namenode組成,一個處於active狀態,另外一個處於standby狀態,Active NameNode對外提供服務,而Standby NameNode則不對外提供服務,僅同步active namenode的狀態,以便可以在它失敗時快速進行切換。

  hadoop官方提供了兩種HDFS HA的解決方案,一種是NFS,另外一種是QJM。這裏咱們使用簡單的QJM。在該方案中,主備NameNode之間經過一組JournalNode同步元數據信息,一條數據只要成功寫入多數JournalNode即認爲寫入成功。一般配置奇數個JournalNode這裏還配置了一個zookeeper集羣,用於ZKFC(DFSZKFailoverController)故障轉移,當Active NameNode掛掉了,會自動切換Standby NameNode爲standby狀態。

  ·hadoop中依然存在一個問題,就是ResourceManager只有一個,存在單點故障,hadoop-2.4.1解決了這個問題,有兩個ResourceManager,一個是Active,一個是Standby,狀態由zookeeper進行協調。

3、安裝步驟

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,大功告成!!!

相關文章
相關標籤/搜索