您好,登錄后才能下訂單哦!
本篇內容介紹了“Hadoop高可用集群如何搭建”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
共5個節點,主機名分別是hadoop101、hadoop102、hadoop103、hadoop104、hadoop105
初始啟動集群,hadoop101上運行active namenode即主namenode;hadoop102上運行standby namenode即從namenode
每個節點運行的進程如下表
機器名 | 運行進程 |
---|---|
hadoop101 | NameNode/zkfc/Zookeeper/Journalnode/DataNode/NodeManager |
hadoop102 | NameNode/zkfc/Zookeeper/Journalnode/DataNode/NodeManager |
hadoop103 | Zookeeper/Journalnode/DataNode/NodeManager |
hadoop104 | ResourceManager |
hadoop105 | ResourceManager |
準備5臺虛擬機,在做五節點hadoop-2.7.3 HA安裝之前,要求完成每臺虛擬機的環境準備。
舉一反三:參考安裝3節點hadoop-2.7.3集群時,在解壓hadoop-2.7.3.tar.gz壓縮包之前的操作;李老師之前已經講過,不再贅述)
mac安裝VMWare虛擬化軟件
VMWare下安裝CenoOS7 虛擬機關閉防火墻 禁用selinux 配置虛擬網卡 配置虛擬機網絡 安裝JDK 配置時間同步 修改主機名 修改ip地址 修改/etc/hosts 各節點免密鑰登陸 重啟虛擬機
hadoop101、hadoop102、hadoop103上安裝zookeeper集群
注意:
此文檔使用<font color=red>普通用戶</font>操作,如bruce; hadoop安裝到用戶主目錄下,如/home/bruce <font color=red>請根據自己的實際情況修改</font>
在node-01上解壓hadoop壓縮包到用戶主目錄(**~**表示用戶主目錄/home/bruce)
[daniel@hadoop101software]$ tar -zxvf hadoop-2.7.3.tar.gz -C/opt/moudle/
hadoop2.x的配置文件全部在$HADOOP_HOME/etc/hadoop下
[daniel@hadoop101 moudle]$ cd hadoop-2.7.3/etc/hadoop/
修改hadoop-env.sh;保存退出
export JAVA_HOME=/usr/java/jdk1.8.0_211-amd64
注意:JAVA_HOME值修改為<font color=red>自己jdk的實際目錄</font>
注意: 情況一:值/home/bruce/hadoop-2.7.3/tmp根據實際情況修改 情況二:值node-01:2181,node-02:2181,node-03:2181根據實際情況修改,修改成安裝了zookeeper的虛擬機的主機名
<configuration> <!-- 指定hdfs的nameservice為ns1 --> <property> <name>fs.defaultFS</name> <value>hdfs://ns1</value> </property> <!-- 指定hadoop臨時目錄 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/moudle/hadoop-2.7.3/tmp</value> </property> <!-- 指定zookeeper地址 --> <property> <name>ha.zookeeper.quorum</name> <value>hadoop101:2181,hadoop102:2181,hadoop103:2181</value> </property> </configuration>
注意:
情況一:屬性值qjournal://node-01:8485;node-02:8485;node-03:8485/ns1中的主機名,修改成實際安裝zookeeper的虛擬機的主機名 情況二:屬性值/home/bruce/hadoop-2.7.3/journal中”/home/bruce/hadoop-2.7.3”替換成實際hadoop文件夾的路徑 情況三:屬性值/home/bruce/.ssh/id_rsa中/home/bruce根據實際情況替換
<configuration> <!--指定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>hadoop101:9000</value> </property> <!-- nn1的http通信地址 --> <property> <name>dfs.namenode.http-address.ns1.nn1</name> <value>hadoop101:50070</value> </property> <!-- nn2的RPC通信地址 --> <property> <name>dfs.namenode.rpc-address.ns1.nn2</name> <value>hadoop102:9000</value> </property> <!-- nn2的http通信地址 --> <property> <name>dfs.namenode.http-address.ns1.nn2</name> <value>hadoop102:50070</value> </property> <!-- 指定NameNode的元數據在JournalNode上的存放位置 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://hadoop101:8485;hadoop102:8485;hadoop103:8485/ns1</value> </property> <!-- 指定JournalNode在本地磁盤存放數據的位置 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/opt/moudle/hadoop-2.7.3/journal</value> </property> <!-- 開啟NameNode失敗自動切換 --> <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> <!-- 配置隔離機制方法,多個機制用換行分割,即每個機制暫用一行--> <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/daniel/.ssh/id_rsa</value> </property> <!-- 配置sshfence隔離機制超時時間 --> <property> <name>dfs.ha.fencing.ssh.connect-timeout</name> <value>30000</value> </property> </configuration>
重命名文件
[daniel@hadoop101 hadoop]$ mv mapred-site.xml.template mapred-site.xml [daniel@hadoop101 hadoop]$ vim mapred-site.xml
修改mapred-site.xml
<configuration> <!-- 指定mr框架為yarn方式 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
注意:
情況一:屬性yarn.resourcemanager.hostname.rm1的值node-04根據實際情況替換 情況二:屬性yarn.resourcemanager.hostname.rm2的值node-05根據實際情況替換 情況三:屬性值node-01:2181,node-02:2181,node-03:2181根據實際情況替換;替換成實際安裝zookeeper的虛擬機的主機名
<configuration> <!-- 開啟RM高可靠 --> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <!-- 指定RM的cluster id為yrc,意為yarn cluster --> <property> <name>yarn.resourcemanager.cluster-id</name> <value>yrc</value> </property> <!-- 指定RM的名字 --> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <!-- 分別指定RM的地址 --> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>hadoop104</value> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>hadoop105</value> </property> <!-- 指定zk集群地址 --> <property> <name>yarn.resourcemanager.zk-address</name> <value>hadoop101:2181,hadoop102:2181,hadoop103:2181</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
node-01、node-02、node-03上運行了datanode、nodemanager,所以修改slaves內容替換為:
node-01 node-02 node-03
說明:~表示用戶主目錄
scp -r ~/hadoop-2.7.3/ node-02:~ scp -r ~/hadoop-2.7.3/ node-03:~ scp -r ~/hadoop-2.7.3/ node-04:~ scp -r ~/hadoop-2.7.3/ node-05:~
node-01到node-05五個節點,<font color='red'>都配置環境變量</font>
#將hadoop添加到環境變量中 vim ~/.bash_profile
添加內容如下(注意:若HADOOP_HOME已經存在,則修改):
export HADOOP_HOME=/home/bruce/hadoop-2.7.3/ export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
編譯文件,使新增環境變量生效
source ~/.bash_profile
**注意:**嚴格按照下面的步驟 先檢查各臺hadoop環境變量是否設置好
注意:根據zookeeper實際安裝情況,啟動zookeeper
分別在node-01、node-02、node-03上啟動zookeeper
[daniel@hadoop101 zookeeper-3.4.2]$ bin/zkServer.sh start [daniel@hadoop102 zookeeper-3.4.2]$ bin/zkServer.sh start [daniel@hadoop103 zookeeper-3.4.2]$ bin/zkServer.sh start
[daniel@hadoop101 zookeeper-3.4.2]$ bin/zkServer.sh status JMX enabled by default Using config: /opt/moudle/zookeeper-3.4.2/bin/../conf/zoo.cfg Mode: leader
分別在node-01、node-02、node-03上執行
[daniel@hadoop101 hadoop-2.7.3]$ hadoop-daemon.sh start journalnode [daniel@hadoop102 zookeeper-3.4.2]$ hadoop-daemon.sh start journalnode [daniel@hadoop103 zookeeper-3.4.2]$ hadoop-daemon.sh start journalnode
#根據集群規劃node-01、node-02上運行namenode;所以<font color='red'>只在主namenode節點</font>即node-01上執行命令:
[daniel@hadoop101 hadoop-2.7.3]$ hdfs namenode -format
格式化后會根據core-site.xml中的hadoop.tmp.dir屬性值/home/bruce/hadoop-2.7.3/tmp,并生成此文件夾
將/home/bruce/hadoop-2.7.3/tmp拷貝到node-02的/home/bruce/hadoop-2.7.3中
[daniel@hadoop101 hadoop-2.7.3]$ scp -r tmp/daniel@hadoop102:/opt/moudle/hadoop-2.7.3/
在node-01上執行即可
[daniel@hadoop101 hadoop-2.7.3]$ hdfs zkfc -formatZK
只在<font color='red'>主namenode</font>節點node-01上執行
[daniel@hadoop101 hadoop-2.7.3]$ sbin/start-dfs.sh
注意:只在<font color='red'>主resourcemanager</font>即node-04上執行start-yarn.sh
把namenode和resourcemanager部署在不同節點,是因為性能問題,因為他們都要占用大量資源 <font color='red'>坑</font>:在node-04上啟動yarn之前,先依次從node-04 ssh遠程連接到node-01、node-02、node-03、node-04、node-05;因為初次ssh時,需要交互,輸入yes,回車
[daniel@hadoop104 hadoop-2.7.3]$ sbin/start-yarn.sh
在從resourcemanager即node-05上啟動rm
[daniel@hadoop105 hadoop-2.7.3]$ yarn-daemon.sh start resourcemanager
node-01、node-02一主一備
http://node-01:50070
http://node-02:50070
在主namenode節點,運行
[daniel@hadoop102 hadoop-2.7.3]$ hadoop-daemon.sh stop namenode
訪問之前為"備namenode"的WEB UI;發現狀態更新為active
啟動剛才手動停掉的namenode
hadoop-daemon.sh start namenode
訪問它的WEB UI,發現狀態更新為standby
node-04、node-05主備切換
node-04瀏覽器訪問
[http://hadoop104:8088/cluster/cluster](http://hadoop104:8088/cluster/cluster)
node-05瀏覽器訪問
[http://hadoop105:8088/cluster/cluster](http://hadoop105:8088/cluster/cluster)
在主resourcemanager節點,運行
[daniel@hadoop105 hadoop-2.7.3]$ yarn-daemon.sh stop resourcemanager
訪問之前為"備resourcemanager"的WEB UI;發現狀態更新為active
啟動剛才手動停掉的resourcemanager
[daniel@hadoop105 hadoop-2.7.3]$ yarn-daemon.sh start resourcemanager
訪問它的WEB UI,發現狀態更新為standby
運行一下hadoop示例中的WordCount程序:
hadoop fs -put /home/bruce/hadoop-2.7.3/LICENSE.txt / hadoop jar hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /LICENSE.txt /w0727
正確指令執行順序如下
主namenode上運行
stop-dfs.sh
主resoucemanager上運行
stop-yarn.sh
從resoucemanager上運行
yarn-daemon.sh stop resourcemanager
關閉zookeeper集群;每個zk服務器運行
zkServer.sh stop
單獨啟動namenode
hadoop-daemon.sh start namenode
單獨啟動datanode
hadoop-daemon.sh start datanode
單獨啟動journalnode
hadoop-daemon.sh start journalnode
啟動zookeeper
./zkServer.sh start
啟動hdfs
start-dfs.sh
啟動yarn
start-yarn.sh
單獨啟動resorucemanager
yarn-daemon.sh start resouremanger
“Hadoop高可用集群如何搭建”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。