hadoop 2.7.1 高可用安裝部署


hadoop集群規划
目標:創建2個NameNode,做高可用,一個NameNode掛掉,另一個能夠啟動;一個運行Yarn,3台DataNode,3台Zookeeper集群,做高可用。
在hadoop2中通常由兩個NameNode組成,一個處於active狀態,另一個處於standby狀態。Active NameNode對外提供服務,而Standby NameNode則不對外提供服務,僅同步active namenode的狀態,以便能夠在它失敗時快速進行切換。
這里還配置了一個zookeeper集群,用於ZKFC(DFSZKFailoverController)故障轉移,當Active NameNode掛掉了,會自動切換Standby NameNode為standby狀態
安裝我都把hadoop和Zookeeper放到了/soft/下面;


0、系統環境安裝

操作系統CentOS6.5,64位操作系統,采用最小化安裝,為了能夠實現目標,采用VMware 虛擬機來搭建6台服務器,所以建議服務器至少有8G內存;vmware使用的是VMware® Workstation  11.0.0 build-2305329;
網絡配置如下:






虛擬機配置如下:



1、同步機器時間

   
   
   
           
  1. yum install -y ntp #安裝時間服務
  2. ntpdate us.pool.ntp.org #同步時間
2、設置主機IP
   
   
   
           
  1. vi /etc/sysconfig/network-scripts/ifcfg-eth0
    
    
    
            
  1. DEVICE=eth0
  2. IPADDR=192.168.8.101
  3. NETMASK=255.255.255.0
  4. GATEWAY=192.168.8.2
  5. HWADDR=00:0C:29:56:63:A1
  6. TYPE=Ethernet
  7. UUID=ecb7f947-8a93-488c-a118-ffb011421cac
  8. ONBOOT=yes
  9. NM_CONTROLLED=yes
  10. BOOTPROTO=none
然后重啟網絡服務
   
   
   
           
  1. service network restart
查看ip配置
   
   
   
           
  1. ifconfig eth0
    
    
    
            
  1. eth0 Link encap:Ethernet HWaddr 00:0C:29:6C:20:2B
  2. inet addr:192.168.8.101 Bcast:192.168.8.255 Mask:255.255.255.0
  3. inet6 addr: fe80::20c:29ff:fe6c:202b/64 Scope:Link
  4. UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
  5. RX packets:777 errors:0 dropped:0 overruns:0 frame:0
  6. TX packets:316 errors:0 dropped:0 overruns:0 carrier:0
  7. collisions:0 txqueuelen:1000
  8. RX bytes:70611 (68.9 KiB) TX bytes:49955 (48.7 KiB)
這就說明我們配置的IP地址是成功的

注意:
使用vmware克隆了5台虛擬機,配置網卡的時候出現報錯:”Bring up interface eth0:Device eth0 does not seem to be present,delaying initialization”
解決步驟:
第一步  刪除文件70-persistent-net.rules
   
   
   
           
  1. rm -f /etc/udev/rules.d/70-persistent-net.rule
第二步  修改ifcfg-eth0
   
   
   
           
  1. vim /etc/sysconfig/network-scripts/ifcfg-eth0
刪除或者注釋MAC地址的配置

第三步:重啟服務器

  
  
  
          
  1. reboot
這樣就可以設置新的ip地址了

3、設置主機名

把一台主機的名稱改為:hadoop01
   
   
   
           
  1. vi /etc/sysconfig/network
修改hostname就可以了:
   
   
   
           
  1. NETWORKING=yes
  2. HOSTNAME=hadoop01
  3. NETWORKING_IPV6=no
要修改hosts
   
   
   
           
  1. vi /etc/hosts
   
   
   
           
  1. 127.0.0.1 localhost
  2. 192.168.8.101 hadoop01 192.168.8.102 hadoop02 192.168.8.103 hadoop03 192.168.8.104 hadoop04 192.168.8.105 hadoop05 192.168.8.106 hadoop06

關閉ipv6

1、查看系統是否開啟ipv6

a)通過網卡屬性查看

命令:ifconfig

注釋:有 “inet6 addr:。。。。。。。“ 的表示開啟了ipv6功能

b)通過內核模塊加載信息查看

命令:lsmod | grep ipv6

2、ipv6關閉方法

在/etc/modprobe.d/dist.conf結尾添加

  
  
  
          
  1. alias net-pf-10 off
  2. alias ipv6 off

可用vi等編輯器,也可以通過命令:

cat <<EOF>>/etc/modprobe.d/dist.conf

 alias net-pf-10 off

 alias ipv6 off

EOF


關閉防火牆

  
  
  
          
  1. chkconfig iptables stop
  2. chkconfig iptables off

改好后重啟服務器:

  
  
  
          
  1. reboot
hadoop02-hadoop06都需要設置

4、安裝JDK

將壓縮包解壓到指定目錄,然后編輯環境變量
    
    
    
            
  1. vi /etc/proflie
在文件后面追加環境變量
    
    
    
            
  1. export JAVA_HOME=/soft/jdk1.7.0_80/
  2. export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
刷新
    
    
    
            
  1. source /etc/profile
可以用java -version測試安裝是否正確

5、SSH免密碼登錄

對於需要遠程管理其它機器,一般使用遠程桌面或者telnet。linux一般只能是telnet。但是telnet的缺點是通信不加密,存在不安全因素,只適合內網訪問。為

解決這個問題,推出了通信加密通信協議,即SSH(Secure Shell)。使用非對稱加密方式,傳輸內容使用rsa或者dsa加密,可以避免網絡竊聽。

hadoop的進程之間同信使用ssh方式,需要每次都要輸入密碼。為了實現自動化操作,需要配置ssh免密碼登陸方式。

hadoop01\hadoop02做為NameNode,要訪問到其他的節點,我們要在hadoop01可以訪問到hadoop01-hadoop06(記住hadoop01也需要免登陸自己),hadoop02可以訪問到hadoop01,hadoop03是yarn服務,要可以訪問到datanode,所以hadoop03要免登陸到hadoop04-hadoop06;
首先要在hadoop01上生成ssh私鑰和公鑰
   
   
   
           
  1. cd /root/.ssh
  2. ssh-keygen -t rsa #4個回車
上面的命令會在.ssh目錄生成一個私鑰和一個公鑰
    
    
    
            
  1. id_rsa id_rsa.pub

然后將hadoop01的公鑰復制到hadoop02-hadoop06,用以下命令執行
   
   
   
           
  1. ssh-copy-id -i hadoop01
  2. ssh-copy-id -i hadoop02
  3. ssh-copy-id -i hadoop03
  4. ssh-copy-id -i hadoop04
  5. ssh-copy-id -i hadoop05
  6. ssh-copy-id -i hadoop06
上面的命令一行一行執行,先輸入yes,再輸入機器的密碼就可以了;

現在我們來檢驗以一下hadoop01到hadoop05的免登陸
我們在hadoop01中無密碼登錄hadoop05輸入:
   
   
   
           
  1. [root@hadoop01 .ssh]# ssh hadoop05
  2. Last login: Tue Nov 10 17:43:41 2015 from 192.168.8.1
  3. [root@hadoop05 ~]#
可以看到已經可以從hadoop01到hadoop05免登陸了;輸入exit退出
接下來設置hadoop02到hadoop01的免登陸
在hadoop02的/root/.ssh中執行
   
   
   
           
  1. ssh-keygen -t rsa #4個回車
    
    
    
            
  1. ssh-copy-id -i hadoop01


如果出現以上信息就表示配置成功了。用exit退出;
那現在就很方便了,不用打開多個ssh,用一個就全搞定了;也可以配置一個hadoop用戶,我現在都是使用root用戶。
同里也要配置hadoop03到hadoop04-hadoop06的免登陸,這里就不列出了。

6、安裝zookeeper

要將zookeeper集群部署到hadoop04、hadoop05、hadoop06上,先來設置hadoop04,操作如下
解壓zookeeper到指定目錄
   
   
   
           
  1. tar -zxvf zookeeper-3.4.6.tar.gz -C /root/soft
切換到zookeeper目錄的conf目錄,修改zoo.sample.cfg為zoo.cfg
   
   
   
           
  1. mv zoo.sample.cfg zoo.cfg
配置zoo.cfg
   
   
   
           
  1. vi zoo.cfg
    
    
    
            
  1. [root@hadoop04 conf]# vi zoo.cfg
  2. # The number of milliseconds of each tick
  3. tickTime=2000
  4. # The number of ticks that the initial
  5. # synchronization phase can take
  6. initLimit=10
  7. # The number of ticks that can pass between
  8. # sending a request and getting an acknowledgement
  9. syncLimit=5
  10. # the directory where the snapshot is stored.
  11. # do not use /tmp for storage, /tmp here is just
  12. # example sakes.
  13. dataDir=/soft/zookeeper-3.4.6/data
  14. # the port at which the clients will connect
  15. clientPort=2181
  16. # the maximum number of client connections.
  17. # increase this if you need to handle more clients
  18. #maxClientCnxns=60
  19. #
  20. # Be sure to read the maintenance section of the
  21. # administrator guide before turning on autopurge.
  22. #
  23. # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
  24. #
  25. # The number of snapshots to retain in dataDir
  26. #autopurge.snapRetainCount=3
  27. # Purge task interval in hours
  28. # Set to "0" to disable auto purge feature
  29. #autopurge.purgeInterval=1
  30. server.1=192.168.8.104:2888:3888
  31. server.2=192.168.8.105:2888:3888
  32. server.3=192.168.8.106:2888:3888

保存zoo.cfg

server . 1 = 192.168 . 8.104 : 2888 : 3888
2888是通信端口,3888是zookeeper選舉端口,這里用ip也可以,用主機名也可以。
注意配置文件中的datadir
dataDir=/soft/zookeeper-3.4.6/data
這個目錄要真實存在才可以;
接下來要在 / soft/zookeeper-3.4.6/data目錄中增加一個文件"myid"
     
     
     
             
  1. vi myid
文件里面寫入1,然后保存,這表示是server.1;

好了,這樣就配置好了,將配置好的拷貝到hadoop05、hadoop06,注意要修改data目錄中myid的內容為響應的2和3

啟動hadoop04、hadoop05、hadoop06的zookeeper服務
zookeeper - 3.4 . 6目錄執行以下命令
    
    
    
            
  1. bin/zkServer.sh start #啟動
  2. bin/zkServer.sh status #查看狀態
hadoop04的結果:
     
     
     
             
  1. [root@hadoop04 zookeeper-3.4.6]# bin/zkServer.sh status
  2. JMX enabled by default
  3. Using config: /soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
  4. Mode: leader
hadoop05的結果:
     
     
     
             
  1. [root@hadoop05 zookeeper-3.4.6]# bin/zkServer.sh status
  2. JMX enabled by default
  3. Using config: /soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
  4. Mode: follower
hadoop06的結果:
     
     
     
             
  1. [root@hadoop06 zookeeper-3.4.6]# bin/zkServer.sh status
  2. JMX enabled by default
  3. Using config: /soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
  4. Mode: follower
接下來測試以下zookeeper集群,在hadoop04上關閉zookeeper
   
   
   
           
  1. bin/zkServer.sh stop
hadoop04的結果:
   
   
   
           
  1. [root@hadoop04 zookeeper-3.4.6]# bin/zkServer.sh status
  2. JMX enabled by default
  3. Using config: /soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
  4. Error contacting service. It is probably not running.
  5. [root@hadoop04 zookeeper-3.4.6]#
hadoop05的結果:
   
   
   
           
  1. [root@hadoop05 zookeeper-3.4.6]# bin/zkServer.sh status
  2. JMX enabled by default
  3. Using config: /soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
  4. Mode: follower
hadoop06的結果:
   
   
   
           
  1. [root@hadoop06 zookeeper-3.4.6]# bin/zkServer.sh status
  2. JMX enabled by default
  3. Using config: /soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
  4. Mode: leader
從上面結果可以看出,zookeeper集群是沒有問題的,hadoop04掛掉,hadoop06就變成了leader,這說明zookeeper集群已經部署好了。

7、hadoop安裝

現在hadoop01上面配置好,然后再拷貝到其他機器上;
先解壓hadoop-2.7.1.tar.gz到soft,查看hadoop目錄文件如下:
   
   
   
           
  1. [root@hadoop01 hadoop-2.7.1]# ls
  2. bin etc include journal lib libexec LICENSE.txt logs NOTICE.txt README.txt sbin share
所有的配置文件都存放在etc/hadoop/文件夾里面

7.1、添加hadoop目錄到環境變量

在/etc/profile文件中增加HADOOP_HOME,如下所示
   
   
   
           
  1. export JAVA_HOME=/soft/jdk1.7.0_80/
  2. export HADOOP_HOME=/soft/hadoop-2.7.1
  3. export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
應用環境變量
   
   
   
           
  1. source /etc/profile
可以用方法測試是否正確
   
   
   
           
  1. [root@hadoop01 hadoop-2.7.1]# which hadoop
  2. /soft/hadoop-2.7.1/bin/hadoop

7.2、配置hadoop-env.sh

   
   
   
           
  1. vim hadoop-env.sh
修改一個地方就可以,找到JAVA_HOME,改成第4章中jdk的路徑就可以了
   
   
   
           
  1. export JAVA_HOME=/soft/jdk1.7.0_80/
保存即可。

7.3、配置core-site.xml

這一步是配置nameservice,hadoop 文件存儲位置和Zookeeper集群來確保多個namenode之間的切換,修改后內容如下:
   
   
   
           
  1. <configuration>
  2. <!-- 指定hdfs的nameservice為ns1 -->
  3. <property>
  4. <name>fs.defaultFS</name>
  5. <value>hdfs://ns1</value>
  6. </property>
  7. <!-- 指定hadoop臨時目錄 -->
  8. <property>
  9. <name>hadoop.tmp.dir</name>
  10. <value>/soft/hadoop-2.7.1/tmp</value>
  11. </property>
  12. <!-- 指定zookeeper地址 -->
  13. <property>
  14. <name>ha.zookeeper.quorum</name>
  15. <value>hadoop04:2181,hadoop05:2181,hadoop06:2181</value>
  16. </property>
  17. </configuration>

7.4、配置hdfs-site.xml

hdfs-site.xml主要配置namenode的高可用;
內容如下:
   
   
   
           
  1. <configuration>
  2. <!--指定hdfs的nameservice為ns1,需要和core-site.xml中的保持一致 -->
  3. <property>
  4. <name>dfs.nameservices</name>
  5. <value>ns1</value>
  6. </property>
  7. <!-- ns1下面有兩個NameNode,分別是nn1,nn2 -->
  8. <property>
  9. <name>dfs.ha.namenodes.ns1</name>
  10. <value>nn1,nn2</value>
  11. </property>
  12. <!-- nn1的RPC通信地址 -->
  13. <property>
  14. <name>dfs.namenode.rpc-address.ns1.nn1</name>
  15. <value>hadoop01:9000</value>
  16. </property>
  17. <!-- nn1的http通信地址 -->
  18. <property>
  19. <name>dfs.namenode.http-address.ns1.nn1</name>
  20. <value>hadoop01:50070</value>
  21. </property>
  22. <!-- nn2的RPC通信地址 -->
  23. <property>
  24. <name>dfs.namenode.rpc-address.ns1.nn2</name>
  25. <value>hadoop02:9000</value>
  26. </property>
  27. <!-- nn2的http通信地址 -->
  28. <property>
  29. <name>dfs.namenode.http-address.ns1.nn2</name>
  30. <value>hadoop02:50070</value>
  31. </property>
  32. <!-- 指定NameNode的元數據在JournalNode上的存放位置 -->
  33. <property>
  34. <name>dfs.namenode.shared.edits.dir</name>
  35. <value>qjournal://hadoop04:8485;hadoop05:8485;hadoop06:8485/ns1</value>
  36. </property>
  37. <!-- 指定JournalNode在本地磁盤存放數據的位置 -->
  38. <property>
  39. <name>dfs.journalnode.edits.dir</name>
  40. <value>/soft/hadoop-2.7.1/journal</value>
  41. </property>
  42. <!-- 開啟NameNode失敗自動切換 -->
  43. <property>
  44. <name>dfs.ha.automatic-failover.enabled</name>
  45. <value>true</value>
  46. </property>
  47. <!-- 配置失敗自動切換實現方式 -->
  48. <property>
  49. <name>dfs.client.failover.proxy.provider.ns1</name>
  50. <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  51. </property>
  52. <!-- 配置隔離機制 -->
  53. <property>
  54. <name>dfs.ha.fencing.methods</name>
  55. <value>sshfence</value>
  56. </property>
  57. <!-- 使用隔離機制時需要ssh免登陸 -->
  58. <property>
  59. <name>dfs.ha.fencing.ssh.private-key-files</name>
  60. <value>/root/.ssh/id_rsa</value>
  61. </property>
  62. </configuration>
保存即可。

7.4、配置datanode的配置文件slaves

   
   
   
           
  1. vi slaves
修改datanode節點如下:
   
   
   
           
  1. hadoop04
  2. hadoop05
  3. hadoop06
保存即可。

7.5、配置mapreduce文件mapred-site.xml

默認是沒有mapred-site.xml文件的,里面有一個mapred-site.xml.example,重命名為mapred-site.xml
   
   
   
           
  1. mv mapred-site.xml.example mapred-site.xml
配置內容如下,這里就是指明mapreduce是用在YARN之上來執行的。
   
   
   
           
  1. <configuration>
  2. <!-- 指定mr框架為yarn方式 -->
  3. <property>
  4. <name>mapreduce.framework.name</name>
  5. <value>yarn</value>
  6. </property>
  7. </configuration>

7.6、配置yarn-site.xml

做規划的時候就是配置hadoop03來運行yarn,配置如下:
   
   
   
           
  1. <configuration>
  2.         <!-- 指定resourcemanager地址 -->
  3. <property>
  4. <name>yarn.resourcemanager.hostname</name>
  5. <value>hadoop03</value>
  6. </property>
  7. <!-- 指定nodemanager啟動時加載server的方式為shuffle server -->
  8. <property>
  9. <name>yarn.nodemanager.aux-services</name>
  10. <value>mapreduce_shuffle</value>
  11. </property>
  12. </configuration>

到目前為止就已經配置好hadoop01了,要將配置好的hadoop文件拷貝到hadoop02-hadoop06上,cd到soft目錄
   
   
   
           
  1. scp -r hadoop2.7.1 hadoop02:/soft/
  2. scp -r hadoop2.7.1 hadoop03:/soft/
  3. scp -r hadoop2.7.1 hadoop04:/soft/
  4. scp -r hadoop2.7.1 hadoop05:/soft/
  5. scp -r hadoop2.7.1 hadoop06:/soft/

7.7、啟動Zookeeper服務

在hadoop04、hadoop05、hadoop06上啟動Zookeeper,下面以hadoop04為例
   
   
   
           
  1. [root@hadoop04 zookeeper-3.4.6]# bin/zkServer.sh start
  2. JMX enabled by default
  3. Using config: /soft/zookeeper-3.4.6/bin/../conf/zoo.cfg
  4. Starting zookeeper ... STARTED
確保這三台服務器上有一個leader,兩個follower

7.8、在hadoop01上啟動journalnode

   
   
   
           
  1. [root@hadoop01 hadoop-2.7.1]# sbin/hadoop-daemons.sh start journalnode
在7.4中配置了journalnode的節點是hadoop04、hadoop05、hadoop06,這三台機器上會出現 JournalNode,以下是hadoop04上的進程
   
   
   
           
  1. [root@hadoop04 zookeeper-3.4.6]# jps
  2. 1532 JournalNode
  3. 1796 Jps
  4. 1470 QuorumPeerMain

7.9、在hadoop01上格式化hadoop

   
   
   
           
  1. hadoop namenode -format
格式化后會在根據7.3中core-site.xml中的hadoop.tmp.dir配置生成個文件,在hadoop01中會出現一個tmp文件夾,/soft/hadoop-2.7.1/tmp, 現在規划的是hadoop01和hadoop02是NameNode, 然后將/soft/hadoop-2.7.1/tmp拷貝到hadoop02:/soft/hadoop-2.7.1/下,這樣hadoop02就不用格式化了。
   
   
   
           
  1. scp -r tmp/ hadoop02:/soft/hadoop-2.7.1/

7.10、在hadoop01上格式化ZK

   
   
   
           
  1. hdfs zkfc -formatZK

7.11、在hadoop01上 啟動HDFS

   
   
   
           
  1. sbin/start-dfs.sh

7.12   在hadoop01上啟動YARN

   
   
   
           
  1. sbin/start-yarn.sh
如果沒有出錯,hadoop的高可用就配置完成了;

8、使用hadoop集群測試

在本機中配置hosts文件(不是VMware虛擬機)
文件路徑:C:\Windows\System32\drivers\etc\hosts
內容如下:
   
   
   
           
  1. 192.168.8.101 hadoop01
  2. 192.168.8.102 hadoop02
  3. 192.168.8.103 hadoop03
  4. 192.168.8.104 hadoop04
  5. 192.168.8.105 hadoop05
  6. 192.168.8.106 hadoop06
在瀏覽器中輸入: http://hadoop01:50070/,就可以看到如下界面





查看hadoop02: http://hadoop02:50070/


上面可以看到hadoop01是處於active狀態,hadoop02是初一standby,接下來測試以下namenode的高可用,當hadoop01掛掉時hadoop02是否能夠自動切換;
在hadoop01中kill掉NameNode進程
   
   
   
           
  1. [root@hadoop01 hadoop-2.7.1]# jps
  2. 1614 NameNode
  3. 2500 Jps
  4. 1929 DFSZKFailoverController
  5. [root@hadoop01 hadoop-2.7.1]# kill -9 1614
刷新 http://hadoop01:50070/,無法訪問,


這是hadoop02已經處於active狀態了,這說明我們的切換是沒有問題的,現在已經完成了hadoop集群的高可用的搭建;












免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM