1、HDFS HA 配置主要涉及幾點(diǎn)
1)多NameNode配置,唯一為active,其他為standby
2)多個NameNode對EditLogs文件的共享:JournalNode
3)fence:任意時刻只能僅有一臺NameNode向外提供服務(wù)
4)NameNode在client的proxy
2、按照官方文檔步驟一步一步來操作
1)配置hdfs-site.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<!-- Put site-specific property overrides in this file. -->
<configuration>
<!-- secondary namenode 進(jìn)程運(yùn)行服務(wù)器 -->
<!--
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>luozheng.bigdata2:9868</value>
</property>
-->
<!-- 配置新的nameservices邏輯名稱 -->
<property>
<name>dfs.nameservices</name>
<value>luozhengcluster</value>
</property>
<!-- 配置所有的NameNode,官方推薦NameNode節(jié)點(diǎn)數(shù)量最少為2個,最好是3個,不要超過5個, -->
<property>
<name>dfs.ha.namenodes.luozhengcluster</name>
<value>nn1,nn2,nn3</value>
</property>
<!-- 配置NameNode RPC地址 -->
<property>
<name>dfs.namenode.rpc-address.luozhengcluster.nn1</name>
<value>luozheng.bigdata:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.luozhengcluster.nn2</name>
<value>luozheng.bigdata1:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.luozhengcluster.nn3</name>
<value>luozheng.bigdata2:8020</value>
</property>
<!-- 配置NameNode HTTP訪問地址 -->
<property>
<name>dfs.namenode.http-address.luozhengcluster.nn1</name>
<value>luozheng.bigdata:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.luozhengcluster.nn2</name>
<value>luozheng.bigdata1:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.luozhengcluster.nn3</name>
<value>luozheng.bigdata2:9870</value>
</property>
<!-- 共享editlogs存放節(jié)點(diǎn),以供Active NameNode Write和Standby NameNode Read -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://luozheng.bigdata:8485;luozheng.bigdata1:8485;luozheng.bigdata2:8485/luozhengcluster</value>
</property>
<!-- NameNode proxy -->
<property>
<name>dfs.client.failover.proxy.provider.luozhengcluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- NameNode隔離機(jī)制,這里采用ssh方式,采用這種方式要注意的地方,就是任意一個NameNode都能免密登錄到其他所有NameNode -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/luozheng/.ssh/id_rsa</value>
</property>
</configuration>
2)配置core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<!-- Put site-specific property overrides in this file. -->
<configuration>
<!-- namenode 服務(wù)器地址配置 -->
<!--
<property>
<name>fs.defaultFS</name>
<value>hdfs://luozheng.bigdata:9000</value>
</property>
-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://luozhengcluster</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/luozheng/tools/hadoop-3.0.1/data/journal</value>
</property>
<!-- 臨時文件存儲地址 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/luozheng/tools/hadoop-3.0.1/data/tmp</value>
</property>
<!-- 配置垃圾回收站中文件保存時間-->
<property>
<name>fs.trash.interval</name>
<value>10080</value>
</property>
<!-- 配置讀寫文件緩沖區(qū)大小 -->
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
</configuration>
3)啟動步驟
3.0)通過以下命令把相關(guān)文件同步到其他節(jié)點(diǎn)上
scp -r etc/ data/ luozheng@luozheng.bigdata1:/home/luozheng/tools/hadoop-3.0.1/
scp -r etc/ data/ luozheng@luozheng.bigdata2:/home/luozheng/tools/hadoop-3.0.1/
3.1)通過以下命令依次啟動所有journalnode守護(hù)進(jìn)程
bin/hdfs --daemon start journalnode



3.2) 通過以下命令在luozheng.bigdata節(jié)點(diǎn)格式化namenode并啟動namenode
bin/hdfs namenode -format
bin/hdfs --daemon start namenode
3.3)在luozheng.bigdata1和luozheng.bigdata2節(jié)點(diǎn)通過以下命令同步the contents of NameNode metadata directories,這里luozheng.bigdata1和luozheng.bigdata2都要同步是因?yàn)榇罱ǖ腍A是有三個NameNode的。
bin/hdfs namenode -bootstrapStandby
3.4)通過以下命令依次啟動其他NameNode
bin/hdfs --daemon start namenode



3.5)依次啟動datanode
bin/hdfs --daemon start datanode
啟動結(jié)束后,在瀏覽器中敲入http://luozheng.bigdata:9870,http://luozheng.bigdata1:9870,http://luozheng.bigdata2:9870,可以看到3個節(jié)點(diǎn)都啟動起來了。



3.6) 讓指定的namenode狀態(tài)為active
bin/hdfs haadmin -transitionToActive nn1

4、Automatic Failover
namenode active和standby狀態(tài)的切換,除了通過手動敲命令來實(shí)現(xiàn),還可以通過zookeeper來實(shí)現(xiàn)自動故障轉(zhuǎn)移,zookeeper通過ZKFailoverController來實(shí)時的監(jiān)控namenode的運(yùn)行狀態(tài),從而實(shí)現(xiàn)故障轉(zhuǎn)移。
4、1)相關(guān)配置,先在hdfs-site.xml文件中加入如下內(nèi)容:
<!-- HA automatic failover -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
4、2)在core-site.xml配置文件中加入如下配置信息:
<property>
<name>ha.zookeeper.quorum</name>
<value>luozheng.bigdata:2181,luozheng.bigdata1:2181,luozheng.bigdata2:2181</value>
</property>
4、3)同步配置文件到其他節(jié)點(diǎn)
scp -r core-site.xml hdfs-site.xml luozheng@luozheng.bigdata1:/home/luozheng/tools/hadoop-3.0.1/etc/hadoop/
scp -r core-site.xml hdfs-site.xml luozheng@luozheng.bigdata2:/home/luozheng/tools/hadoop-3.0.1/etc/hadoop/
4、4)如果HDFS文件系統(tǒng)是處于運(yùn)行狀態(tài),先通過如下命令stop
sbin/stop-dfs.sh
4、5)到zookeeper安裝目錄,依次啟動zookeeper服務(wù)
bin/zkServer.sh start
4、6)初始化HA在zookeeper狀態(tài)
bin/hdfs zkfc -formatZK
4、7)啟動HDFS集群
sbin/start-dfs.sh






zookeeper自動選舉了luozheng.bigdata節(jié)點(diǎn)中的namenode作為active namenode
現(xiàn)在強(qiáng)制kill掉該節(jié)點(diǎn)的namenode進(jìn)程,測試下Automatic Failover




5、最后補(bǔ)充一點(diǎn)hadoop的高級特性
1)Federation:目前HDFS系統(tǒng)中,任意時刻都只有一臺namenode向外提供服務(wù),F(xiàn)ederation可以讓多個namenode同時向外提供服務(wù),具體看官方文檔
2)HDFS快照
3)緩存管理
4)DistCp:分布式數(shù)據(jù)拷貝工具,官方文檔
總結(jié),到此,hadoop基本先告一段落,在學(xué)習(xí)的過程中,基本是以熟悉框架為主,先有個大概的概念,對于里面很多的原理基本沒有涉及,這個考慮的是在熟悉整個hadoop生態(tài)圈后,再慢慢通過官方文檔或是其他書籍來補(bǔ)充,先要快速熟悉它們!