BigData~03:Hadoop05 ~ HA叢集搭建
Hadoop是一個環境敏感的框架,在Win和類Unix上安裝的差別較大,但是一般我們都在Linux上進行安裝,這裡安裝的版本為2.6.4,apache提供的hadoop-2.6.4的安裝包是在32位作業系統編譯的,因為hadoop依賴一些C++的本地庫,所以如果在64位的操作上安裝hadoop-2.6.4就需要重新在64作業系統上重新編譯;
一、環境準備
- 修改主機名,修改IP,新增主機名和IP的對映關係(/etc/hosts),配置免密登入,配置防火牆(也可以直接關閉);
- 安裝JDK和配置環境變數;
二、叢集安裝規劃
- 由於是HA叢集,所以牽扯到的機器比以前稍多幾臺,當然也可以共用,提前做好叢集的安裝規劃還是比較好的選擇:
主機名 規劃IP 要安裝軟體 該執行的程式 hdp1 192.168.70.130 JDK、hadoop NameNode、DFSZKFailoverController hdp2 192.168.70.131 JDK、hadoop NameNode、DFSZKFailoverController(zkfc) hdp3 192.168.70.132 JDK、hadoop ResourceManager hdp4 192.168.70.133 JDK、hadoop ResourceManager hdp5 192.168.70.135 JDK、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain hdp6 192.168.70.136 JDK、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain hdp7 192.168.70.137 JDK、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain - 注意:
- 在hadoop2.0中通常由兩個NameNode組成,一個處於active狀態,另一個處於standby狀態。Active NameNode對外提供服務,而Standby狀態的NameNode則不對外提供服務,僅同步Active狀態的NameNode的狀態,以便能夠在它失敗時快速進行切換。hadoop2.0官方提供了兩種HDFS的HA解決方案,一種是NFS,另一種是QJM。這裡我們使用簡單的QJM。對於QJM,主備NameNode之間通過一組JournalNode同步後設資料資訊,一條資料只要成功寫入多數JournalNode即認為寫入成功,所以通常配置奇數個JournalNode;這裡還配置了一個ZooKeeper叢集,用於ZKFC(DFSZKFailoverController)故障轉移,當Active狀態的NameNode掛掉了,會自動切換Standby狀態的NameNode為Standby狀態;
- hadoop-2.2.0中依然存在一個問題,就是ResourceManager只有一個,存在單點故障,hadoop-2.6.4解決了這個問題,有兩個ResourceManager,一個是Active,一個是Standby,狀態由zookeeper進行協調;
三、開始安裝
- 安裝ZooKeeper叢集:
- 解壓tar.gz安裝包:
tar -zxvf zookeeper-3.4.5.tar.gz -C /usr/local/apps
; - 修改配置:
- 進入ZK的安裝目錄(後面簡稱:<ZK_HOME>)的conf資料夾:
cp zoo_sample.cfg zoo.cfg
; - 在
zoo.cfg
檔案最後新增- 資料輸出目錄
dataDir=<your-hdp-data-dir>
,預設是在/tmp
資料夾下,不安全,並確保這個資料夾存在; - 節點間的關係,以及通訊介面:
server.1=hdp5:2888:3888 server.2=hdp6:2888:3888 server.3=hdp7:2888:3888
- 資料輸出目錄
- 把配置好的hadoop安裝目錄拷貝到hdp6和hdp7:
scp -r <ZK_HOME>/zookeeper-3.4.5/hdp6:<ZK_HOME> scp -r <ZK_HOME>/zookeeper-3.4.5/hdp7:<ZK_HOME>
- 並把節點編號寫入各自節點資料輸出目錄的myid目錄,這裡的節點編號分別是:1,2,3:
echo <num> > <your-hdp-data-dir>/myid
- 進入ZK的安裝目錄(後面簡稱:<ZK_HOME>)的conf資料夾:
- 解壓tar.gz安裝包:
- 安裝Hadoop叢集:
- 解壓hadoop-2.6.4.tar.gz
- 配置環境變數,包括根路徑(HADOOP_HOME)和bin;
- 修改配置檔案,這些配置檔案全部位於
<HADOOP_HOME>/etc/hadoop
目錄下:- 在hadoo-env.sh檔案中新增JAVA_HOME
export JAVA_HOME=<your-java-home>
- 修改core-site.xml,在最後新增:
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://ns/</value> <description>指定hdfs的nameservice為ns</description> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/app/hdpdata/</value> <description>指定hadoop臨時目錄</description> </property> <property> <name>ha.zookeeper.quorum</name> <value>hdp5:2181,hdp6:2181,hdp7:2181</value> <description>指定zookeeper地址</description> </property> </configuration>
- 修改hdfs-site.xml,在最後新增:
<configuration> <property> <name>dfs.nameservices</name> <value>ns</value> <description>指定hdfs的nameservice為ns,需要和core-site.xml中的保持一致</description> </property> <property> <name>dfs.ha.namenodes.ns</name> <value>nn1,nn2</value> <description>ns下面有兩個NameNode,分別是nn1,nn2</description> </property> <property> <name>dfs.namenode.rpc-address.ns.nn1</name> <value>hdp1:9000</value> <description>nn1的RPC通訊地址</description> </property> <property> <name>dfs.namenode.http-address.ns.nn1</name> <value>hdp1:50070</value> <description>nn1的http通訊地址</description> </property> <property> <name>dfs.namenode.rpc-address.ns.nn2</name> <value>hdp2:9000</value> <description>nn2的RPC通訊地址</description> </property> <property> <name>dfs.namenode.http-address.ns.nn2</name> <value>hdp2:50070</value> <description>nn2的http通訊地址</description> </property> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://hdp5:8485;hdp6:8485;hdp7:8485/ns</value> <description>指定NameNode的edits後設資料在JournalNode上的存放位置</description> </property> <property> <name>dfs.journalnode.edits.dir</name> <value>/home/hdp5/journaldata</value> <description>指定JournalNode在本地磁碟存放資料的位置</description> </property> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> <description>開啟NameNode失敗自動切換</description> </property> <property> <name>dfs.client.failover.proxy.provider.ns</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> <description>配置失敗自動切換實現方式</description> </property> <property> <name>dfs.ha.fencing.methods</name> <value> sshfence shell(/bin/true) </value> <description>配置隔離機制方法,多個機制用換行分割,即每個機制暫用一行</description> </property> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/home/shreker/.ssh/id_rsa</value> <description>使用sshfence隔離機制時需要ssh免登陸</description> </property> <property> <name>dfs.ha.fencing.ssh.connect-timeout</name> <value>30000</value> <description>配置sshfence隔離機制超時時間</description> </property> </configuration>
- 修改mapred-site.xml,在最後新增:
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> <description>指定MR資源排程框架為yarn</description> </property> </configuration>
- 修改yarn-site.xml,在最後新增:
<configuration> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> <description>開啟RM高可用</description> </property> <property> <name>yarn.resourcemanager.cluster-id</name> <value>yrc</value> <description>指定RM的cluster id</description> </property> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> <description>指定RM的名字</description> </property> <property> <name>yarn.resourcemanager.hostname.rm1</name> <value>hdp3</value> <description>指定RM的地址</description> </property> <property> <name>yarn.resourcemanager.hostname.rm2</name> <value>hdp4</value> <description>指定RM的地址</description> </property> <property> <name>yarn.resourcemanager.zk-address</name> <value>hdp5:2181,hdp6:2181,hdp7:2181</value> <description>指定zk叢集地址</description> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> <description>指定服務名稱</description> </property> </configuration>
- 指定當前節點的子節點,修改slaves檔案:
hdp5 hdp6 hdp7
- 在hadoo-env.sh檔案中新增JAVA_HOME
- 分發配置好的Hadoop到後面的機器:
scp -r <local-hadoop-home-dir> <user>@<host>:<target-parent-dir>
- 啟動叢集
- 在hdp5、hdp6、hdp7上啟動zookeeper叢集:
zkServer.sh start
- 在hdp5、hdp6、hdp7上啟動JournalNode:
hadoop-daemon.sh start journalnode
- 分別在ns的nn1和nn2上初始化HDFS的NameNode,注意兩個cluster-id必須一致,完成之後就會把後設資料拷貝到對應的StandBy的機器上:
hdfs namenode -format -clusterID <your-cluster-id>
- 初始化ZKFC操作:
hdfs zkfc -formatZK
- 啟動HDFS(根據規劃在hdp1上執行):
start-dfs.sh
- 啟動YARN(為了效能把NameNode和ResourceManager放在不同的機器上,選擇hdp2):
start-yarn.sh
- 在hdp5、hdp6、hdp7上啟動zookeeper叢集:
四、驗證測試
- 訪問瀏覽器:http://hdp1:50070和http://hdp2:50070;
- 驗證HA
- 上傳檔案;
- 瀏覽器訪問,如1;
- 幹掉hdp1上Active的NameNode:
kill -9 <nn-pid>
; - 瀏覽器訪問,如1,發現hdp2上NameNode的狀態已經切換為Active;
- 啟動剛才幹掉的NameNode,狀態切換為StandBy;
五、常用叢集測試命令
- 檢視hdfs的各節點狀態資訊
hdfs dfsadmin -report
- 獲取一個NameNode節點的HA狀態
hdfs haadmin -getServiceState nn1
- 單獨啟動一個NameNode程式
hadoop-daemon.sh start namenode
- 單獨啟動一個zkfc程式
hadoop-daemon.sh start zkfc
相關文章
- HA分散式叢集搭建分散式
- Hadoop HA叢集簡單搭建Hadoop
- Canalv1.1.4版本搭建HA叢集
- 高階k8s HA 叢集搭建(一)K8S
- apache-storm-1.0.2.tar.gz的叢集搭建(3節點)(圖文詳解)(非HA和HA)ApacheORM
- 搭建zookeeper叢集(偽叢集)
- Hadoop HA叢集 與 開發環境部署Hadoop開發環境
- zookeeper叢集及kafka叢集搭建Kafka
- Redis系列:搭建Redis叢集(叢集模式)Redis模式
- linux下搭建ZooKeeper叢集(偽叢集)Linux
- Hadoop叢集搭建Hadoop
- Zookeeper叢集搭建
- redis叢集搭建Redis
- mysql叢集搭建MySql
- zookeeper 叢集搭建
- 搭建 Redis 叢集Redis
- RabbitMQ叢集搭建MQ
- nacos 叢集搭建
- HBASE叢集搭建
- 搭建ELK叢集
- Ambari叢集搭建
- kafka叢集搭建Kafka
- Hadoop搭建叢集Hadoop
- 【環境搭建】RocketMQ叢集搭建MQ
- Docker Swarm 叢集搭建DockerSwarm
- 搭建redis cluster叢集Redis
- Hbase 2.2.5叢集搭建
- docker搭建consul叢集Docker
- 快速搭建Jenkins叢集Jenkins
- 搭建MongoDB分片叢集MongoDB
- redis 4.0.11 叢集搭建Redis
- MySQL MGR 叢集搭建MySql
- 【greenplum】greenplum叢集搭建
- Kubernetes 叢集搭建(上)
- Kubernetes 叢集搭建(下)
- MongoDB 分片叢集搭建MongoDB
- ElasticSearch 7.8.1叢集搭建Elasticsearch
- Redis--叢集搭建Redis