Configuring HardWare For HDFS HAjava
爲了使用Quorum-based存儲去部署一個HA集羣,應該作以下準備node
1.NameNode:運行Active和Standbye的NameNode應該有等價的配置。apache
2.JournalNode:運行Journalnode的節點ssh
3.JounalNode進程相對輕量,所以這些進程能夠相對合理的和其餘的進程並存,例如NameNode,JobTracker或者YARN。ide
4.Cloudera建議將JournalNode部署在「master」節點或者NameNode,Standby NameNode,Jobtracker等。oop
5.至少應該有3個JournalNode,edit log 的修改必須寫入大多數的JournalNode,這樣集羣可以容忍節點出錯的數量是一個;可是爲了提升集羣可以容忍出錯節點的數量,咱們能夠有大於3個的JournalNode,而且數量爲奇數個,spa
6.當運行N個JournalNode的時候,集羣容許出錯的數量最大爲(N-1)/2,當超過限制後,將不能工做,會看見相似下面的錯誤code
12/10/01 17:34:18 WARN namenode.FSEditLog: Unable to determine input streams from QJM to [10.0.1.10:8485, 10.0.1.10:8486, 10.0.1.10:8487]. Skipping. java.io.IOException: Timed out waiting 20000ms for a quorum of nodes to respond.
Configuring SoftWare For HDFS HAorm
Core-site.xml配置
server
針對YARN的配置:
<property> <name>fs.defaultFS</name> <value>hdfs://pezy</value>
</property>
<property> <name>ha.zookeeper.quorum</name> <value>hadoop001:2181,hadoop002:2181,hadoop003:2181</value></property>
【配置zookeeper集羣】
針對MR1的配置
<property> <name>fs.default.name</name> <value>hdfs://pezy</value> </property>
hdfs-site.xml配置
<property> <name>dfs.nameservices</name> <value>pezy</value>
</property>
【這是集羣的邏輯名,能夠本身定義,需和core-site.xml中配置的名字一致】
<property> <name>dfs.ha.namenodes.pezy</name> <value>nn1,nn2</value></property>
【這是配置NameNode節點的邏輯名字,用逗號分隔,這個配置可讓DataNode知道集羣中全部的NameNode】
<property> <name>dfs.namenode.rpc-address.pezy.nn1</name> <value>hadoop001:8020</value> </property> <property> <name>dfs.namenode.rpc-address.pezy.nn2</name> <value>hadoop002:8020</value></property>
【爲NameNode進程設置完整地址和RPC端口】
<property> <name>dfs.namenode.http-address.pezy.nn1</name> <value>hadoop001:50070</value> </property> <property> <name>dfs.namenode.http-address.pezy.nn2</name> <value>hadoop002:50070</value> </property>【設置NameNode的HTTP地址】
<property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://hadoop001:8485;hadoop002:8485;hadoop003:8485/mycluster</value> </property>【設置JournalNode的共享文件目錄,Active NameNode負責寫入,Standby NameNode負責讀取】
<property> <name>dfs.journalnode.edits.dir</name> <value>/data/journalnode</value></property>
【每個journalNode節點中存儲edits和其餘的本地數據的位置】
<property> <name>dfs.client.failover.proxy.provider.pezy</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value></property>
【HDFS客戶端經過這個JAVA類去和Active NameNode會話,經過該類可讓HDFS客戶端知道哪一個NameNode是Active狀態】
<property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> </property> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/home/exampleuser/.ssh/id_rsa</value></property>
【配置NameNode宕機後的恢復策略】
<property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value></property>
【開啓自動恢復策略】
啓動過程:
1.各個節點啓動zookeeper
2.在一個NameNode節點:hadoop zkfc -formatZK
3.格式化一個NameNode:hdfs namenode -format
4.啓動剛格式化的NameNode:hadoop-daemon.sh start namenode
5.在另外一個NameNode中複製前面格式化的信息:
6.啓動這個NameNode
7.啓動zkfc
8.啓動全部DataNode:hadoop-daemons.sh start datanode(注意S)