搭建3節點hadoop集群


前言

我們使用hadoop2.6.0版本配置Hadoop集群,同時配置NameNode+HA、ResourceManager+HA,並使用zookeeper來管理Hadoop集群。

 

(一)HDFS概述

基礎架構

1、NameNode(Master)

1)命名空間管理:命名空間支持對HDFS中的目錄、文件和塊做類似文件系統的創建、修改、刪除、列表文件和目錄等基本操作。

2)塊存儲管理。

HA架構

hdfs架構圖

從上面的架構圖可以看出,使用Active NameNode,Standby NameNode 兩個節點可以解決單點問題,兩個節點通過JounalNode共享狀態,通過ZKFC 選舉Active ,監控狀態,自動備份。

1、Active NameNode

接受client的RPC請求並處理,同時寫自己的Editlog和共享存儲上的Editlog,接收DataNode的Block report, block location updates和heartbeat。

2、Standby NameNode

同樣會接到來自DataNode的Block report, block location updates和heartbeat,同時會從共享存儲的Editlog上讀取並執行這些log操作,保持自己NameNode中的元數據(Namespcae information + Block locations map)和Active NameNode中的元數據是同步的。所以說Standby模式的NameNode是一個熱備(Hot Standby NameNode),一旦切換成Active模式,馬上就可以提供NameNode服務。

3、JounalNode

用於Active NameNode , Standby NameNode 同步數據,本身由一組JounnalNode節點組成,該組節點奇數個。

4、ZKFC

監控NameNode進程,自動備份。

 

(二)YARN概述

基礎架構

1、ResourceManager(RM)

接收客戶端任務請求,接收和監控NodeManager(NM)的資源情況匯報,負責資源的分配與調度,啟動和監控ApplicationMaster(AM)。

2、NodeManager

節點上的資源管理,啟動Container運行task計算,上報資源、container情況匯報給RM和任務處理情況匯報給AM。

3、ApplicationMaster

單個Application(Job)的task管理和調度,向RM進行資源的申請,向NM發出launch Container指令,接收NM的task處理狀態信息。

4、Web Application Proxy

用於防止Yarn遭受Web攻擊,本身是ResourceManager的一部分,可通過配置獨立進程。ResourceManager Web的訪問基於守信用戶,當Application Master運行於一個非受信用戶,其提供給ResourceManager的可能是非受信連接,Web Application Proxy可以阻止這種連接提供給RM。

5、Job History Server

NodeManager在啟動的時候會初始化LogAggregationService服務, 該服務會在把本機執行的container log (在container結束的時候)收集並存放到hdfs指定的目錄下. ApplicationMaster會把jobhistory信息寫到hdfs的jobhistory臨時目錄下, 並在結束的時候把jobhisoty移動到最終目錄, 這樣就同時支持了job的recovery.History會啟動web和RPC服務, 用戶可以通過網頁或RPC方式獲取作業的信息。

HA架構

Yarn架構圖

ResourceManager HA 由一對Active,Standby結點構成,通過RMStateStore存儲內部數據和主要應用的數據及標記。目前支持的可替代的RMStateStore實現有:基於內存的MemoryRMStateStore,基於文件系統的FileSystemRMStateStore,及基於zookeeper的ZKRMStateStore。 ResourceManager HA的架構模式同NameNode HA的架構模式基本一致,數據共享由RMStateStore,而ZKFC成為 ResourceManager進程的一個服務,非獨立存在。

(三)規划

主機規划

這里我們使用5 台主機來配置Hadoop集群。

 

master

slave1

slave2

namenode

datanode

resourcemanager

journalnode

zookeeper

Journalnode和ZooKeeper保持奇數個,這點大家要有個概念,最少不少於 3 個節點。

軟件規划

軟件

版本

位數

說明

jdk

jdk1.7

64位

最新穩定版本

centos

centos6.5

64位

 

zookeeper

Apache zookeeper3.4.6

 

穩定版本

hadoop

Apache hadoop2.6.0

 

穩定版本

  •  
  •  

用戶規划

每個節點的hadoop用戶組和用戶需要大家自己創建

 

(四)集群安裝前的環境檢查

時鍾同步

所有節點的系統時間要與當前時間保持一致。

查看當前系統時間

date
Tue Nov  3 06:06:04 CST 2015

如果系統時間與當前時間不一致,進行以下操作。

1 [root@master~]# cd /usr/share/zoneinfo/
2 [root@master zoneinfo]# ls        //找到Asia
3 [root@master zoneinfo]# cd Asia/        //進入Asia目錄
4 [root@master Asia]# ls        //找到Shanghai
5 [root@master Asia]# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime        //當前時區替換為上海

 

我們可以同步當前系統時間和日期與NTP(網絡時間協議)一致。

 

host文件檢查

禁用防火牆

所有節點的防火牆都要關閉

(五)配置SSH免密碼通信

使用命令:

ssh-keygen -t rsa

cat id_rsa.pub >> authorized_keys	

所有節點都要執行以上操作

將所有節點的authorized_keys合並

大家通過ssh 相互訪問,如果都能無密碼訪問,代表ssh配置成功。

(六)腳本工具的使用

runRemoteCmd.sh 用於統一執行命令
deploy.sh遠程復制文件腳本

(七)jdk安裝

略 ,每個節點都要安裝

(八)Zookeeper安裝

修改Zookeeper中的配置文件。

[hadoop@master app]$ cd /home/hadoop/app/zookeeper/conf/
[hadoop@master conf]$ ls
configuration.xsl  log4j.properties  zoo_sample.cfg
[hadoop@master conf]$ cp zoo_sample.cfg zoo.cfg        //復制一個zoo.cfg文件
[hadoop@master  conf]$ vi zoo.cfg
dataDir=/home/hadoop/data/zookeeper/zkdata        //數據文件目錄
dataLogDir=/home/hadoop/data/zookeeper/zkdatalog        //日志目錄
# the port at which the clients will connect
clientPort=2181        //默認端口號
#server.服務編號=主機名稱:Zookeeper不同節點之間同步和通信的端口:選舉端口(選舉leader)
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

通過遠程命令deploy.sh將Zookeeper安裝目錄拷貝到其他節點上面。

在所有節點上創建目錄

/home/hadoop/data/zookeeper/zkdata
/home/hadoop/data/zookeeper/zkdatalog

分別在所有節點上創建myid
進入zkdata目錄下,創建文件myid,里面的內容分別填充為:1、2、3

配置zookeeper環境變量

檢查是否安裝成功
/home/hadoop/app/zookeeper/bin/zkServer.sh start


(九)hadoop集群環境搭建

解壓

 

修改配置文件 切換到/home/hadoop/app/hadoop/etc/hadoop/目錄下。

配置HDFS

配置hadoop-env.sh

export JAVA_HOME=/home/hadoop/app/jdk1.7.0_79

配置core-site.xml

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://cluster1</value>
    </property>
    < 這里的值指的是默認的HDFS路徑 ,取名為cluster1>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/data/tmp</value>
    </property>
    < hadoop的臨時目錄,如果需要配置多個目錄,需要逗號隔開,data目錄需要我們自己創建>
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>master:2181,slave1:2181,slave2:2181</value>
    </property>
    < 配置Zookeeper 管理HDFS>
</configuration>

配置hdfs-site.xml

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    < 數據塊副本數為3>
    <property>
        <name>dfs.permissions</name>
        <value>false</value>
    </property>
    <property>
        <name>dfs.permissions.enabled</name>
        <value>false</value>
    </property>
    < 權限默認配置為false>
    <property>
        <name>dfs.nameservices</name>
        <value>cluster1</value>
    </property>
    < 命名空間,它的值與fs.defaultFS的值要對應,namenode高可用之后有兩個namenode,cluster1是對外提供的統一入口>
    <property>
        <name>dfs.ha.namenodes.cluster1</name>
        <value>djt11,djt12</value>
    </property>
    < 指定 nameService 是 cluster1 時的nameNode有哪些,這里的值也是邏輯名稱,名字隨便起,相互不重復即可>
    <property>
        <name>dfs.namenode.rpc-address.cluster1.master</name>
        <value>master:9000</value>
    </property>
    < djt11 rpc地址>
    <property>
        <name>dfs.namenode.http-address.cluster1.master</name>
        <value>master:50070</value>
    </property>
    < djt11 http地址>
    <property>
        <name>dfs.namenode.rpc-address.cluster1.slave1</name>
        <value>slave1:9000</value>
    </property>
    < djt12 rpc地址>
    <property>
        <name>dfs.namenode.http-address.cluster1.slave1</name>
        <value>slave1:50070</value>
    </property>

    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
    < 啟動故障自動恢復>
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://master:8485;slave1:8485;slave2:8485/cluster1</value>
    </property>
    < 指定journal>
    <property>
        <name>dfs.client.failover.proxy.provider.cluster1</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    < 指定 cluster1 出故障時,哪個實現類負責執行故障切換>
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/home/hadoop/data/journaldata/jn</value>
    </property>
    < 指定JournalNode集群在對nameNode的目錄進行共享時,自己存儲數據的磁盤路徑 >
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>shell(/bin/true)</value>
    </property>
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/home/hadoop/.ssh/id_rsa</value>
    </property>
    <property>
        <name>dfs.ha.fencing.ssh.connect-timeout</name>
        <value>10000</value>
    </property>
    < 腦裂默認配置>
    <property>
        <name>dfs.namenode.handler.count</name>
        <value>100</value>
    </property>
</configuration>

配置 slave

[hadoop@masterhadoop]$ vi slaves
master
slave1 slave2

然后將配置好的hadoop分發到所有節點

hdfs配置完畢后啟動順序

1、啟動所有節點上面的Zookeeper進程

/home/hadoop/app/zookeeper/bin/zkServer.sh start

2、啟動所有節點上面的journalnode進程
"/home/hadoop/app/hadoop/sbin/hadoop-daemon.sh start journalnode" all

與此同時,需要在備節點(比如,slave1)上執行數據同步
bin/hdfs namenode -bootstrapStandby	//同步主節點和備節點之間的元數據

如果上面操作沒有問題,我們可以一鍵啟動hdfs所有相關進程
[hadoop@masterhadoop]$ sbin/start-dfs.sh

7、驗證是否啟動成功

通過web界面查看namenode啟動情況。

http://master:50070


YARN安裝配置

配置mapred-site.xml

配置yarn-site.xml

 
        

啟動YARN

1、在master節點上執行。

[hadoop@masterhadoop]$ sbin/start-yarn.sh	
		

2、在slave1節點上面執行。

[hadoop@slave1 hadoop]$ sbin/yarn-daemon.sh start resourcemanager

 

如果上面執行沒有異常,說明YARN安裝成功。

至此,hadoop 分布式集群搭建完畢。


免責聲明!

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



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