溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

hadoop的高可用

發(fā)布時間:2020-07-09 13:03:49 來源:網(wǎng)絡(luò) 閱讀:882 作者:rockSnail 欄目:大數(shù)據(jù)

hadoopHA

數(shù)據(jù)類型

結(jié)構(gòu)化數(shù)據(jù)RDMS

非結(jié)構(gòu)化數(shù)據(jù)借助算法goole pagerank

半結(jié)構(gòu)算法xmljson通過標(biāo)簽進行。

一般情況下可以通過并行處理機制提高處理數(shù)據(jù)效率但是對于海量數(shù)據(jù)的加載是很慢的所以需要使用分布式文件系統(tǒng)只需要從本地磁盤上加載就好了所以速度很快。

hadoop集群mapreduce框架其函數(shù)要自己寫。

hadoopHA 集群中,通常有兩臺不同的機器充當(dāng) NameNode。在任何時間,只有一臺機器處于Active 狀態(tài);另一臺機器是處于 Standby 狀態(tài)。

在本片文檔中主要體現(xiàn)兩個高可用

hdfsyarn

hdfs

在本文檔中

server1server5作為NNRMserver2,server3,server4作為DNZKDN.

本篇文檔從zookeeper開始關(guān)于基礎(chǔ)配置請參考http://12237658.blog.51cto.com

 

本實驗出現(xiàn)的錯誤事項

1、內(nèi)存劃分要足夠本次一共啟用5個虛擬機server1server5要求大于1Gserver2,3,4不能小于768.

2、再格式化過程中第一次格式化需要先啟動日志進程sbin/hadoop.daem.sh start journalnode

[hadoop@server2/3/4 hadoop]$ sbin/hadoop-daemon.sh start journalnode

3、再啟動過程中,zookeeper會發(fā)生服務(wù)提不起來的情況在此情況下一般是myid的錯誤或者端口被占用

4、在啟動hdfs服務(wù)時可能出現(xiàn)namenode datanode不出現(xiàn)的情況此時一般要查看日志信息根據(jù)日志信息作出更改

5、服務(wù)盡量不要多次重復(fù)充起因為會導(dǎo)致進程混亂例如zookeeper的進程號和其文件中進程號不一致。[hadoop@server3 zookeeper]$ cat zookeeper_server.pid 1236 

 

 

zookeeper的啟動

下載tar包解壓到hadoop的家目錄

[hadoop@server3 ~]$ ls

hadoop        java         zookeeper        zookeeper-3.4.9.tar.gz

hadoop-2.7.3  jdk1.7.0_79  zookeeper-3.4.9

修改配置文件

[hadoop@server3 conf]$ cat zoo.cfg 

# The number of milliseconds of each tick

tickTime=2000//ZK中的一個時間單元zk中所有時間都是以這個時間為基礎(chǔ)以毫秒計用來調(diào)節(jié)心跳和超時。

# The number of ticks that the initial 

# synchronization phase can take

initLimit=10//Follower 在啟動過程中,會從 Leader 同步所有最新數(shù)據(jù),然后確定自己能夠?qū)ν夥?wù)的起始狀態(tài)。

# The number of ticks that can pass between 

# sending a request and getting an acknowledgement

syncLimit=5  //在運行過程中,Leader 負(fù)責(zé)與 ZK 集群中所有機器進行通信,例如通過一些心跳檢測機制,來檢測機器的存活狀態(tài)。

# the directory where the snapshot is stored.

# do not use /tmp for storage, /tmp here is just 

# example sakes.

dataDir=/tmp/zookeeper   //存儲快照文件 snapshot 的目錄。默認(rèn)情況下,事務(wù)日志也會存儲在這里。建議同時配置參數(shù) dataLogDir, 事務(wù)日志的寫性能直接影響 zk 性能。在生產(chǎn)環(huán)境中該目錄應(yīng)該為一個穩(wěn)定的目錄而不應(yīng)該是在tmp下因為tmp在一定時間后會被清除。

# the port at which the clients will connect

clientPort=2181   //客戶端連接 server 的端口,即對外服務(wù)端口

# 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=172.25.33.2:2888:3888

server.2=172.25.33.3:2888:3888

server.3=172.25.33.4:2888:3888

server的編號應(yīng)該和myid的數(shù)字一致myiddataDir下。

echo “1”> /tmp/zookeeper/myid ....

 

啟動zookeeper//2,3,4啟動。

[hadoop@server3 zookeeper]$ echo "2" > /tmp/zookeeper/myid

[hadoop@server3 zookeeper]$ bin/zkServer.sh start

ZooKeeper JMX enabled by default

Using config: /home/hadoop/zookeeper/bin/../conf/zoo.cfg

Starting zookeeper ... STARTED

[hadoop@server3 zookeeper]$ bin/zkServer.sh status

ZooKeeper JMX enabled by default

Using config: /home/hadoop/zookeeper/bin/../conf/zoo.cfg

Mode: follower

 

配置hadoophdfs

cat core-site.xml

<configuration>

<property>

        <name>fs.defaultFS</name>

                <value>hdfs://master</value>

                    </property>

<property>

        <name>ha.zookeeper.quorum</name><!--zookeeper集群主機地址-->

                <value>172.25.33.2:2181,172.25.33.3:2181,172.25.33.3:2181,172.25.33.4:2181</value>

</property>

</configuration>

cat hdfs-site.xml

<property>

                 <name>dfs.nameservices</name>

                         <value>masters</value>

                                 </property>

<!--master 下邊有兩個namenode節(jié)點分別是h2,h3

     -->

<property>

                <name>dfs.ha.namenodes.masters</name>

                        <value>h2,h3</value>

                                </property>

<!-- 指定 h2 節(jié)點的 rpc 通信地址

     -->

<property>

        <name>dfs.namenode.rpc-address.masters.h2</name>

                <value>172.25.33.1:9000</value>

</property>

<!-- 指定 h2 節(jié)點的 http 通信地址

     -->

<property>

        <name>dfs.namenode.http-address.masters.h2</name>

                <value>172.25.33.1:50070</value>

</property>

<!-- 指定 h3 節(jié)點的 rpc 通信地址

     -->

<property>

        <name>dfs.namenode.rpc-address.masters.h3</name>

                <value>172.25.33.5:9000</value>

</property>

<!-- 指定 h3 節(jié)點的 http 通信地址

     -->

<property>

        <name>dfs.namenode.http-address.masters.h3</name>

                <value>172.25.33.5:50070</value>

</property>

<!-- 指定 NameNode 元數(shù)據(jù)在 JournalNode 上的存放位置 -->

<property>

<name>dfs.namenode.shared.edits.dir</name>

<value>qjournal://172.25.33.2:8485;172.25.33.3:8485;172.25.33.4:8485/masters</value>

</property>

<!-- 指定 JournalNode 在本地磁盤存放數(shù)據(jù)的位置 -->

<property>

<name>dfs.journalnode.edits.dir</name>

<value>/tmp/journaldata</value>

</property>

<!-- 開啟 NameNode 失敗自動切換 -->

<property>

<name>dfs.ha.automatic-failover.enabled</name>

<value>true</value>

</property>

<!-- 配置失敗自動切換實現(xiàn)方式 -->

<property>

        <name>dfs.client.failover.proxy.provider.masters</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>

[hadoop@server1 hadoop]$ cat slaves 

172.25.33.3

172.25.33.4

172.25.33.2

 

至此hdfs的高可用配置文件已經(jīng)完成

在格式化hdfs之前要先將server2,3,4節(jié)點的journal服務(wù)打開因為hdfs在格式化的時候要與2,3,48485端口通信。

[hadoop@server2 hadoop]$ sbin/hadoop-daemon.sh start journalnode

starting journalnode, logging to /home/hadoop/hadoop-2.7.3/logs/hadoop-hadoop-journalnode-server2.example.com.out

[hadoop@server2 hadoop]$ jps

2629 JournalNode

2398 QuorumPeerMain

2667 Jps

 

在這三個節(jié)點看到該jps進程那么說明可以格式化Hdfs

[hadoop@server1 hadoop]$ bin/hdfs namenode -format

[hadoop@server1 hadoop]$ scp -r /tmp/hadoop-hadoop/ 172.25.33.5:/tmp

fsp_w_picpath_0000000000000000000                  100%  353     0.3KB/s   00:00    

fsp_w_picpath_0000000000000000000.md5              100%   62     0.1KB/s   00:00    

seen_txid                                    100%    2     0.0KB/s   00:00    

VERSION  

格式化zookeeper(只需在h2上執(zhí)行)

[hadoop@server1 hadoop]$ bin/hdfs zkfc -formatZK

然后就可以啟動服務(wù)了。

此時需要免密碼認(rèn)證所以該制作ssh-keygen的趕緊制作。有時需要用ssh試連各個節(jié)點破除yes

[hadoop@server1 hadoop]$ sbin/start-dfs.sh

檢測[hadoop@server1/5 hadoop]$ jps

11212 DFSZKFailoverController

11482 Jps

10883 NameNode

通過網(wǎng)頁的50070訪問正常

172.25.33.150070


hadoop的高可用 

[hadoop@server1 hadoop]$ jps

11212 DFSZKFailoverController

11482 Jps

10883 NameNode

[hadoop@server1 hadoop]$ kill -9 10883

172.25.33.550070 

hadoop的高可用 

驗證成功hdfs的高可用已經(jīng)完成下邊配置yarn的高可用

Apache Hadoop YARN Yet Another Resource Negotiator另一種資源協(xié)調(diào)者是一種新的 Hadoop 資源管理器它是一個通用資源管理系統(tǒng)可為上層應(yīng)用提供統(tǒng)一的資源管理和調(diào)度它的引入為集群在利用率、資源統(tǒng)一管理和數(shù)據(jù)共享等方面帶來了巨大好處

cat mapred-site.xml

<configuration>

<!--指定為mapreduce的框架 -->

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

</configuration>

cat yarn-site.xml

<configuration>

 

<!-- Site specific YARN configuration properties -->

<!-- 配置可以在 nodemanager 上運行 mapreduce 程序 -->

<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

 

<!-- 激活 RM 高可用 -->

<property>

<name>yarn.resourcemanager.ha.enabled</name>

<value>true</value>

</property>

<!-- 指定 RM 的集群 id

     -->

<property>

<name>yarn.resourcemanager.cluster-id</name>

<value>RM_CLUSTER</value>

</property>

 

<!-- 定義 RM 的節(jié)點--><property>

<name>yarn.resourcemanager.ha.rm-ids</name>

<value>rm1,rm2</value>

</property>

<!-- 指定 RM1 的地址 -->

<property>

<name>yarn.resourcemanager.hostname.rm1</name>

<value>172.25.33.1</value>

</property>

<!-- 指定 RM2 的地址 -->

<property>

<name>yarn.resourcemanager.hostname.rm2</name>

<value>172.25.33.5</value>

</property>

<!-- 激活 RM 自動恢復(fù)

     -->

<property>

<name>yarn.resourcemanager.recovery.enabled</name>

<value>true</value>

</property>

 

<!-- 配置 RM 狀態(tài)信息存儲方式,有 MemStore 和 ZKStore-->

 

 

<property>

<name>yarn.resourcemanager.store.class</name>

<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>

</property>

<!-- 配置為 zookeeper 存儲時,指定 zookeeper 集群的地址 -->

<property>

<name>yarn.resourcemanager.zk-address</name>

<value>172.25.33.2:2181,172.25.33.3:2181,172.25.33.4:2181</value>

</property>

</configuration>

 

配置文件完成后啟動yarn服務(wù)。

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

 

 

 

[hadoop@server1 hadoop]$ jps

13244 ResourceManager

11212 DFSZKFailoverController

13330 Jps

12814 NameNode

[hadoop@server5 ~]$ jps

1598 NameNode

1904 Jps

1695 DFSZKFailoverController

在另一個節(jié)點上并沒有RM,需要手動啟動

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

starting resourcemanager, logging to /home/hadoop/hadoop-2.7.3/logs/yarn-hadoop-resourcemanager-server5.example.com.out

[hadoop@server5 hadoop]$ jps

1598 NameNode

2018 Jps

1695 DFSZKFailoverController

1979 ResourceManager

172.25.33.18088

hadoop的高可用 

故障切換

 

[hadoop@server1 hadoop]$ jps

13244 ResourceManager

11212 DFSZKFailoverController

12814 NameNode

13923 Jps

[hadoop@server1 hadoop]$ kill -9 13244 

172.25.33.58088

hadoop的高可用 

使用zookeeper的命令行進行測試

[hadoop@server3 zookeeper]$ bin/zkCli.sh -server 127.0.0.1:2181

[zk: 127.0.0.1:2181(CONNECTED) 0] get /yarn-leader-election/RM_CLUSTER/ActiveBreadCrumb

 

 

RM_CLUSTERrm2

cZxid = 0x100000020

ctime = Tue Mar 07 22:05:16 CST 2017

mZxid = 0x100000053

mtime = Tue Mar 07 22:09:58 CST 2017

pZxid = 0x100000020

cversion = 0

dataVersion = 1

aclVersion = 0

ephemeralOwner = 0x0

dataLength = 17

numChildren = 0

[zk: 127.0.0.1:2181(CONNECTED) 1] quit

Quitting...

結(jié)束5上的服務(wù)RM會切換到1上。

ActiveBreadCrumb           ActiveStandbyElectorLock

[zk: 127.0.0.1:2181(CONNECTED) 0] get /yarn-leader-election/RM_CLUSTER/ActiveBreadCrumb

 

 

RM_CLUSTERrm1

cZxid = 0x100000020

ctime = Tue Mar 07 22:05:16 CST 2017

mZxid = 0x10000008b

mtime = Tue Mar 07 22:15:14 CST 2017

pZxid = 0x100000020

cversion = 0

dataVersion = 2

aclVersion = 0

ephemeralOwner = 0x0

dataLength = 17

numChildren = 0

[zk: 127.0.0.1:2181(CONNECTED) 1]

測試成功表示yarn的高可用已經(jīng)完成。

 

 


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI