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;
網絡配置以下:






虛擬機配置以下:



一、同步機器時間

   
   
   
   
yum install -y ntp #安裝時間服務ntpdate us.pool.ntp.org #同步時間
二、設置主機IP
   
   
   
   
vi /etc/sysconfig/network-scripts/ifcfg-eth0
    
    
    
    
DEVICE=eth0IPADDR=192.168.8.101NETMASK=255.255.255.0GATEWAY=192.168.8.2HWADDR=00:0C:29:56:63:A1TYPE=EthernetUUID=ecb7f947-8a93-488c-a118-ffb011421cacONBOOT=yesNM_CONTROLLED=yesBOOTPROTO=none
而後重啓網絡服務
   
   
   
   
service network restart
查看ip配置
   
   
   
   
ifconfig eth0
    
    
    
    
eth0 Link encap:Ethernet HWaddr 00:0C:29:6C:20:2B inet addr:192.168.8.101 Bcast:192.168.8.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe6c:202b/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:777 errors:0 dropped:0 overruns:0 frame:0 TX packets:316 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 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
   
   
   
   
rm -f /etc/udev/rules.d/70-persistent-net.rule
第二步  修改ifcfg-eth0
   
   
   
   
vim /etc/sysconfig/network-scripts/ifcfg-eth0
刪除或者註釋MAC地址的配置

第三步:重啓服務器php

  
  
  
  
reboot
這樣就能夠設置新的ip地址了

三、設置主機名

把一臺主機的名稱改成:hadoop01
   
   
   
   
vi /etc/sysconfig/network
修改hostname就能夠了:
   
   
   
   
NETWORKING=yesHOSTNAME=hadoop01NETWORKING_IPV6=no
要修改hosts
   
   
   
   
vi /etc/hosts
   
   
   
   
127.0.0.1 localhost192.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

關閉ipv6html

一、查看系統是否開啓ipv6
java

a)經過網卡屬性查看node

命令:ifconfig
linux

註釋:有 「inet6 addr:。。。。。。。「 的表示開啓了ipv6功能
apache

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

命令:lsmod | grep ipv6
瀏覽器

二、ipv6關閉方法安全

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

  
  
  
  
alias net-pf-10 offalias ipv6 off

可用vi等編輯器,也能夠經過命令:

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

 alias net-pf-10 off

 alias ipv6 off

EOF


關閉防火牆

  
  
  
  
chkconfig iptables stopchkconfig iptables off

改好後重啓服務器:

  
  
  
  
reboot
hadoop02-hadoop06都須要設置

四、安裝JDK

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

五、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私鑰和公鑰
   
   
   
   
cd /root/.ssh ssh-keygen -t rsa #4個回車
上面的命令會在.ssh目錄生成一個私鑰和一個公鑰
    
    
    
    
id_rsa id_rsa.pub

而後將hadoop01的公鑰複製到hadoop02-hadoop06,用如下命令執行
   
   
   
   
ssh-copy-id -i hadoop01 ssh-copy-id -i hadoop02 ssh-copy-id -i hadoop03 ssh-copy-id -i hadoop04 ssh-copy-id -i hadoop05 ssh-copy-id -i hadoop06
上面的命令一行一行執行,先輸入yes,再輸入機器的密碼就能夠了;

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


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

六、安裝zookeeper

要將zookeeper集羣部署到hadoop0四、hadoop0五、hadoop06上,先來設置hadoop04,操做以下
解壓zookeeper到指定目錄
   
   
   
   
tar -zxvf zookeeper-3.4.6.tar.gz -C /root/soft
切換到zookeeper目錄的conf目錄,修改zoo.sample.cfg爲zoo.cfg
   
   
   
   
mv zoo.sample.cfg zoo.cfg
配置zoo.cfg
   
   
   
   
vi zoo.cfg
    
    
    
    
[root@hadoop04 conf]# vi zoo.cfg# The number of milliseconds of each ticktickTime=2000# The number of ticks that the initial# synchronization phase can takeinitLimit=10# The number of ticks that can pass between# sending a request and getting an acknowledgementsyncLimit=5# the directory where the snapshot is stored.# do not use /tmp for storage, /tmp here is just# example sakes.dataDir=/soft/zookeeper-3.4.6/data# the port at which the clients will connectclientPort=2181# the maximum number of client connections.# increase this if you need to handle more clients#maxClientCnxns=60## Be sure to read the maintenance section of the# administrator guide before turning on autopurge.## http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance## The number of snapshots to retain in dataDir#autopurge.snapRetainCount=3# Purge task interval in hours# Set to "0" to disable auto purge feature#autopurge.purgeInterval=1server.1=192.168.8.104:2888:3888server.2=192.168.8.105:2888:3888server.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"
     
     
     
     
vi myid
文件裏面寫入1,而後保存,這表示是server.1;

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

啓動hadoop0四、hadoop0五、hadoop06的zookeeper服務
zookeeper - 3.4 . 6目錄執行如下命令
    
    
    
    
bin/zkServer.sh start #啓動bin/zkServer.sh status #查看狀態
hadoop04的結果:
     
     
     
     
[root@hadoop04 zookeeper-3.4.6]# bin/zkServer.sh statusJMX enabled by defaultUsing config: /soft/zookeeper-3.4.6/bin/../conf/zoo.cfgMode: leader
hadoop05的結果:
     
     
     
     
[root@hadoop05 zookeeper-3.4.6]# bin/zkServer.sh statusJMX enabled by defaultUsing config: /soft/zookeeper-3.4.6/bin/../conf/zoo.cfgMode: follower
hadoop06的結果:
     
     
     
     
[root@hadoop06 zookeeper-3.4.6]# bin/zkServer.sh statusJMX enabled by defaultUsing config: /soft/zookeeper-3.4.6/bin/../conf/zoo.cfgMode: follower
接下來測試如下zookeeper集羣,在hadoop04上關閉zookeeper
   
   
   
   
bin/zkServer.sh stop
hadoop04的結果:
   
   
   
   
[root@hadoop04 zookeeper-3.4.6]# bin/zkServer.sh statusJMX enabled by defaultUsing config: /soft/zookeeper-3.4.6/bin/../conf/zoo.cfgError contacting service. It is probably not running.[root@hadoop04 zookeeper-3.4.6]#
hadoop05的結果:
   
   
   
   
[root@hadoop05 zookeeper-3.4.6]# bin/zkServer.sh statusJMX enabled by defaultUsing config: /soft/zookeeper-3.4.6/bin/../conf/zoo.cfgMode: follower
hadoop06的結果:
   
   
   
   
[root@hadoop06 zookeeper-3.4.6]# bin/zkServer.sh statusJMX enabled by defaultUsing config: /soft/zookeeper-3.4.6/bin/../conf/zoo.cfgMode: leader
從上面結果能夠看出,zookeeper集羣是沒有問題的,hadoop04掛掉,hadoop06就變成了leader,這說明zookeeper集羣已經部署好了。

七、hadoop安裝

如今hadoop01上面配置好,而後再拷貝到其餘機器上;
先解壓hadoop-2.7.1.tar.gz到soft,查看hadoop目錄文件以下:
   
   
   
   
[root@hadoop01 hadoop-2.7.1]# lsbin etc include journal lib libexec LICENSE.txt logs NOTICE.txt README.txt sbin share
全部的配置文件都存放在etc/hadoop/文件夾裏面

7.一、添加hadoop目錄到環境變量

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

7.二、配置hadoop-env.sh

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

7.三、配置core-site.xml

這一步是配置nameservice,hadoop 文件存儲位置和Zookeeper集羣來確保多個namenode之間的切換,修改後內容以下:
   
   
   
   
<configuration> <!-- 指定hdfs的nameservice爲ns1 --> <property> <name>fs.defaultFS</name> <value>hdfs://ns1</value> </property> <!-- 指定hadoop臨時目錄 --> <property> <name>hadoop.tmp.dir</name> <value>/soft/hadoop-2.7.1/tmp</value> </property> <!-- 指定zookeeper地址 --> <property> <name>ha.zookeeper.quorum</name> <value>hadoop04:2181,hadoop05:2181,hadoop06:2181</value> </property></configuration>

7.四、配置hdfs-site.xml

hdfs-site.xml主要配置namenode的高可用;
內容以下:
   
   
   
   
<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>hadoop01:9000</value> </property> <!-- nn1的http通訊地址 --> <property> <name>dfs.namenode.http-address.ns1.nn1</name> <value>hadoop01:50070</value> </property> <!-- nn2的RPC通訊地址 --> <property> <name>dfs.namenode.rpc-address.ns1.nn2</name> <value>hadoop02:9000</value> </property> <!-- nn2的http通訊地址 --> <property> <name>dfs.namenode.http-address.ns1.nn2</name> <value>hadoop02:50070</value> </property> <!-- 指定NameNode的元數據在JournalNode上的存放位置 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://hadoop04:8485;hadoop05:8485;hadoop06:8485/ns1</value> </property> <!-- 指定JournalNode在本地磁盤存放數據的位置 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/soft/hadoop-2.7.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</value> </property> <!-- 使用隔離機制時須要ssh免登錄 --> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_rsa</value> </property></configuration>
保存便可。

7.四、配置datanode的配置文件slaves

   
   
   
   
vi slaves
修改datanode節點以下:
   
   
   
   
hadoop04hadoop05hadoop06
保存便可。

7.五、配置mapreduce文件mapred-site.xml

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

7.六、配置yarn-site.xml

作規劃的時候就是配置hadoop03來運行yarn,配置以下:
   
   
   
   
<configuration>        <!-- 指定resourcemanager地址 -->
<property> <name>yarn.resourcemanager.hostname</name> <value>hadoop03</value> </property> <!-- 指定nodemanager啓動時加載server的方式爲shuffle server --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property></configuration>

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

7.七、啓動Zookeeper服務

在hadoop0四、hadoop0五、hadoop06上啓動Zookeeper,下面以hadoop04爲例
   
   
   
   
[root@hadoop04 zookeeper-3.4.6]# bin/zkServer.sh startJMX enabled by defaultUsing config: /soft/zookeeper-3.4.6/bin/../conf/zoo.cfgStarting zookeeper ... STARTED
確保這三臺服務器上有一個leader,兩個follower

7.八、在hadoop01上啓動journalnode

   
   
   
   
[root@hadoop01 hadoop-2.7.1]# sbin/hadoop-daemons.sh start journalnode
在7.4中配置了journalnode的節點是hadoop0四、hadoop0五、hadoop06,這三臺機器上會出現 JournalNode,如下是hadoop04上的進程
   
   
   
   
[root@hadoop04 zookeeper-3.4.6]# jps1532 JournalNode1796 Jps1470 QuorumPeerMain

7.九、在hadoop01上格式化hadoop

   
   
   
   
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就不用格式化了。
   
   
   
   
scp -r tmp/ hadoop02:/soft/hadoop-2.7.1/

7.十、在hadoop01上格式化ZK

   
   
   
   
hdfs zkfc -formatZK

7.十一、在hadoop01上 啓動HDFS

   
   
   
   
sbin/start-dfs.sh

7.12   在hadoop01上啓動YARN

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

八、使用hadoop集羣測試

在本機中配置hosts文件(不是VMware虛擬機)
文件路徑:C:\Windows\System32\drivers\etc\hosts
內容以下:
   
   
   
   
192.168.8.101 hadoop01192.168.8.102 hadoop02192.168.8.103 hadoop03192.168.8.104 hadoop04192.168.8.105 hadoop05192.168.8.106 hadoop06
在瀏覽器中輸入: http://hadoop01:50070/,就能夠看到以下界面





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


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


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









相關文章
相關標籤/搜索