1. 程式人生 > >Hadoop之——Hadoop2.5.2 HA高可靠性叢集搭建(Hadoop+Zookeeper)

Hadoop之——Hadoop2.5.2 HA高可靠性叢集搭建(Hadoop+Zookeeper)

一、Hadoop(HA)叢集的規劃

叢集規劃

主機名 IP NameNode DataNode Yarn ZooKeeper JournalNode
liuyazhuang145 192.168.0.145
liuyazhuang146 192.168.0.146
liuyazhuang147 192.168.0.147

二、Hadoop(HA)叢集環境搭建

注:我們搭建環境集中在liuyazhuang145主機上搭建,搭建完畢將相應的檔案拷貝到liuyazhuang146和liuyazhuang147主機。

1、安裝JDK

1.1下載JDK

1.2解壓JDK

在命令列輸入tar -zxvf jdk-7u72-linux-x64.tar.gz 進行解壓

1.3配置環境變數

在命令列輸入vim /etc/profile開啟profile檔案,在檔案末尾新增如下程式碼:

JAVA_HOME=/usr/local/jdk1.7.0_72
CLASS_PATH=.:$JAVA_HOME/lib
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASS_PATH PATH
輸入命令source /etc/profile使環境變數生效

1.4拷貝檔案

在命令列輸入如下命令將JDK環境和/etc/profile檔案拷貝到liuyazhuang146和liuyazhuang147主機上。

scp -r /usr/local/jdk1.7.0_72 liuyazhuang146:/usr/local
scp -r /usr/local/jdk1.7.0_72 liuyazhuang147:/usr/local
scp /etc/profile liuyazhuang146:/etc/
scp /etc/profile liuyazhuang147:/etc/
同時,我們分別在liuyazhuang146和liuyazhuang147主機上執行命令source /etc/profile使環境變數生效

至此,JDK環境搭建完成。

2、搭建Zookeeper叢集

2.1下載Zookeeper

2.2解壓Zookeeper

在命令列輸入tar -zxvf zookeeper-3.4.9.tar.gz對zookeeper進行解壓。

2.3Zookeeper叢集搭建

切換到Zookeeper的conf目錄下執行以下命令

cp zoo_sample.cfg zoo.cfg 
然後輸入vim zoo.cfg命令 配置如下:
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/usr/local/zookeeper-3.4.9/data
dataLogDir=/usr/local/zookeeper-3.4.9/datalog
# the port at which the clients will connect
clientPort=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=1
server.1=liuyazhuang145:2888:3888
server.2=liuyazhuang146:2888:3888
server.3=liuyazhuang147:2888:3888
同時在Zookeeper目錄下新建data和dataLog兩個目錄用來存放Zookeeper的myid檔案和日誌檔案,
mkdir data
mkdir dataLog
將目錄切換到zookeeper的data目錄下

執行命令

vim myid
按下鍵盤i輸入1後,按下esc鍵,再按下shift+; (也就是輸入冒號:),再輸入wq退出,此時就在zookeeper的data目錄下建立了一個myid檔案,這個myid的檔案中的內容為1。

2.4配置Zookeeper環境變數

為操作方便,我們也將Zookeeper配置到環境變數中,加上之前配置的JDK,我們在profile的配置如下:

JAVA_HOME=/usr/local/jdk1.7.0_72
CLASS_PATH=.:$JAVA_HOME/lib
ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.9
PATH=$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$PATH
export JAVA_HOME HADOOP_HOME CLASS_PATH PATH

2.5拷貝檔案

將Zookeeper環境和profile檔案分別拷貝到liuyazhuang146和liuyazhuang147主機上。如下命令:

scp -r /usr/local/zookeeper-3.4.9 liuyazhuang146:/usr/local
scp -r /usr/local/zookeeper-3.4.9 liuyazhuang147:/usr/local
scp  /ect/profile liuyazhuang146:/etc/
scp  /ect/profile liuyazhuang147:/etc/
同時,我們分別在liuyazhuang146和liuyazhuang147主機上執行命令source /etc/profile使環境變數生效。

2.6修改其他主機的myid檔案

注:別忘了將liuyazhuang146主機上Zookeeper中myid檔案內容修改為2  將liuyazhuang147主機上Zookeeper中myid檔案內容修改為3

至此,Zookeeper叢集環境搭建完畢。

3、Hadoop叢集環境搭建

同樣的,我們也是現在liuyazhuang145主機上搭建Hadoop環境,然後將環境拷貝到liuyazhuang146主機和liuyazhuang147主機上。

3.1下載Hadoop

同樣的,我們也是在Apache官網下載的Hadoop,我這裡下載的hadoop 2.5.2版本的。

3.2解壓Hadoop

輸入命令tar -zxvf hadoop-2.5.2.tar.gz解壓Hadoop

3.3配置Hadoop

1) core-site.xml

<configuration>

 <!-- 指定hdfs的nameservice為ns -->
 <property>    
      <name>fs.defaultFS</name>    
      <value>hdfs://ns</value>    
 </property>
 <!--指定hadoop資料臨時存放目錄-->
 <property>
      <name>hadoop.tmp.dir</name>
      <value>/usr/local/hadoop-2.5.2/tmp</value>
 </property>   
                          
 <property>    
      <name>io.file.buffer.size</name>    
      <value>4096</value>    
 </property>
 <!--指定zookeeper地址-->
 <property>
      <name>ha.zookeeper.quorum</name>
      <value>liuyazhuang145:2181,liuyazhuang146:2181,liuyazhuang147:2181</value>
 </property>

</configuration>

2) hdfs-site.xml

<configuration>
    <!--指定hdfs的nameservice為ns,需要和core-site.xml中的保持一致 -->    
    <property>    
        <name>dfs.nameservices</name>    
        <value>ns</value>    
    </property>  
    <!-- ns下面有兩個NameNode,分別是nn1,nn2 -->
    <property>
       <name>dfs.ha.namenodes.ns</name>
       <value>nn1,nn2</value>
    </property>
    <!-- nn1的RPC通訊地址 -->
    <property>
       <name>dfs.namenode.rpc-address.ns.nn1</name>
       <value>liuyazhuang145:9000</value>
    </property>
    <!-- nn1的http通訊地址 -->
    <property>
        <name>dfs.namenode.http-address.ns.nn1</name>
        <value>liuyazhuang145:50070</value>
    </property>
    <!-- nn2的RPC通訊地址 -->
    <property>
        <name>dfs.namenode.rpc-address.ns.nn2</name>
        <value>liuyazhuang146:9000</value>
    </property>
    <!-- nn2的http通訊地址 -->
    <property>
        <name>dfs.namenode.http-address.ns.nn2</name>
        <value>liuyazhuang146:50070</value>
    </property>
    <!-- 指定NameNode的元資料在JournalNode上的存放位置 -->
    <property>
         <name>dfs.namenode.shared.edits.dir</name>
         <value>qjournal://liuyazhuang145:8485;liuyazhuang146:8485;liuyazhuang147:8485/ns</value>
    </property>
    <!-- 指定JournalNode在本地磁碟存放資料的位置 -->
    <property>
          <name>dfs.journalnode.edits.dir</name>
          <value>/usr/local/hadoop-2.5.2/journal</value>
    </property>
    <!-- 開啟NameNode故障時自動切換 -->
    <property>
          <name>dfs.ha.automatic-failover.enabled</name>
          <value>true</value>
    </property>
    <!-- 配置失敗自動切換實現方式 -->
    <property>
            <name>dfs.client.failover.proxy.provider.ns</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>
                              
    <property>    
        <name>dfs.namenode.name.dir</name>    
        <value>file:///usr/local/hadoop-2.5.2/hdfs/name</value>    
    </property>    
    
    <property>    
        <name>dfs.datanode.data.dir</name>    
        <value>file:///usr/local/hadoop-2.5.2/hdfs/data</value>    
    </property>    
    
    <property>    
       <name>dfs.replication</name>    
       <value>2</value>    
    </property>   
    <!-- 在NN和DN上開啟WebHDFS (REST API)功能,不是必須 -->                                                                    
    <property>    
       <name>dfs.webhdfs.enabled</name>    
       <value>true</value>    
    </property>    
</configuration>
3) mapred-site.xml
<configuration>
 <property>    
        <name>mapreduce.framework.name</name>    
        <value>yarn</value>    
 </property>    
</configuration>
4) yarn-site.xml
<configuration>
    <!-- 指定nodemanager啟動時載入server的方式為shuffle server -->
    <property>    
            <name>yarn.nodemanager.aux-services</name>    
            <value>mapreduce_shuffle</value>    
     </property>  
     <!-- 指定resourcemanager地址 -->
     <property>
            <name>yarn.resourcemanager.hostname</name>
            <value>liuyazhuang147</value>
      </property> 
</configuration>
在hadoop下手動建立journal目錄,在hadoop下手動建立/hdfs/name目錄和/hdfs/data目錄

別分輸入如下命令:

mkdir -p /usr/local/hadoop-2.5.2/journal
mkdir -p /usr/local/hadoop-2.5.2/hdfs/name
mkdir -p /usr/local/hadoop-2.5.2/hdfs/data
注:後續如果Hadoop啟動失敗,可能是配置檔案的編碼問題,如果是配置檔案的編碼問題,則將上面的配置檔案中的中文註釋全部刪除掉即可。

5) hadoop-env.sh

找到檔案的export JAVA_HOME=${JAVA_HOME} 一行,將其修改為export JAVA_HOME=/usr/local/jdk1.7.0_72

6)slaves

liuyazhuang145
liuyazhuang146
liuyazhuang147
7)配置Hadoop環境變數

加上之前配置的JDK環境變數和Zookeeper環境變數,/etc/profile檔案如下所示:

JAVA_HOME=/usr/local/jdk1.7.0_72
CLASS_PATH=.:$JAVA_HOME/lib
HADOOP_HOME=/usr/local/hadoop-2.5.2
ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.9
PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin:$PATH
export JAVA_HOME HADOOP_HOME CLASS_PATH PATH
8)複製Hadoop環境到其他主機

在命令列分別輸入如下命令

scp -r /usr/local/hadoop-2.5.2 liuyazhuang146:/usr/local
scp -r /usr/local/hadoop-2.5.2 liuyazhuang147:/usr/local
scp /etc/profile liuyazhuang146:/etc
scp /etc/profile liuyazhuang147:/etc
同時,我們分別在liuyazhuang146和liuyazhuang147主機上執行命令source /etc/profile使環境變數生效。

至此,Hadoop叢集環境搭建完畢。

三、叢集的啟動

1、啟動Zookeeper叢集

分別在liuyazhuang145、liuyazhuang146、liuyazhuang147上執行如下命令啟動zookeeper叢集;

zkServer.sh start 
驗證叢集zookeeper叢集是否啟動,分別在liuyazhuang145、liuyazhuang146、liuyazhuang147上執行如下命令驗證zookeeper叢集是否啟動,叢集啟動成功,有兩個follower節點跟一個leader節點;

如下:


2、啟動journalnode叢集

在liuyazhuang145上執行如下命令完成JournalNode叢集的啟動

[[email protected] ~]# hadoop-daemons.sh start journalnode 
 執行jps命令,可以檢視到JournalNode的java程序pid

3、格式化zkfc,在zookeeper中生成ha節點

在liuyazhaung145執行如下命令,完成格式化

hdfs zkfc –formatZK 

 (注意,這條命令最好手動輸入,直接copy執行有可能會有問題)

4、 格式化hdfs

hadoop namenode –format 
(注意,這條命令最好手動輸入,直接copy執行有可能會有問題)

5、 啟動NameNode

首先在mast1上啟動active節點,在liuyazhuang145上執行如下命令

[[email protected] ~]# hadoop-daemon.sh start namenode 
在liuyazhuang146上同步namenode的資料,同時啟動standby的namenode,命令如下
#把NameNode的資料同步到liuyazhuang146上  
[[email protected] ~]# hdfs namenode -bootstrapStandby  
#啟動liuyazhuang146上的namenode作為standby  
[[email protected] ~]# hadoop-daemon.sh start namenode  

6、啟動啟動datanode

在liuyazhuang145上執行如下命令

[[email protected] ~]# hadoop-daemons.sh start datanode  

7、 啟動yarn

在作為資源管理器上的機器上啟動,我這裡是liuyazhuang147,執行如下命令完成yarn的啟動

[[email protected] ~]# start-yarn.sh 

8、啟動ZKFC

在liuyazhaung145上執行如下命令,完成ZKFC的啟動

[[email protected] ~]# hadoop-daemons.sh start zkfc 
全部啟動完後分別在liuyazhuang145,liuyazhuang146,liuyazhuang147上執行jps是可以看到下面這些程序
liuyazhuang145:
[[email protected] ~]# jps
3914 DFSZKFailoverController
3557 DataNode
4081 NameNode
2552 QuorumPeerMain
3357 JournalNode
3669 NodeManager
5716 Jps
[[email protected] ~]# 

liuyazhuang146:
[[email protected] ~]# jps
3719 NameNode
3129 DataNode
6543 Jps
2460 QuorumPeerMain
3451 DFSZKFailoverController
3241 NodeManager
3025 JournalNode
[[email protected] ~]# 

liuyazhuang147:
[[email protected] ~]# jps
2700 JournalNode
2838 DataNode
3569 Jps
2952 ResourceManager
3040 NodeManager
2471 QuorumPeerMain
[[email protected] ~]#

四、測試HA的高可用性

啟動後liuyazhuang145的namenode和liuyazhuang146的namenode如下所示:

此時,我們停掉liuyazhuang145主機上的namenode

在liuyazhuang145主機上執行命令hadoop-daemon.sh stop namenode  ,此時liuyazhuang146上的namenode變為active狀態


此時,我們啟動liuyazhuang145上的namenode,在命令列輸入命令:hadoop-daemon.sh start namenode



此時,我們看到liuyazhuang145上的namenode為standby狀態  liuyazhuang146上的namenode為active狀態

如果liuyazhuang146上的namenode掛掉,liuyazhuang145上的namenode就會變為active狀態,再次重啟liuyazhuang146上的namenode,liuyazhuang146上的namenode即變為standby狀態,實現了namenode的高可用。

五、附錄

增減DataNode需要更改的檔案:
hdfs-site.xml
slaves
/etc/hosts

另外如果新加入節點,需要更新叢集內所有節點的公鑰,以便互相之間可以無密碼訪問。


至此,Hadoop2.5.2 HA高可靠性叢集搭建(Hadoop+Zookeeper)搭建完畢。

相關推薦

Hadoop——Hadoop2.5.2 HA可靠性叢集搭建(Hadoop+Zookeeper)前期準備

今天是十一長假的第三天,節前,很多朋友發來私信說,網上基於HA的Hadoop叢集,動不動就是7、8臺伺服器,甚至是10幾臺伺服器,自己的電腦Hold不住這麼多虛擬機器啊!有什麼辦法可以將伺服器縮減為3臺嗎?今天,我就為大家帶來一篇如何在3臺CentOS 虛擬機器上搭建基於

Hadoop——Hadoop2.5.2 HA可靠性叢集搭建(Hadoop+Zookeeper)

一、Hadoop(HA)叢集的規劃 叢集規劃 主機名 IP NameNode DataNode Yarn ZooKeeper JournalNode liuyazhuang145 192.168.0.145 是 是 否 是 是 liuyazhuang146 192.16

Hadoop2.7.3 HA可靠性叢集搭建(Hadoop+Zookeeper)

一.概述       在hadoop1時代,只有一個NameNode。如果該NameNode資料丟失或者不能工作,那麼整個叢集就不能恢復了。這是hadoop1中的單點問題,也是hadoop1不可靠的表現。    

centos7 hadoop HA可用叢集搭建hadoop2.7 zookeeper3.4 )

目錄 七、總結 上篇文章寫了如何用ssh免密登入,當然這些操作都是在hadoop賬號上的操作,包括這篇文章也是一樣 三臺主機 一、伺服器環境 主機名 IP 使用者名稱 密碼 安裝目錄 node1 192.168.31.

CentOS7+Hadoop2.7.2(HA可用+Federation聯邦)+Hive1.2.1+Spark2.1.0 完全分散式叢集安裝

本文件主要記錄了Hadoop+Hive+Spark叢集安裝過程,並且對NameNode與ResourceManager進行了HA高可用配置,以及對NameNode的橫向擴充套件(Federation聯邦) 1VM網路配置 將子網IP設定為192.168.1.0: 將閘道器設定

Hadoop HA可用叢集搭建2.7.2

<configuration> <!--指定hdfs的nameservice為ns1,需要和core-site.xml中的保持一致 --> <property> <name>dfs.nameservices</name> <valu

三節點可用叢集搭建——Hadoop-HA+zookeeper

目錄 HDFS -HA模式的工作機制示意圖 叢集規劃——三節點高可用 Hadoop HA叢集搭建 前期準備 建立新的虛擬機器 配置虛擬機器 克隆虛擬機器 配置環境變數,重新整理(master、slave1、slave2都配置一下環境變數) 安裝zookeeper叢集 配置檔案 拷貝檔案 拷貝

超詳細Hadoop HA可用叢集搭建及常見問題處理

       最近研究了下公司的hadoop叢集並模仿搭建了一個在本地測試使用的hadoop叢集。本文介紹下詳細的搭建過程以及各種常見問題的處理解決。  1 ,  前期準備     1.0  ,  準備Linux環境。         安裝vmware linux虛擬機

Hadoop——CentOS + hadoop2.5.2分散式環境配置

一、基礎環境準備 系統:(VMWare) CentOS-6.5-x86_64-bin-DVD1.iso hadoop版本:hadoop-2.5.2 jdk版本:jdk-7u72-linux-x64.tar.gz 1.叢集機器 三臺測試叢集,一個master(liuyazh

linux 安裝hadoop 的四大執行模式——HA可用分佈模式(版本2.9.1)

hadoop的HA高可用配置:hadoop的名稱節點部署在不同的伺服器上(簡單理解),具體定義請自行查詢 備註:簡述過程如果前面步驟按步驟進行,後續的步驟就不做詳細解釋 準備:建立h105作為高可用的名稱節點(namenode),一般會再建議一個數據節點(及配置4個數據節點,兩個名稱節點),

hadoop2.5.2學習14--MR協同過濾天貓推薦演算法實現01

一、程式碼步驟: 1、 去重 2、 獲取所有使用者的喜歡矩陣: 3、 獲得所有物品之間的同現矩陣 4、 兩個矩陣相乘得到三維矩陣 5、 三維矩陣的資料相加獲得所有使用者對所有物品的推薦值(二維矩陣) 6、 按照推薦值降序排序。

虛擬機器下Linux系統Hadoop單機/偽分散式配置:Hadoop2.5.2+Ubuntu14.04(半原創)

系統: Ubuntu 14.04 64bitHadoop版本: Hadoop 2.5.2 (stable)JDK版本: JDK 1.6 虛擬機器及Ubuntu安裝 1. 下載並安裝 VMware workstation 11   下載地址:https://my.vmwar

CentOS 7部署Hadoop叢集HA可用叢集

目錄 測試環境 Hadoop 組織框架 HDFS架構 YARN架構 HA叢集部署規劃 自動故障轉移 關於叢集主機時間 Linux環境搭建 配置Java環境 安裝單機版Hadoop Zookeeper叢集安裝 配置環境變數 關閉防火牆 修

Hadoop2.5.2叢集部署(完全分散式)

環境介紹 硬體環境 CPU 4 MEM 4G 磁碟 60G  軟體環境 OS:centos6.5版本 64位 Hadoop:hadoop2.5.2 64位 JDK: JDK 1.8.0_91 主機配

Hadoop2.5.2集群部署(完全分布式)

tex 免密碼登錄 文件復制 job src 時間 配置環境 8.0 上進 環境介紹 硬件環境 CPU 4 MEM 4G 磁盤 60G 軟件環境 OS:centos6.5版本 64位 Hadoop:hadoop2.5.2 64位 JDK: JDK 1.8.0_91 主機

Python3學習路~5.2 time & datetime模組

time模組 時間相關的操作,時間有三種表示方式: 時間戳               1970年1月1日之後的秒,即:time.time() 格式化的字串    2014-11-11 11:11, &nb

Hadoop部署(六)——CentOS 7部署Hadoop叢集HA可用叢集

目錄 測試環境 關閉防火牆 測試環境 Linux系統版本:CentOS 7 64位 Hadoop 組織框架 Hadoop主要包括兩部分: 一部分是HDFS(Hadoop Distr

教你Windows平臺安裝配置Hadoop2.5.2(不借助cygwin)

剛入門hadoop,開發環境的搭建估計能把一部分人逼走。我也差點瘋了。 估計能看到這篇文章的小夥伴們都飽受cygwin和各種配置檔案的折磨了吧? 如果你不想在linux上搭建,又不想安裝cygwin。那就繼續往下看啦~ 一、 安裝hadoop2

大資料 hadoop2.5.2偽分散式搭建

1.準備Linux環境     1.0點選VMware快捷方式,右鍵開啟檔案所在位置 -> 雙擊vmnetcfg.exe -> VMnet1 host-only ->修改subnet ip 設定網段:192.168.8.0 子網掩碼:255.255.255.0 -> apply -&g

企業級Linux講座在SAN上建立可靠性SAMBA叢集

  2、Install and setup Red Hat Cluster Manager      1) 安裝Red Hat 叢集管理員套件      用root 登入rhel3-1 安裝clumanager 與redhat-config-cluster 套件才能設定Red Hat 叢集管理員,將光碟收入光