Hadoop集群高可用及zookeeper+kafka组件搭建
目錄
一.Hadoop集群高可用
1.Zookeeper概述
1)Zookeeper基本概述
3)Zab協議
3)observer
4)zookeeper集群圖例
2.zookeeper集群搭建
3.zookeeper集群管理
4.kafka集群
1)Kafka的概述
5.Hadoop高可用
1)高可以概述
3)集群配置文件
?4)官網查看書寫配置
5)初始化啟動集群
5)驗證集群
一.Hadoop集群高可用
角色與配置
| hadoop1 | 192.168.1.50 | namenode, resourcemanager, ZKFC |
| hadoop2 | 192.168.1.56 | namenode, resourcemanager, ZKFC |
| node-0001 | 192.168.1.51 | datanode, nodemanager, zookeeper, journalnode |
| node-0002 | 192.168.1.52 | datanode, nodemanager, zookeeper, journalnode |
| node-0003 | 192.168.1.53 | datanode, nodemanager, zookeeper, journalnode |
1.Zookeeper概述
1)Zookeeper基本概述
Zookeeper是什么
-Zookeeper是一個開源的分布式應用程序協調服務
Zookeeper能做什么
-Zookeeper是用來保證數據在集群間的事務一致性
Zookeeper應用場景
-集群分布式鎖
-集群統一命名服務
-分布式協調服務
鎖的機制概述,(在前面寫的就會待定)
?
2)Zookeeper角色與特性(Leader,和Follower)
-Leader:接受所有Follower的提案請求并統一協調發起提案的投票,負責與所有的Follower進行內部數據交換 識
-Follower:直接為客戶端服務并參與提案的投票,同時與 Leader進行數據交換
-0bserver:直接為客戶端服務但并不參與提案的投票,同時也與Leader進行數據交換
Zookeeper角色與選舉
-服務在啟動的時候是沒有角色的(LOOKING),角色是通過選舉產生的
-選舉產生一個Leader,剩下的是Follower選舉Leader原則
-集群中超過半數機器投票選擇Leader
? ?-假如集群中擁有n臺服務器,那么Leader 必須得到(n/2+1)臺服務器的投票
Zookeeper的高可用
-如果Leader死亡,重新選舉Leader
-如果死亡的機器數量達到一半,則集群掛掉
-如果無法得到足夠的投票數量,就重新發起投票,如果參與投票的機器不足n/2+1,則集群停止工作
-如果Follower死亡過多,剩余機器不足n/2+1,則集群也會停止工作
? ?-Observer不計算在投票總設備數量里面
Zookeeper可伸縮擴展性原理與設計
-Leader所有寫相關操作
-Follower讀操作與響應Leader提議
-在0bserver出現以前,Zookeeper的伸縮性由Follower來實現,我們可以通過添加Follower節點的數量來保證 ;Zookeeper服務的讀性能,但是隨著Follower節點數量的增加,Zookeeper服務的寫性能受到了影響
? ?-客戶端提交一個請求,若是讀請求,則由每臺Server的本地副本數據庫直接響應。若是寫請求,需要通過一致性協議(Zab)來處理
3)Zab協議
-Zab協議規定:來自Client的所有寫請求都要轉發給集群中唯一的Leader。
-當Leader收到一個寫請求時就會發起一個提案進行投票。然后其他的Server對該提案進行投票。之后Leader收集投票的結果,當投票數量過半時Leader會向所有的Server發送一個通知消息。
最后當Client所連接的Server收到該消息時,會把該操作更新并對Client的寫請求做出回應
Zab協議寫性能問題
-ZooKeeper在上述協議中實際扮演了兩個職能。一方面從客戶端接受連接與操作請求,另一方面對操作結果進行投票。這兩個職能在集群擴展的時候彼此制約
???-從Zab協議對寫請求的處理過程中可以發現,增加Follower的數量,則增加了協議投票過程的壓力。因為Leader節點必須等待集群中過半Server響應投票,是節點的增加使得部分計算機運行較慢,從而拖慢整個投票過程的可能性也隨之提高,隨著集群變大,寫操作也會隨之下降
3)observer
為了解決上述問題
-我們不得不在增加集群規模和保持較好吞吐性能之間進行權衡。為了打破這一耦合關系,我們引入了不參與投票的服務器Observer。
-0bserver可以接受客戶端的連接,并將寫請求轉發給 Leader節點。
? ?-但Leader節點不會要求Observer參加投票,僅僅在上述第3步那樣,和其他服務節點一起得到投票結果
總:
-
Observer的擴展,給Zookeeper的可伸縮性帶來了全新的景象。加入很多Observer節點,無須擔心嚴重影響寫吞吐量。0bserver提升讀性能的可伸縮性,并且還提供了提供了廣域網能力
-
但0bserver并非是無懈可擊,因為協議中的通知階段,仍然與服務器的數量呈線性關系。但是這里的串行開銷非常低。因此,可以認為在通知服務器階段不會成為瓶頸
-
zookeeper集群本身具有很好的高可用特性
-
leader死亡后會重新選舉新的leader,這個過程完全是自動的,不需要人工干預,fllower是多個節點,其中部分死亡后其他節點還可以繼續工作
-
不管是leader還是fllower,死亡的總數不能達到(n/2)臺,否則集群掛起,observer不計算在高可用里面
4)zookeeper集群圖例
zookeeper最小集群是三臺,加上一臺oberver
2.zookeeper集群搭建
下載軟件包
/dist/zookeeper 的索引 (apache.org)
~]# wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz~]# yum install -y java-1.8.0-openjdk-devel ~]# tar zxf zookeeper-3.4.13.tar.gz ~]# mv zookeeper-3.4.13 /usr/local/zookeeper~]# cd /usr/local/zookeeper/conf/ # 拷貝模板文件,zoo.cfg默認是單機版,組建集群,在文件的末尾添加集群節點,只要指定observer,其他的角色讓服務自己選舉 ~]# cp zoo_sample.cfg zoo.cfg ~]# vim zoo.cfg # 配置文件最后添加 server.1=node-0001:2888:3888 server.2=node-0002:2888:3888 server.3=node-0003:2888:3888 server.4=hadoop1:2888:3888:observer # server.運行id=主機名稱:端口:范圍:observer(角色)# 給每個節點都同步一個 ~]# for i in node-{0001..0003};dorsync -aXSH --delete /usr/local/zookeeper ${i}:/usr/local/done注:在所有節點手工啟動服務
# 創建datadir指定的目錄 ~]# mkdir /tmp/zookeeper # 在目錄下創建myid文件,文件內容為主機運行id-myid文件中只有一個數字,注意:每個服務對應ID ~]# grep -Po "\d+(?==${HOSTNAME})" /usr/local/zookeeper/conf/zoo.cfg >/tmp/zookeeper/myid ~]# /usr/local/zookeeper/bin/zkServer.sh start ~]# jps 1001 QuorumPeerMain # 啟動一臺是無法啟動集群的需要都做如上配置注:-server.id中的id與myid中的id必須一一對應 -id的范圍是1~255
當所有節點啟動完成以后使用命令驗證:
~]# /usr/local/zookeeper/bin/zkServer.sh status?記錄一個報錯
當都執行之后我發現還是沒有啟動
?但是進程啟動了
這邊最后配置文件對比發現id都是4而沒有在對應機器配置對應的id,設置之后還是一樣,再次排查之后發現可能是配置文件中指定節點所使用的主機名不一致,這里就再次操作
## 1.直接在hadoop1機器上直接刪除zookeeper目錄 # 來執行寫一個腳本 ~]# cat ceshi.sh #!/bin/bash for i in hadoop1 node-{1..3};do echo $i; ssh $i $1; done ~]# chmod +x ceshi.sh # 關閉zookeeper ~]# ./ceshi.sh "/usr/local/zookeeper/bin/zkServer.sh stop" # 刪除目錄 ~]# ./ceshi.sh "rm -rf /usr/local/zookeeper" ~]# ./ceshi.sh "rm -rf /tmp/zookeeper"## 2.設置主機名與hosts # 設置主機名 hadoop1]# hostnamectl set-hostname hadoop1 01]# hostnamectl set-hostname node-1 02]# hostnamectl set-hostname node-2 03]# hostnamectl set-hostname node-3 # 添加hosts hadoop1]# vim /etc/hosts 172.17.0.51 hadoop1 172.17.0.114 node-001 172.17.0.142 node-002 172.17.0.98 node-00301]# vim /etc/hosts 172.17.0.51 hadoop1 172.17.0.114 node-001 172.17.0.142 node-002 172.17.0.98 node-00302]# vim /etc/hosts 172.17.0.51 hadoop1 172.17.0.114 node-001 172.17.0.142 node-002 172.17.0.98 node-00303]# vim /etc/hosts 172.17.0.51 hadoop1 172.17.0.114 node-001 172.17.0.142 node-002 172.17.0.98 node-003## 3.準備zookeeper配置文件 hadoop1]# tar -xf zookeeper-3.4.13.tar.gz && mv zookeeper-3.4.13 /usr/local/zookeeper hadoop1]# cd /usr/local/zookeeper && cp zoo_sample.cfg zoo.cfg # 注意配置文件和上面一致# 給每個節點都同步一個 ~]# for i in node-{0001..0003};dorsync -aXSH --delete /usr/local/zookeeper ${i}:/usr/local/done # 然后再每臺都創建一個目錄和id ~]# ./ceshi.sh "mkdir /tmp/zookeeper" hadoop1]# grep -Po "\d+(?==${HOSTNAME})" /usr/local/zookeeper/conf/zoo.cfg >/tmp/zookeeper/myid 01]# grep -Po "\d+(?==${HOSTNAME})" /usr/local/zookeeper/conf/zoo.cfg >/tmp/zookeeper/myid 02]# grep -Po "\d+(?==${HOSTNAME})" /usr/local/zookeeper/conf/zoo.cfg >/tmp/zookeeper/myid 03]# grep -Po "\d+(?==${HOSTNAME})" /usr/local/zookeeper/conf/zoo.cfg >/tmp/zookeeper/myid#啟動 ~]# ./ceshi.sh "/usr/local/zookeeper/bin/zkServer.sh start"3.zookeeper集群管理
手冊地址
ZooKeeper Administrator's Guide (apache.org)
?
?
# 安裝命令工具軟件hadoop1上 ~]# yum install -y socat ~]# socat - TCP:node-0001:2181 ruok # 輸入 imok # 返回 ## 書寫腳本測試 ~]# cat zkstats #!/bin/bash function getzkstat(){exec 2>/dev/nullexec 8<>/dev/tcp/$1/2181echo stat >&8Msg=$(cat <&8 |grep -P "^Mode:")exec 8<&-printf "%15s " $1echo -e "${Msg:-Mode: \x1b[31mNULL\x1b[0m}" }if (( $# == 0 ));thenecho "${0##*/} zk1 zk2 zk3 ... ..." elsefor i in $@;dogetzkstat ${i}done fi~]# ./zkstats hadoop1 node-{0001..0003}hadoop1 Mode: observernode-0001 Mode: followernode-0002 Mode: leadernode-0003 Mode: follower4.kafka集群
1)Kafka的概述
kafka是什么
-Kafka是由LinkedIn開發的一個分布式的消息系統
-Kafka是使用Scala編寫
-Kafka是一種消息中間件解
為什么要使用Kafka
-解耦、冗余、異步通信、提高擴展性
-流量削峰、緩沖、保證順序,靈活
Kafka角色與集群結構
-producer:生產者,負責發布消息
-consumer:消費者,負責讀取處理消息
-topic:消息的類別
-Broker:Kafka集群包含一個或多個服務器
-Kafka將元數據信息保存在Zookeeper中
-broker會在zookeeper注冊并保持相關的元數據更新
生產者消費模型
集群示例
Kafka集群架構
2)kafka安裝
1.安裝配置 kafka,并同步給其他主機
下載kafka阿帕奇·卡夫卡 (apache.org)
~]# wget https://archive.apache.org/dist/kafka/2.1.0/kafka_2.12-2.1.0.tgz ~]# yum install -y java-1.8.0-openjdk-devel ~]# tar -zxf kafka_2.12-2.1.0.tgz ~]# mv kafka_2.12-2.1.0 /usr/local/kafka ~]# for i in node-{0001..0003};dorsync -aXSH --delete /usr/local/kafka ${i}:/usr/local/done2.修改 node-0001,node-0002,node-0003 配置文件并啟動服務
## node-001配置 ~]# vim /usr/local/kafka/config/server.properties 21 broker.id=1 # 類似于mysql(1,255)任意數字 123 zookeeper.connect=node-0001:2181,node-0002:2181,node-0003:2181 # 配置kafka必須有一個zookeeper高可以的集群 # 啟動kafka ~]# /usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties ~]# jps 1400 Kafka## node-002配置 ~]# vim /usr/local/kafka/config/server.properties broker.id=2 # 注意 zookeeper.connect=node-0001:2181,node-0002:2181,node-0003:2181 ~]# /usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties ~]# jps 6226 Kafka## node-003配置 broker.id=3 # 注意 zookeeper.connect=node-0001:2181,node-0002:2181,node-0003:2181 ~]# /usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties ~]# jps 6226 Kafkakafka的原理
?
3.驗證(在不同機器上執行)
# 創建一個消息類別(此時在集群都可以看到) 1]# /usr/local/kafka/bin/kafka-topics.sh --create --partitions 1 --replication-factor 1 --zookeeper localhost:2181 --topic mymsg# 在2機器上使用消息隊列(生產者) 2]# /usr/local/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic mymsg# 在3開一個消費者 3]# /usr/local/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic mymsg# 在2(生產者)隨便寫入東西,消費者就可以看到5.Hadoop高可用
1)高可以概述
NameNode高可用
-想實現Hadoop高可用就必須實現NameNode的高可用,NameNode是HDFS的核心,HDFS又是Hadoop核心組件,NameNode在Hadoop集群中至關重要
-NameNode宕機,將導致集群不可用,如NameNode數據丟失將導致整個集群的數據丟失,而NameNode的數據的更新又比較頻繁,實現NameNode高可用勢在必行
官方提供了兩種方案
-HDFS with NFS
-HDFS with QJM
-
方案對比
-都能實現熱備
-都是一個Active和一個Standby
-都使用Zookeeper和ZKFC來實現高可用
-NFS方案:把數據存儲在共享存儲里,還需要考慮NFS的高可用設計
-QJM方案:不需要共享存儲,但需要讓每一個DN都知道兩個 NameNode的位置,并把塊信息和心跳包發送給Active和 Standby這NameNode
數據同步方案
-
NFS服務推薦
?QJM方案解析
-
-為HDFS配置兩個NameNode,一個處于Active狀態,另一個處于Standby狀態。ActiveNameNode對外提供服務,而 Standby則僅同步Active的狀態,以便能夠在它失敗時進行切換
-在任何時候只能有一個NameNode處于活動狀態,如果出現兩個ActiveNameNode,(這種情況通常稱為"split-brain'腦裂,三節點通訊阻斷)會導致集群操作混亂,可能會導致數據丟失或狀態異常
-
fsimage一致性
-NameNode更新很頻繁,為了保持主備數據的一致性,為了支持快速Failover,StandbyNameNode 持有集群中blocks的最新位置是非常必要的。為了達到這一目的,DataNodes上需要同時配置這兩個Namenode的地址,同時和它們都建立心跳連接,并把block位置發送給它們
-
-
fsedit同步(數據變更日志組件)
-為了讓StandbyNameNode與Active NameNode保持同步,這兩個NameNode都與一組稱為JNS的互相獨立的進程保持通信(Journal Nodes)。
-當ActiveNameNode更新了,它將記錄修改日志發送給Journal Node,StandbyNode將會從JournalNode 中讀取這些日志,將日志變更應用在自己的數據中,并持續關注它們對日志的
- 主備切換
-當Failover發生時,Standby首先讀取Journalnode中所有的日志,并將它應用到自己的數據中
-獲取JournalNode寫權限:對于Journalnode而言,任何時 SVIP候只允許一個NameNode作為writer:在Failover期間,原來的StandbyNameNode將會接管Active的所有職能,并負責向 Journal node寫入日志記錄
-提升自己為Active
高可用架構圖例
2)環境準備
準備主機
| hadoop2 | 192.168.1.56 | 2cpu, 2G內存 |
角色與配置
| hadoop1 | 192.168.1.50 | namenode, resourcemanager, ZKFC |
| hadoop2 | 192.168.1.56 | namenode, resourcemanager, ZKFC |
| node-0001 | 192.168.1.51 | datanode, nodemanager, zookeeper, journalnode |
| node-0002 | 192.168.1.52 | datanode, nodemanager, zookeeper, journalnode |
| node-0003 | 192.168.1.53 | datanode, nodemanager, zookeeper, journalnode |
環境初始化
hadoop1 上執行
~]# vim /etc/hosts 192.168.1.50 hadoop1 192.168.1.56 hadoop2 192.168.1.51 node-0001 192.168.1.52 node-0002 192.168.1.53 node-0003 ~]# rsync -aXSH --delete /root/.ssh hadoop2:/root/ ~]# for i in hadoop2 node-{0001..0003};dorsync -av /etc/hosts ${i}:/etc/donehadoop2 上執行
~]# yum install -y java-1.8.0-openjdk-devel ~]# vim /etc/ssh/ssh_config # 60行新添加StrictHostKeyChecking no3)集群配置文件
在 hadoop1 上完成以下文件的配置
1.配置 hadoop-env.sh
~]# vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh 25: export JAVA_HOME="java-1.8.0-openjdk安裝路徑" 33: export HADOOP_CONF_DIR="/usr/local/hadoop/etc/hadoop"2.配置 slaves
~]# vim /usr/local/hadoop/etc/hadoop/slaves node-0001 node-0002 node-00033.配置 core-site.xml
~]# vim /usr/local/hadoop/etc/hadoop/core-site.xml <configuration><property><name>fs.defaultFS</name><value>hdfs://mycluster</value> <!-- 指定文件系統,名字可以自定義,后續需要配置,(由于這里做了高可以,只有在創建之后才會知道具體的,這里就先定義一個組名(mycluster)任意,把hadoop1,2加入)--></property><property><name>hadoop.tmp.dir</name><value>/var/hadoop</value><!-- 數據存儲目錄--></property><property><name>ha.zookeeper.quorum</name><value>node-0001:2181,node-0002:2181,node-0003:2181</value><!-- 指定節點zookeeper--></property><property><name>hadoop.proxyuser.nfsuser.groups</name><value>*</value><!-- 指定nfs網絡共享--></property><property><name>hadoop.proxyuser.nfsuser.hosts</name><value>*</value><!-- 所有--></property> </configuration>4.配置 hdfs-site.xml(配置namnode高可用的主配置文件)
?
~]# vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml <configuration><!-- 定義組名(與core-site配置文件一致)--><property><name>dfs.nameservices</name><value>mycluster</value></property><!-- 設置兩個組名--><property><name>dfs.ha.namenodes.mycluster</name><value>nn1,nn2</value></property><!-- n1對應hadoop1--><property><name>dfs.namenode.rpc-address.mycluster.nn1</name><value>hadoop1:8020</value></property><!-- n2對應hadoop2--><property><name>dfs.namenode.rpc-address.mycluster.nn2</name><value>hadoop2:8020</value></property><!-- n1的訪問端口--><property><name>dfs.namenode.http-address.mycluster.nn1</name><value>hadoop1:50070</value></property><!-- n2的訪問端口 --><property><name>dfs.namenode.http-address.mycluster.nn2</name><value>hadoop2:50070</value></property><!-- 指定JNS要拉取的對象--><property><name>dfs.namenode.shared.edits.dir</name><value>qjournal://node-0001:8485;node-0002:8485;node-0003:8485/mycluster</value></property><!-- JNS存儲路徑--><property><name>dfs.journalnode.edits.dir</name><value>/var/hadoop/journal</value></property><!-- 定義JKFZ心跳hadoop用--><property><name>dfs.client.failover.proxy.provider.mycluster</name><value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value></property><!-- 故障切換(上面有做密鑰)--><property> <name>dfs.ha.fencing.methods</name><value>sshfence</value></property><!-- 私鑰的路徑 --><property><name>dfs.ha.fencing.ssh.private-key-files</name><value>/root/.ssh/id_rsa</value></property><!-- 打開自動切換--><property><name>dfs.ha.automatic-failover.enabled</name><value>true</value></property><!-- 節點副本數 --><property><name>dfs.replication</name><value>2</value></property><!-- 排除主機列表 --><property><name>dfs.hosts.exclude</name><value>/usr/local/hadoop/etc/hadoop/exclude</value></property> </configuration>?5.配置 mapred-site.xml(申明資源管理框架,這里用默認的,其他的需要開發來開發)
~]# vim /usr/local/hadoop/etc/hadoop/mapred-site.xml <configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property> </configuration>6.配置 yarn-site.xml(設置高可用)
~]# vim /usr/local/hadoop/etc/hadoop/yarn-site.xml <configuration><!--開啟HA高可用配置--><property><name>yarn.resourcemanager.ha.enabled</name><value>true</value></property><!--節點自動恢復--><property><name>yarn.resourcemanager.recovery.enabled</name><value>true</value></property><!--數據保存的介質--><property><name>yarn.resourcemanager.store.class</name><value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value></property><!--zookeeper集群地址--><property><name>yarn.resourcemanager.zk-address</name><value>node-0001:2181,node-0002:2181,node-0003:2181</value></property><!--yarn集群ID--><property><name>yarn.resourcemanager.cluster-id</name><value>yarn-ha</value></property><!--第一兩個角色--><property><name>yarn.resourcemanager.ha.rm-ids</name><value>rm1,rm2</value></property><!--定義rm1是hadoop1--><property><name>yarn.resourcemanager.hostname.rm1</name><value>hadoop1</value></property><!--定義rm2是hadoop2--><property><name>yarn.resourcemanager.hostname.rm2</name><value>hadoop2</value></property> <!-- Site specific YARN configuration properties --><!-- 申明計算框架 --><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property> </configuration>?4)官網查看書寫配置
文檔官網:Hadoop – Apache Hadoop 2.7.7
5)初始化啟動集群
1.重啟機器、在 node-0001,node-0002,node-0003 啟動 zookeeper(不重啟也可以,內存占用較大
1]# /usr/local/zookeeper/bin/zkServer.sh start2]# /usr/local/zookeeper/bin/zkServer.sh start3]# /usr/local/zookeeper/bin/zkServer.sh start~]# zkstats node-{0001..0003}node-0001 Mode: followernode-0002 Mode: leadernode-0003 Mode: follower2.清空實驗數據并同步配置文件(hadoop1 上執行)
~]# rm -rf /var/hadoop/* /usr/local/hadoop/logs ~]# for i in hadoop2 node-{0001..0003};dorsync -av /etc/hosts ${i}:/etc/rsync -aXSH --delete /var/hadoop ${i}:/var/rsync -aXSH --delete /usr/local/hadoop ${i}:/usr/local/done3.在 node-0001,node-0002,node-0003 啟動 journalnode 服務
1]# /usr/local/hadoop/sbin/hadoop-daemon.sh start journalnode ~]# jps 1037 JournalNode2]# /usr/local/hadoop/sbin/hadoop-daemon.sh start journalnode3]# /usr/local/hadoop/sbin/hadoop-daemon.sh start journalnode4.初始化(hadoop1 上執行)
# 格式化zkfs ~]# /usr/local/hadoop/bin/hdfs zkfc -formatZK # 格式namenode ~]# /usr/local/hadoop/bin/hdfs namenode -format # 格式datanode ~]# /usr/local/hadoop/bin/hdfs namenode -initializeSharedEdits # 同步hadoop2 ~]# rsync -aXSH --delete /var/hadoop/dfs hadoop2:/var/hadoop/5.停止在 node-0001,node-0002,node-0003 上的 journalnode 服務
1]# /usr/local/hadoop/sbin/hadoop-daemon.sh stop journalnode2]# /usr/local/hadoop/sbin/hadoop-daemon.sh stop journalnode3]# /usr/local/hadoop/sbin/hadoop-daemon.sh stop journalnode6.啟動集群
#-------------------- 下面這條命令在 hadoop1 上執行 ---------------------------------------- ~]# /usr/local/hadoop/sbin/start-all.sh #-------------------- 下面這條命令在 hadoop2 上執行(高可用) ---------------------------------------- ~]# /usr/local/hadoop/sbin/yarn-daemon.sh start resourcemanager5)驗證集群
## hadoop1查看狀態 ~]# /usr/local/hadoop/bin/hdfs haadmin -getServiceState nn1 active ~]# /usr/local/hadoop/bin/hdfs haadmin -getServiceState nn2# 查看rm1,2 ~]# /usr/local/hadoop/bin/yarn rmadmin -getServiceState rm1 ~]# /usr/local/hadoop/bin/yarn rmadmin -getServiceState rm2# 查看計算節點信息 ~]# /usr/local/hadoop/bin/hdfs dfsadmin -report ~]# /usr/local/hadoop/bin/yarn node -list使用高可用集群分析數據實驗
~]# cd /usr/local/hadoop ~]# ./bin/hadoop fs -mkdir /input ~]# ./bin/hadoop fs -put *.txt /input/ ~]# ./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /input /output ~]# ./bin/hadoop fs -cat /output/*## 把hadoop1關機,并在hadoop2可以查看到數據存在 ~]# ssh hadoop2 ~]# ./bin/hadoop fs -cat /output/*## 開機重新把hadoop1加入 ~]# cd /usr/local/hadoop ~]# ./sbin/hadoop-daemon.sh start namenode ~]# ./sbin/yarn-daemon.sh start resourcemanager ~]# ./sbin/hadoop-daemon.sh start ZKFC # 驗證 ~]# /usr/local/hadoop/bin/hdfs haadmin -getServiceState nn1 ~]# /usr/local/hadoop/bin/yarn rmadmin -getServiceState rm1總結
以上是生活随笔為你收集整理的Hadoop集群高可用及zookeeper+kafka组件搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: k8s证书更新
- 下一篇: pymysql.err.Operatio