您好,登錄后才能下訂單哦!
hadoopHA
數據類型
結構化數據RDMS
非結構化數據借助算法goole pagerank
半結構算法xmljson通過標簽進行。
一般情況下可以通過并行處理機制提高處理數據效率但是對于海量數據的加載是很慢的所以需要使用分布式文件系統只需要從本地磁盤上加載就好了所以速度很快。
hadoop集群mapreduce框架其函數要自己寫。
在hadoopHA 集群中,通常有兩臺不同的機器充當 NameNode。在任何時間,只有一臺機器處于Active 狀態;另一臺機器是處于 Standby 狀態。
在本片文檔中主要體現兩個高可用
hdfs和yarn
hdfs是
在本文檔中
server1server5作為NN和RMserver2,server3,server4作為DNZK和DN.
本篇文檔從zookeeper開始關于基礎配置請參考http://12237658.blog.51cto.com
本實驗出現的錯誤事項
1、內存劃分要足夠本次一共啟用5個虛擬機server1和server5要求大于1Gserver2,3,4不能小于768.
2、再格式化過程中第一次格式化需要先啟動日志進程sbin/hadoop.daem.sh start journalnode
[hadoop@server2/3/4 hadoop]$ sbin/hadoop-daemon.sh start journalnode
3、再啟動過程中,zookeeper會發生服務提不起來的情況在此情況下一般是myid的錯誤或者端口被占用
4、在啟動hdfs服務時可能出現namenode 或datanode不出現的情況此時一般要查看日志信息根據日志信息作出更改
5、服務盡量不要多次重復充起因為會導致進程混亂例如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中所有時間都是以這個時間為基礎以毫秒計用來調節心跳和超時。
# The number of ticks that the initial
# synchronization phase can take
initLimit=10//Follower 在啟動過程中,會從 Leader 同步所有最新數據,然后確定自己能夠對外服務的起始狀態。
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5 //在運行過程中,Leader 負責與 ZK 集群中所有機器進行通信,例如通過一些心跳檢測機制,來檢測機器的存活狀態。
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/tmp/zookeeper //存儲快照文件 snapshot 的目錄。默認情況下,事務日志也會存儲在這里。建議同時配置參數 dataLogDir, 事務日志的寫性能直接影響 zk 性能。在生產環境中該目錄應該為一個穩定的目錄而不應該是在tmp下因為tmp在一定時間后會被清除。
# the port at which the clients will connect
clientPort=2181 //客戶端連接 server 的端口,即對外服務端口
# 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的編號應該和myid的數字一致myid在dataDir下。
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
配置hadoop的hdfs
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節點分別是h2,h3
-->
<property>
<name>dfs.ha.namenodes.masters</name>
<value>h2,h3</value>
</property>
<!-- 指定 h2 節點的 rpc 通信地址
-->
<property>
<name>dfs.namenode.rpc-address.masters.h2</name>
<value>172.25.33.1:9000</value>
</property>
<!-- 指定 h2 節點的 http 通信地址
-->
<property>
<name>dfs.namenode.http-address.masters.h2</name>
<value>172.25.33.1:50070</value>
</property>
<!-- 指定 h3 節點的 rpc 通信地址
-->
<property>
<name>dfs.namenode.rpc-address.masters.h3</name>
<value>172.25.33.5:9000</value>
</property>
<!-- 指定 h3 節點的 http 通信地址
-->
<property>
<name>dfs.namenode.http-address.masters.h3</name>
<value>172.25.33.5:50070</value>
</property>
<!-- 指定 NameNode 元數據在 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 在本地磁盤存放數據的位置 -->
<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>
<!-- 配置失敗自動切換實現方式 -->
<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的高可用配置文件已經完成
在格式化hdfs之前要先將server2,3,4節點的journal服務打開因為hdfs在格式化的時候要與2,3,4的8485端口通信。
[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
在這三個節點看到該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上執行)
[hadoop@server1 hadoop]$ bin/hdfs zkfc -formatZK
然后就可以啟動服務了。
此時需要免密碼認證所以該制作ssh-keygen的趕緊制作。有時需要用ssh試連各個節點破除yes
[hadoop@server1 hadoop]$ sbin/start-dfs.sh
檢測[hadoop@server1/5 hadoop]$ jps
11212 DFSZKFailoverController
11482 Jps
10883 NameNode
通過網頁的50070訪問正常
172.25.33.150070
[hadoop@server1 hadoop]$ jps
11212 DFSZKFailoverController
11482 Jps
10883 NameNode
[hadoop@server1 hadoop]$ kill -9 10883
172.25.33.550070
驗證成功hdfs的高可用已經完成下邊配置yarn的高可用
Apache Hadoop YARN Yet Another Resource Negotiator另一種資源協調者是一種新的 Hadoop 資源管理器它是一個通用資源管理系統可為上層應用提供統一的資源管理和調度它的引入為集群在利用率、資源統一管理和數據共享等方面帶來了巨大好處
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 的節點--><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 自動恢復
-->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<!-- 配置 RM 狀態信息存儲方式,有 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服務。
[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
在另一個節點上并沒有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@server1 hadoop]$ jps
13244 ResourceManager
11212 DFSZKFailoverController
12814 NameNode
13923 Jps
[hadoop@server1 hadoop]$ kill -9 13244
172.25.33.58088
使用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...
結束5上的服務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的高可用已經完成。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。