角色java
觀察者模式: leader: 領導者負責進行投票的發起及決議, 更新狀態 學習者: follower: 接受客戶端請求併發揮客戶端返回結果,參與投票 observer: 接受請求,轉發給leader,不參與投票,只同步leader. 客戶端: 發起請求 觀察者模式的應用: 軟件皮膚, 編輯工具設置
安裝node
僞分佈模式web
1)安裝ZooKeeper (再次注意權限) $ tar -zxf /opt/software/zookeeper-3.4.5.tar.gz -C /opt/modules/ 2)新建一個Zookeeper的data目錄 $ mkdir zkData --//能夠不用手動建立,啓動自動生成 3)修改配置文件${ZOOKEEPER_HOME}/conf (注意: 配置文件爲模板,需拷貝重名爲zoo.cfg) $cd /opt/modules/zookeeper-3.4.5/ ##切換目錄到zookeeper-3.4.5 $ cp conf/zoo_sample.cfg conf/zoo.cfg ##拷貝 $ vi conf/zoo.cfg ##修改12行,設置如下: dataDir=/opt/modules/zookeeper-3.4.5/zkData 4)啓動zookeeper $bin/zkServer.sh start $ jps #查看java進程以下 2088 QuorumPeerMain 5)查看zookeeper的狀態 $bin/zkServer.sh status #信息以下 JMX enabled by default Using config: /opt/modules/zookeeper-3.4.5/bin/../conf/zoo.cfg Mode: standalone #單機模式 6)一些命令的認識 $ bin/zkCli.sh #進入zookper help #查看命令 quit #退出 create #建立 -e臨時znode -s 自動編號 get path #查看信息 ls path #查看指定目錄的列表 rmr path #刪除 ls / #查看根目錄 create -e /myapp msg #建立目錄 get /myapp #查看myapp建立信息 ls / watch # 添加關注事件 rmr /myapp #刪除觸發關注事件 quit
徹底分佈模式shell
1.安裝JDK(3臺PC都要安裝JDK) 2.安裝徹底分佈式集羣 1)安裝zk(注意權限) $ tar -zxvf /opt/software/zookeeper-3.4.5.tar.gz -C /opt/modules/ 2)配置zoo.cfg文件 $ cd /opt/modules/zookeeper-3.4.5/ $ cp conf/zoo_sample.cfg conf/zoo.cfg $ vi conf/zoo.cfg #修改添加如下內容 #修改 dataDir=/opt/modules/zookeeper-3.4.5/zkData #15行添加 server.1=centos01.ibeifeng.com:2888:3888 server.2=centos02.ibeifeng.com:2888:3888 server.3=centos03.ibeifeng.com:2888:3888 3)建立zkData目錄,在zkData目錄目錄下建立myid文件,分發 $ mkdir zkData $ touch zkData/myid $ cd /opt/modules/ #切到modules下 從pc1分發到pc2, pc3 $ scp -r zookeeper-3.4.5/ centos02.ibeifeng.com:/opt/modules/ $ scp -r zookeeper-3.4.5/ centos03.ibeifeng.com:/opt/modules/ 4) 修改pc1, pc2, pc3 的myid文件 $ cd /opt/modules/zookeeper-3.4.5/ $ vi zkData/myid #根據conf/zoo.zfg中綁定的server.n對應 pc1的zkData/myid內容是1 pc2的zkData/myid內容是2 pc3的zkData/myid內容是3 5)啓動3臺的zookeeper $ bin/zkServer.sh start 6)檢查進程 $ jps 3050 QuorumPeerMain 3111 Jps 8)檢查並覈對狀態3臺的狀態 $ bin/zkServer.sh status Zookeeper shell命令 bin/zkCli.sh -server 主機名:2181 或者 bin/zkCli.sh
I) 文件系統(數據結構) Znode 1.表明zookeeper文件系統中的一個目錄, 2.表明客戶端(如:Namenode) |---/ |---app |---app1 |---app2 |---app2 動物 -> hadoop 中的節點 Namende II) Watch事件 1.NameNode啓動,而後向Zookeeper,觸發註冊事件,同時會建立一個惟一的目錄 2.經過心跳信息,來確認節點的狀態(存活或者宕機) 3.若是宕機,長時間未收到心跳,觸發節點丟失事件,刪除這個目錄 III)投票(偶數可能僵持) leader的候選人必須獲取到超過半數的選票 n+1 zookeeper集羣中存活的節點數據必須過半數
一)安裝hadoop 此步驟要求,ip映射,主機名,jdk安裝配置,hadoop解壓 若是分佈式已經搭建好,需對三臺進行操做. 注意刪除data,logs目錄!!! 注意修改搭建前,中止相關進程 刪除/tmp/*.pid文件 (注意不要全刪了!!!!,是刪除/tmp/的以pid結尾的) $ rm /tmp/*.pid 免密登陸 能夠按照下面的步驟修改便可 二)配置環境文件 檢查 hadoop-env.sh mapred-env.sh yarn-env.sh 配置 export JAVA_HOME=/opt/modules/jdk1.7.0_67 三)配置hdfs文件 1.========core-site.xml======== <!--NameNode HA的邏輯訪問名稱--> <property> <name>fs.defaultFS</name> <value>hdfs://ns1</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/opt/modules/hadoop-2.5.0/data</value> </property> 2.=======hdfs-site.xml============= <!-- 分佈式副本數設置爲3 --> <property> <name>dfs.replication</name> <value>3</value> </property> <!-- 關閉權限檢查用戶或用戶組 --> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property> <!-- 指定hdfs的nameservice爲ns1,須要和core-site.xml中的保持一致 --> <property> <name>dfs.nameservices</name> <value>ns1</value> </property> <!-- ns1下面有兩個NameNode,分別是nn1,nn2 --> <property> <name>dfs.ha.namenodes.ns1</name> <value>nn1,nn2</value> </property> <!-- nn1的RPC通訊地址 --> <property> <name>dfs.namenode.rpc-address.ns1.nn1</name> <value>centos01.ibeifeng.com:8020</value> </property> <!-- nn1的http通訊地址 --> <property> <name>dfs.namenode.http-address.ns1.nn1</name> <value>centos01.ibeifeng.com:50070</value> </property> <!-- nn2的RPC通訊地址 --> <property> <name>dfs.namenode.rpc-address.ns1.nn2</name> <value>centos02.ibeifeng.com:8020</value> </property> <!-- nn2的http通訊地址 --> <property> <name>dfs.namenode.http-address.ns1.nn2</name> <value>centos02.ibeifeng.com:50070</value> </property> <!-- 指定NameNode的edit文件在哪些JournalNode上存放 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://centos01.ibeifeng.com:8485;centos02.ibeifeng.com:8485;centos03.ibeifeng.com:8485/ns1</value> </property> <!-- 指定JournalNode在本地磁盤存放數據的位置 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/opt/modules/hadoop-2.5.0/journal</value> </property> <!-- 當Active出問題後,standby切換成Active,此時,原Active又沒有中止服務,這種狀況下會被強制殺死進程。--> <property> <name>dfs.ha.fencing.methods</name> <value> sshfence shell(/bin/true) </value> </property> <!-- 使用sshfence隔離機制時須要ssh免登錄 /home/hadoop爲個人用戶家目錄,個人是hadoop, 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> 3. ==========配置 slaves start========== centos01.ibeifeng.com centos02.ibeifeng.com centos03.ibeifeng.com 4. ============向第二臺和第三臺分發數據=============== $ cd /opt/modules/hadoop-2.5.0/ 其餘兩臺機器安裝了hadoop,直接覆蓋對應的配置文件 (若是沒有其餘的服務器沒有hadoop,能夠把hadoop-2.5.0分發到其餘兩個服務器上) $ scp etc/hadoop/core-site.xml etc/hadoop/hdfs-site.xml centos02.ibeifeng.com:/opt/modules/hadoop-2.5.0/etc/hadoop/ $ scp etc/hadoop/core-site.xml etc/hadoop/hdfs-site.xml centos03.ibeifeng.com:/opt/modules/hadoop-2.5.0/etc/hadoop/ 使用命令檢查是否分發成功在對應的pc上 $ cat etc/hadoop/hdfs-site.xml $ cat etc/hadoop/core-site.xml 切換到 $ cd /opt/modules/zookeeper-3.4.5/ 四) 啓動相關進程 1. ============啓動zookeeper相關=========== $ bin/zkServer.sh start $ jps #查看進程 3129 QuorumPeerMain $ bin/zkServer.sh status # 查看狀態 JMX enabled by default Using config: /opt/modules/zookeeper-3.4.5/bin/../conf/zoo.cfg Mode: leader #或者是follower 2. ============啓動HDFS HA start================= ## 注意:每個步驟都嚴格按照如下步驟執行 $ cd /opt/modules/hadoop-2.5.0/ #切換目錄 1. 啓動journalnode $ sbin/hadoop-daemon.sh start journalnode #在三臺分別啓動, 日誌同步的journalnode進程 $ jps #三臺服務器顯示 3422 Jps 3281 QuorumPeerMain 3376 JournalNode 2. 格式化namenode 在第一臺上操做!!!!! 切記 $ bin/hdfs namenode -format 出現提示:successfully formatted 3. 在第一臺(centos01)上啓動namenode $ sbin/hadoop-daemon.sh start namenode #jps 查看是否啓動 4. 切到第二臺(centos02.ibeifeng.com)服務器,讓另外一個namenode 拷貝元數據 $ bin/hdfs namenode -bootstrapStandby $ sbin/hadoop-daemon.sh start namenode #啓動namenode 能夠在web頁面觀察,如今只有namenode啓動了, 都是standby狀態 http://centos01.ibeifeng.com:50070 http://centos02.ibeifeng.com:50070 5. 使用如下命令將一個namenode active $ bin/hdfs haadmin -transitionToActive nn2 #將第二個namenode做爲active http://centos02.ibeifeng.com:50070 發現centos2服務器的namenode 時active狀態
開啓故障自動轉移apache
先中止HDFS進程,在機器centos01上執行 $ sbin/stop-dfs.sh 1.配置故障轉移 ( 追加) 1)=====core-site.xml <!-- 向哪一個zookeeper註冊 --> <property> <name>ha.zookeeper.quorum</name> <value>centos01.ibeifeng.com:2181,centos02.ibeifeng.com:2181,centos03.ibeifeng.com:2181</value> </property> 2)====hdfs-site.xml <!-- 開啓ha自動故障轉移 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <property> <name>dfs.client.failover.proxy.provider.ns1</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> 2.分發配置文件 $ scp etc/hadoop/core-site.xml etc/hadoop/hdfs-site.xml centos02.ibeifeng.com:/opt/modules/hadoop-2.5.0/etc/hadoop/ $ scp etc/hadoop/core-site.xml etc/hadoop/hdfs-site.xml centos03.ibeifeng.com:/opt/modules/hadoop-2.5.0/etc/hadoop/ 3.啓動故障轉移服務 1)首先中止hdfs和zk $ sbin/stop-dfs.sh ##關閉zk(3臺服務器) $ bin/zkServer.sh stop 重啓##啓動zk(3臺服務器) $ bin/zkServer.sh start 2)初始化zkfc[PC1也就是nn1] 在第一臺(cd /opt/modules/hadoop-2.5.0/ ) $ bin/hdfs zkfc -formatZK ##初始化ZKFC 17/12/22 04:50:55 INFO ha.ActiveStandbyElector: Successfully created /hadoop-ha/ns1 in ZK. 17/12/22 04:50:55 INFO zookeeper.ZooKeeper: Session: 0x2607abd3bee0000 closed 17/12/22 04:50:55 INFO zookeeper.ClientCnxn: EventThread shut down 3) 啓動hdfs 在centos01啓動便可 $ sbin/start-dfs.sh ##啓動hdfs $ bin/hdfs haadmin -getServiceState nn1 #查看nn1狀態 $ bin/hdfs haadmin -getServiceState nn2 #查看nn2狀態 4. 查看三臺進程,確認開啓 $jps [centos01] [hadoop@centos01 hadoop-2.5.0]$ jps 3281 QuorumPeerMain 4793 JournalNode 4610 DataNode 5137 Jps 4518 NameNode 4974 DFSZKFailoverController [centos02] [hadoop@centos02 hadoop-2.5.0]$ jps 3129 QuorumPeerMain 4270 Jps 4176 DFSZKFailoverController 3892 NameNode 3955 DataNode 4046 JournalNode [centos03] [hadoop@centos03 hadoop-2.5.0]$ jps 3630 Jps 3553 JournalNode 3022 QuorumPeerMain 3465 DataNode 5. 模擬active namenode 故障 $ kill -9 4518 #殺死active namenode standby namenode 切爲active $ sbin/hadoop-daemon.sh start namenode #於該主機再次namenode ,爲standby
集羣規劃 PC01 PC02 PC03 NameNode NameNode ZKFC ZKFC ResourceManager ResourceManager DataNode DataNode DataNode JournalNode JournalNode JournalNode NodeManager NodeManager NodeManager ZooKeeper ZooKeeper ZooKeeper 先中止hdfs進程 $ sbin/hadoop-daemon.sh start namenode 1) 修改配置文件 =====yarn-site.xml (覆蓋) <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>86400</value> </property> <!--啓用resourcemanager ha--> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <property> <name>yarn.resourcemanager.cluster-id</name> <value>rmcluster</value> </property> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>centos02.ibeifeng.com</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>centos03.ibeifeng.com</value> </property> <!--指定zookeeper集羣的地址--> <property> <name>yarn.resourcemanager.zk-address</name> <value>centos01.ibeifeng.com:2181,centos02.ibeifeng.com:2181,centos03.ibeifeng.com:2181</value> </property> <!--啓用自動恢復--> <property> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value> </property> <!--指定resourcemanager的狀態信息存儲在zookeeper集羣--> <property> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> </property> 2) 分發配置文件 將yarn-site.xml分發到其餘兩臺 $ scp etc/hadoop/yarn-site.xml centos02.ibeifeng.com:/opt/modules/hadoop-2.5.0/etc/hadoop/ $ scp etc/hadoop/yarn-site.xml centos03.ibeifeng.com:/opt/modules/hadoop-2.5.0/etc/hadoop/ 3) 啓動ResourceManagere 先在centos01啓動hdfs $ sbin/start-dfs.sh 在rm1(centos02)上: $ sbin/start-yarn.sh 在rm2(centos03)上手動啓動: $ sbin/yarn-daemon.sh start resourcemanager 4) 檢查進程是否啓動 $ jps [hadoop@centos01 hadoop-2.5.0]$ jps 6737 DFSZKFailoverController 6559 JournalNode 3281 QuorumPeerMain 6375 DataNode 6975 Jps 6277 NameNode 6854 NodeManager [hadoop@centos02 hadoop-2.5.0]$ jps 5471 DataNode 4917 ResourceManager 5403 NameNode 3129 QuorumPeerMain 6020 Jps 5866 NodeManager 5687 DFSZKFailoverController 5564 JournalNode [hadoop@centos03 hadoop-2.5.0]$ jps 3022 QuorumPeerMain 4373 NodeManager 4174 DataNode 4577 Jps 4263 JournalNode 4518 ResourceManager 5) 查看serverid爲rm1的resourcemanager節點的狀態 $ bin/yarn rmadmin -getServiceState rm1 或網頁查看 http://centos02.ibeifeng.com:8088/cluster http://centos03.ibeifeng.com:8088/cluster 6) 測試ResourceManager HA kill -9 4917 而後查看web界面的訪問 centos03變爲active 再次啓動centos02的resourcemanager 狀態爲standby