Hadoop 2.0架構搭建
阿新 • • 發佈:2018-12-18
節點擔任的角色
NN DN JN ZK ZKFC RM
node01 1 1 1 1 1
node02 1 1 1 1 1 1
node03 1 1 1 1
1.修改Hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.7.0_67
2.配置core-site.xml
<configuration> <property> <name>ipc.client.connect.max.retries</name> <value>20</value> //最大連線次數,修改大一點,為20,預設10 </property> <property> <name>ipc.client.connect.retry.interval</name> <value>1000</value> //重複連線的間隔1000ms=1s </property> <property> <name>fs.defaultFS</name> <value>hdfs://ocean</value> //叢集的名字 </property> <property> <name>ha.zookeeper.quorum</name> <value>node01:2181,node02:2181,node03:2181</value> //zookeeper節點 </property> <property> <name>hadoop.tmp.dir</name> <value>/opt/hadoop2</value> //NN DN的資料資訊 </property> </configuration>
3.配置hdfs-site.xml
<configuration> <property> <!-- 伺服器的名稱 --> <name>dfs.nameservices</name> <value>ocean</value> </property> <property> <!-- 高可用的NN --> <name>dfs.ha.namenodes.shsxt</name> <value>nn1,nn2</value> </property> <property> <name>dfs.namenode.rpc-address.shsxt.nn1</name> <value>node01:8020</value> </property> <property> <name>dfs.namenode.rpc-address.shsxt.nn2</name> <value>node02:8020</value> </property> <property> <!-- namenode的http地址和埠 --> <name>dfs.namenode.http-address.shsxt.nn1</name> <value>node01:50070</value> </property> <property> <!-- namenode的http地址和埠 --> <name>dfs.namenode.http-address.shsxt.nn2</name> <value>node02:50070</value> </property> <property> <!-- 指定namenode元資料儲存在journalnode中的路徑 --> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://node01:8485;node02:8485;node03:8485/shsxt</value> </property> <property> <!-- 指定HDFS客戶端連線active namenode的java類 --> <name>dfs.client.failover.proxy.provider.shsxt</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <property> <!-- 配置隔離機制為ssh 防止腦裂 --> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> <value>shell(true)</value> </property> <property> <!-- 指定祕鑰的位置 --> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_dsa</value> </property> <property> <!-- 指定journalnode日誌檔案儲存的路徑 --> <name>dfs.journalnode.edits.dir</name> <value>/opt/hadoop2/data</value> </property> <property> <!-- 開啟自動故障轉移 --> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> </configuration>
3.配置hadoop中的slaves
node01
node02
node03
4.準備zookeeper
a)三臺zookeeper:hadoop1,hadoop2,hadoop3
b)編輯zoo.cfg配置檔案
修改dataDir=/opt/zookeeper
server.1=node01:2888:3888
server.2=node02:2888:3888
server.3=node03:2888:3888
c)建立/opt/zookeeper,並在該目錄中建立一個myid的檔案,三個節點的myid檔案內容分別為1,2,3
5.環境變數配置
export PATH export JAVA_HOME=/usr/java/jdk1.7.0_67 export PATH=$PATH:$JAVA_HOME/bin export HADOOP_HOME=/usr/soft/hadoop-2.6.5 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin export ZOOKEEPER_HOME=/usr/soft/zookeeper-3.4.6 export PATH=$PATH:$ZOOKEEPER_HOME/bin
6.把環境變數、Hadoop和zookeeper發到其他節點,並載入環境變數
7.啟動三個zookeeper:
zkServer.sh start
jps看一下,有時候jps有執行緒不代表啟動成功,zkServer.sh status看一下
8.啟動三個JournalNode:
hadoop-daemon.sh start journalnode
jps看一下是否啟動
9.在其中一個namenode上格式化:
hdfs namenode -format
10.把剛剛格式化之後的元資料拷貝到另外一個namenode上:
a)啟動剛剛格式化的namenode :
hadoop-daemon.sh start namenode
jps看到namenode已經啟動
b)在沒有格式化的namenode上執行:
hdfs namenode -bootstrapStandby
c)啟動第二個namenode
hadoop-daemon.sh start namenode
11.在其中一個namenode上初始化zkfc:
hdfs zkfc -formatZK
12.在隨便一個節點上停止服務:
stop-dfs.sh
jps檢視一下
13.在隨便一個節點上全面啟動:
start-dfs.sh
jps檢視一下是否全部啟動
14.啟動node02和node03 yarn的resourcemanager
yarn-daemon.sh start resourcemanager (yarn resourcemanager )
關閉叢集:
stop-dfs.sh
zkServer.sh stop
yarn-daemon.sh stop resourcemanager
有可能會出錯的地方
1,確認每臺機器防火牆均關掉
2,確認每臺機器的時間是一致的
3,確認配置檔案無誤,並且確認每臺機器上面的配置檔案一樣
4,如果還有問題想重新格式化,那麼先把所有節點的程序關掉
5,刪除之前格式化的資料目錄hadoop.tmp.dir屬性對應的目錄,所有節點同步都刪掉,別單刪掉之前的一個,
刪掉三臺JN節點中dfs.journalnode.edits.dir屬性所對應的目錄
6,接上面的第6步又可以重新格式化已經啟動了
7,最終Active Namenode停掉的時候,StandBy可以自動接管!
部署過程中遇到的問題:
1.每次只能啟動一個namenode:
搭建HA的情況下,開啟start-dfs.sh 服務的時候,master和slave1兩個NameNode服務總有一個掛掉,
原因:start-dfs.sh的時候,首先開啟的是master:NameNode,後是slave1:NameNode,最後是JournalNode
即是:namenode-->datanode-->journalnode-->zkfc,兩個NameNode的服務衝突,必須的先開啟JournalNode服務才行(三個節點都要先開)
解決方案:在core-site.xml新增下述內容:
<property>
<name>ipc.client.connect.max.retries</name>
<value>20</value> //最大連線次數,修改大一點,為20,預設10
<description>Indicates the number of retries a client will make to establish
a server connection.
</description>
</property>
<property>
<name>ipc.client.connect.retry.interval</name>
<value>1000</value> //重複連線的間隔1000ms=1s
<description>Indicates the number of milliseconds a client will wait for
before retrying to establish a server connection.
</description>
</property>
因為:NameNode連線不上JournalNode,超過一定的次數,就會掛掉,所以要增加連線的最大次數。
2.一個namenode掛掉後不會自動切換:hdfs-site.xml
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
<value>shell(true)</value>
</property>