Hadoop集群搭建(五:Hadoop HA集群模式的安装)
| 實驗 目的 要求 | 目的: 1、Hadoop的高可用完全分布模式的安裝和驗證 要求:
? | ||||||||||||||||||
| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 實 驗 環 境 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | ?
? 軟件版本: ??????? 選用Hadoop的2.7.3版本,軟件包名Hadoop-2.7.3.tar.gz ? 集群規劃: ????? ????* Hadoop的高可用完全分布模式中有HDFS的主節點和數據節點、MapReduce的主節點和任務節點、數據同步通信節點、主節點切換控制節點總共6類服務節點,其中HDFS的主節點、MapReduce的主節點、主節點切換控制節點共用相同主機Cluster-01和Cluster-02,HDFS的數據節點、MapReduce的任務節點共用相同主機Cluster-03、Cluster-04,Cluster-05,數據同步通信節點可以使用集群中的任意主機,但因為其存放的是元數據備份,所以一般不與主節點使用相同主機。 *高可用完全分布模式中需要滿足主節點有備用的基本要求, 所以需要兩臺或以上的主機作為主節點,而完全分布模式中需要滿足數據有備份和數據處理能夠分布并行的基本要求,所以需要兩臺或以上的主機作為HDFS的數據節點和MapReduce的任務節點,同時數據同步通信節點工作原理同Zookeeper類似,需要三臺或以上的奇數臺主機,具體規劃如下: ?
? |
?
實驗內容
步驟一:Hadoop基本安裝配置
注:1、該項的所有操作步驟使用專門用于集群的用戶admin進行;
- 此項只在一臺主機操作,然后在下一步驟進行同步安裝與配置;
?
1、創建用于存放Hadoop相關文件的目錄,并進入該目錄,將軟件包解壓;
命令:
???? $mkdir ~/hadoop
???? $cd ~/hadoop
???? $tar -xzf ~/setups/Hadoop-2.7.3.tar.gz
?
2、配置Hadoop相關環境變量;
命令:
???? $vi ~/.bash_prolife
3、使新配置的環境變量立即生效,查看新添加和修改的環境變量是否設置成功,以及環境變量是否正確,驗證Hadoop的安裝配置是否成功;
命令:
???? $source ~/.bash_profile
???? $echo $HADOOP_HOME
???? $echo $PATH
???? $hadoop version
?
步驟二:Zookeeper完全分布模式配置;
注:該項的所有操作步驟使用專門用于集群的用戶admin進行;
?
1、進入Hadoop相關文件的目錄,分別創建Hadoop的臨時文件目錄“tmp”、HDFS的元數據文件目錄“name”、HDFS的數據文件目錄“data”、Journal的邏輯狀態數據目錄“journal”;
2、進入Hadoop的配置文件所在目錄,對配置文件進行修改,找到配置項“JAVA_HOME”所在行,將其改為以下內容:
Export
JAVA_HOME=/home/admin/java/jdk1.8.0_131
命令:
???? $cd ~/Hadoop/Hadoop-2.7.3/etc/Hadoop
???? $vi Hadoop-env.sh
3、對配置文件core-site.xml進行修改,找到標簽“<configuration>”所在位置,在其中添加如下紅色部分的內容:
<configuration><property><name>fs.defaultFS</name><value>hdfs://hadoop-ha</value></property><property><name>hadoop.tmp.dir</name><value>/home/admin/hadoop/tmp</value></property><property><name>ha.zookeeper.quorum</name><value>Cluster-01:2181,Cluster-02:2181,Cluster-03:2181,Cluster-04:2181,Cluster-05:2181</value></property></configuration>
4、對配置文件hdfs-site.xml進行修改,找到標簽“<configuration>”所在位置,在其中添加如下紅色部分的內容:
<configuration><property><name>dfs.nameservices</name><value>hadoop-ha</value></property><property><name>dfs.ha.namenodes.hadoop-ha</name><value>name-1,name-2</value></property><property><name>dfs.namenode.rpc-address.hadoop-ha.name-1</name><value>Cluster-01:9000</value></property><property><name>dfs.namenode.http-address.hadoop-ha.name-1</name><value>Cluster-01:50070</value></property><property><name>dfs.namenode.rpc-address.hadoop-ha.name-2</name><value>Cluster-02:9000</value></property><property><name>dfs.namenode.http-address.hadoop-ha.name-2</name><value>Cluster-02:50070</value></property><property><name>dfs.namenode.shared.edits.dir</name><value>qjournal://Cluster-03:8485;Cluster-04:8485;Cluster-05:8485/hadoop-ha</value></property><property><name>dfs.journalnode.edits.dir</name><value>/home/admin/hadoop/journal</value></property><property><name>dfs.ha.automatic-failover.enabled</name><value>true</value></property><property><name>dfs.client.failover.proxy.provider.hadoop-ha</name><value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value></property><property><name>dfs.ha.fencing.methods</name><value>sshfenceshell(/bin/true)</value></property><property><name>dfs.ha.fencing.ssh.private-key-files</name><value>/home/admin/.ssh/id_rsa</value></property><property><name>dfs.ha.fencing.ssh.connect-timeout</name><value>30000</value></property><property><name>dfs.namenode.name.dir</name><value>/home/admin/hadoop/name</value></property><property><name>dfs.datanode.data.dir</name><value>/home/admin/hadoop/data</value></property><property><name>dfs.replication</name><value>3</value></property></configuration>
????
5、由模板文件拷貝生成配置文件“mapred-site.xml”
命令:
???? $cp mapred-site.xml.template mapred-site.xml
???? $vi mapred-site.xml
找到標簽“<configuration>”所在位置,在其中添加如下紅色部分的內容:
<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property></configuration>
6、對配置文件yarn-site.xml進行修改,找到標簽“<configuration>”所在位置,在其中添加如下紅色部分的內容:
<configuration><!-- Site specific YARN congfiguration proerties --><property><name>yarn.resourcemanager.ha.enabled</name><value>true</value></property><property><name>yarn.resourcemanager.cluster-id</name><value>yarn-ha</value></property><property><name>yarn.resourcemanager.ha.rm-ids</name><value>resource-1,resource-2</value></property><property><name>yarn.resourcemanager.hostname.resource-1</name><value>Cluster-01</value></property><property><name>yarn.resourcemanager.hostname.resource-2</name><value>Cluster-02</value></property><property><name>yarn.resourcemanager.zk-address</name><value>Cluster-01:2181,Cluster-02:2181,Cluster-03:2181,Cluster-04:2181,Cluster-05:2181</value></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property></configuration>
?
???
???
7、對配置文件yarn-env.sh進行修改,找到配置項“JAVA_HOME”所在行,將其改為以下內容:
Export
JAVA_HOME=/home/admin/java/jdk1.8.0_131
8、對配置文件slaves進行修改,刪除文件中原有的所有內容,然后添加集群中所有數據節點的主機名,每行一個主機的主機名,配置格式如下:
Cluster-03
Cluster-04
Cluster-05
???
步驟三:同步安裝和配置;
注:該項的所有操作不受使用準們用于集群的用戶admin進行。
1、將“Hadoop”目錄和“.bash_profile”文件發給集群中所有主機,發送目標用戶為集群專用用戶admin,發送目標路徑為“/home/admin”,即集群專用用戶admin的家目錄。
2、使新配置的環境變量立即生效,查看新添加和修改的環境變量是否設置成功,以及環境變量是否正確,驗證Hadoop的安裝配置是否成功;
命令:
???? $source ~/.bash_profile
???? $echo $HADOOP_HOME
???? $echo $PATH
???? $hadoop version
步驟四:Hadoop高可用完全分布模式格式化和啟動;
注:注意本節格式化內容不可多次執行
注意格式化步驟
該項的所有操作步驟使用專門用于集群的用戶admin進行;
?
1、在所有同步通信節點的主機執行,啟動同步通信服務,然后使用命令“jps”查看java進程信息,若有名為“journalNode”的進程,則表示同步通信節點啟動成功。
命令:
???? $hadoop-deamon.sh start journalnode
?
2、在主節點使用此命令,對HDFS進行格式化,若格式化過程中沒有報錯則表示格式化成功;
命令:
???? $hadoop namenode -format
3、格式化完成后將“Hadoop”目錄下的“name”目錄發給集群中所有備用主節點的主機,發送目標用戶為集群專用用戶admin,即當前與登錄用戶同名用戶,發送目標路徑為“/home/admin/hadoop”,即集群專用用戶admin家目錄下的Hadoop相關文件的目錄;
命令:
???? $scp -r ~/Hadoop/name admin@Cluster-02:/home/admin/Hadoop
4、在集群中所有主機使用“zkServer.sh status”命令,查看該節點Zookeeper服務當前的狀態,若集群中只有一個“leader”節點,其余的均為“follower”節點,則集群的工作狀態正常;
如果Zookeeper未啟動,則在集群中所有主機使用“zkServer.sh start”命令,啟動Zookeeper服務的腳本;
5、在主節點使用“hdfs zkfc -formatZK”命令,對Hadoop集群在Zookeeper中的主節點切換控制信息進行格式化。
6、在所有同步通信節點的主機,使用“Hadoop-daemon.sh stop journalnode”命令,關閉同步通信服務。
7、在主節點使用“start-all.sh”命令,啟動Hadoop集群;
8、在所有備用主節點的主機,使用“yarn-deamon.sh start resourcemanager”命令,啟動yarn主節點服務;
9、在主節點使用命令“jps”查看Java進程信息,若有名為“NameNode”,"ResourceManager”“DFSZKFailoverController”的三個進程,則表示Hadoop集群的主節點啟動成功。
10、使用命令“ssh 目標主機名或IP地址”遠程登錄到所有備用主節點主機,使用命令“jps”查看Java進程信息,若有名為“NameNode”,"ResourceManager”“DFSZKFailoverController”的三個進程,則表示Hadoop集群的備用主節點啟動成功。
?
步驟五:Hadoop高可用完全分布模式啟動和驗證;
注:該項所有的操作使用專門用于集群的用戶admin進行;
?
1、在Hadoop中創建當前登錄用戶自己的目錄,查看HDFS中的所有文件和目錄的結構;
2、進入Hadoop的示例程序包hadoop-mapreduce-examples-2.7.3.jar所在目錄;
運行使用蒙地卡羅法計算PI的示例程序;
?
出現的問題與解決方案
問題:
- Namenode沒有啟動;
解決方案:
- 格式化namenode,命令“hdfs namenode -format”;
此時向HDFS拷貝文件發現出現如下錯誤
$hdfs dfs -mkdir -p /home/admin.hadoop
再次運行jps發現,datanode沒有啟動。
?
經過查詢資料發現:
當我們使用hdfs namenode -format格式化namenode時,會在namenode數據文件夾(這個文件夾為自己配置文件hdfs-site.xml中dfs.namenode.name.dir的路徑)中保存一個current/VERSION文件,記錄clusterID,datanode數據文件夾(這個文件夾為自己配置文件中dfs.dataNode.name.dir的路徑)中保存的current/VERSION文件中的clustreID的值是第一次格式化保存的clusterID,這樣,datanode和namenode之間的ID不一致
所以,在格式化之前先刪除 dfs.name.dir指定目錄下的所有文件(注意刪目錄下所有的文件及文件夾而不是刪除該目錄)
?????? 命令:
$hdfs namenode -format
$start-all.sh
$jps
?
知識拓展
1、使用瀏覽器訪問192.168.10.111:8088,查看并管理Hadoop
2、使用瀏覽器訪問192.168.10.111:50070,查看HDFS情況
3、Hadoop是一種分布式系統的基礎構架。
核心是HDFS和MapReduce,hadoop2.0還包括YARN
4、HDFS:Hadoop Distributed FileSystem 分布式文件系統。
//很多時候的數據量超過了單臺機器允許存儲的范圍……故而需要分布式
前身是GFS,谷歌開源的分布式存儲系統。
是一個高容錯(允許錯誤發生)的系統,能檢測應對硬件故障。
適用于低成本的通用硬件(比如樹莓派么)
通過流式數據訪問,提供高吞吐量應用程序的訪問功能。
?
5、異常處理:
因為數量多,所以出故障是常態。
?
【可靠性】存在故障的時候也能較為有效地存儲數據。(名字節點故障,數據節點故障,網絡斷開)
【重新復制】定時會發送“心跳包”檢測節點是否健康,失去聯系標記為死亡狀態,需要重新復制到其他節點。
【數據正確性】校驗數據是否有壞塊(類似于葡萄的校驗?,驗證的校驗碼存儲在HDFS命名空間的隱藏文件中)
【元數據失效】FsImage和Editlog是HDFS的核心數據結構。(損壞就崩盤了)名字節點(NameNode)如果崩了就需要人工的干預了。//第二名字節點不支持直接恢復
?
?
6、目標
?
- 數據訪問:適合批量處理而非交互式,重點是數據吞吐量而非反應時間
- 大數據:支持大文件,單個文件GB-TB級別
- 簡單一致模式:一次寫入,多次讀,一般寫入之后就不再修改了
- 主從結構:一個名字節點和很多數據節點,通常一臺機器一個數據節點。
- 硬件故障處理:是設計的核心目標之一
總結
以上是生活随笔為你收集整理的Hadoop集群搭建(五:Hadoop HA集群模式的安装)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hadoop集群搭建(四:Zookeep
- 下一篇: Hadoop集群搭建(六:HBase的安