hadoop集群篇--從0到1搭建hadoop集群


一。前述

本來有套好好的集群,可是不知道為什么虛擬機鏡像文件損壞,結果導致集群不能用。所以不得不重新搭套集群,借此機會順便再重新搭套吧,順便提醒一句大家,自己虛擬機的集群一定要及時做好快照,最好裝完每個東西后記得拍攝快照。要不搞工具真的很浪費時間,時間一定要用在刀刃上。廢話不多說,開始准備環境搭建,本集群搭建完全基於企業思想,所以生產集群亦可以參照此搭建。

二。集群規划

 

 三。配置

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.

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM