一。前述
本來有套好好的集群,可是不知道為什么虛擬機鏡像文件損壞,結果導致集群不能用。所以不得不重新搭套集群,借此機會順便再重新搭套吧,順便提醒一句大家,自己虛擬機的集群一定要及時做好快照,最好裝完每個東西后記得拍攝快照。要不搞工具真的很浪費時間,時間一定要用在刀刃上。廢話不多說,開始准備環境搭建,本集群搭建完全基於企業思想,所以生產集群亦可以參照此搭建。
二。集群規划
三。配置
1.配置集群節點之間免密操作。
因為在node01(namenode)節點要啟動datanode節點,所以需要配置node01到三台datanode節點的免密操作
因為兩個namenode之間需要互相切換降低對方的級別所以node01,node02之間需要進行免密操作。
具體步驟如下:
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
scp id_dsa.pub root@node04:`pwd`/node01.pub
cat node01.pub >> ~/.ssh/authorized_keys
關閉防火牆:
sudo systemctl stop firewalld.service && sudo systemctl disable firewalld.service
2.上傳hadoop安裝包到某一節點上,進行配置
假設配置在此目錄下
第一步:配置hadoop-env.sh
使用命令echo $JAVA_HOME 確定jd目錄。
配置java環境。
export JAVA_HOME=/usr/java/jdk1.7.0_67
第二步:配置hdfs-site.xml
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>//配置集群的別名,所以當企業中多套集群時,可以使用此別名分開
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>//配置兩個namenode的邏輯名稱
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>//配置兩個namenode的真正物理節點和rpc通信端口
<value>node01:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>//配置兩個namenode的真正物理節點rpc通信端口
<value>node02:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>//配置兩個namenode的真正物理節點http通信端口
<value>node01:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>//配置兩個namenode的真正物理節點http通信端口
<value>node02:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node01:8485;node02:8485;node03:8485/mycluster</value>//配置三個journalnode的物理地址
</property>
<property>
<name>dfs.journalnode.edits.dir</name>//配置journalnode共享edits的目錄
<value>/var/sxt/hadoop/ha/jn</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>//配置zkfc實現的真正類
</property>
<property>
<name>dfs.ha.fencing.methods</name>//配置zkfc隔離機制
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>//配置zkfc切換對方namenode時所使用的方式
<value>/root/.ssh/id_dsa</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>/配置是否自動開啟zkfc切換
<value>true</value>
</property>
第三步:配置core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>//配置集群的別名
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>node02:2181,node03:2181,node04:2181</value>//配置和zookeep通信地址和端口
</property>
<property>
<name>hadoop.tmp.dir</name>//配置hadoop元數據的存放目錄
<value>/var/sxt/hadoop-2.6/ha</value>
</property>
第四步:配置slaves
即datanode節點
對應datanode節點的host或者ip
第五步:分發配置到其他節點相同目錄
scp -r hadoop-2.6.5 root@node04:`pwd`
第六步:配置zookeeeer集群
同樣上傳到某一節點 然后配置
1.cp zoo_sample.cfg zoo.cfg先改名 zookeeper集群識別zoo.cfg文件
2.配置conf/zoo.cfg
dataDir=/var/sxt/zk
server.1=node02:2888:3888
server.2=node03:2888:3888
server.3=node04:2888:3888
3.配置集群節點識別
mkdir -p /var/sxt/zk
echo 1 > myid //數字根據節點規划
4.配置全局環境變量
export ZOOKEEPER=/opt/soft/zookeeper-3.4.6
export PATH=$PATH:$JAVA_HOME/bin:$ZOOKEEPER/bin
5.啟動集群
分別啟動三台節點,然后查看狀態
zkServer.sh start
zkServer.sh statu
啟動成功!!!
第七步:啟動集群順序(重要!!!)
1.先啟動journalnode
hadoop-daemon.sh start journalnode
2.在兩個namenode節點創建/var/sxt/hadoop-2.6/ha 即hadoop.tmp.dir的目錄存放元數據(默認會創建,不過最好還是手工創建吧,並且里面一定是干凈目錄,無任何東西)
3.在其中一台namenode節點格式化
hdfs namenode -format
4.然后啟動namenode!!!注意這個一定要先啟動,然后再在另一台namenode同步,為了是讓里面有數據
hadoop-daemon.sh start namenode
5.然后在另一台namenode節點執行同步hdfs namenode -bootstrapStandby
6.在主節點啟動集群
start-dfs.sh
7.向zookeeper注冊active節點
hdfs zkfc -formatZK
8.啟動zkFC負責切換
hadoop-daemon.sh start zkfc
至此,集群啟動成功啟動成功!!
9.web-ui驗證
10.下一次啟動時,只需要先啟動zookeper,然后在namenode的管理節點啟動start-dfs.sh即可 !!!
最后,別忘拍攝快照哦!!
持續更新中。。。。,歡迎大家關注我的公眾號LHWorld.