HDFS的HA

HDFS HA的架构

  • 针对NameNode启用两台物理主机,一台Active,一台Standby。
  • Active NameNode主机负责所有操纵,Standby NameNode主机待命。
  • Journal是单独的进程(JournalNodes,JNs),负责Active NameNode主机和Standby NameNode主机之间的同步通信。
  • Active NameNode的修改动作会写入到JNs,Standby NameNode会从JNs中读取edit logs。Standby NameNode会持续观察edit logs的变化。一旦edit logs发生变化,Standby NameNode会将变化同步到自己的名字空间。
  • DataNode会同时向Active NameNode和Standby NameNode发送心跳信息和block info。
  • 同时只能有一个Active NameNode。当出现两个Active NameNode时称之为“spit-brain”。
  • 只能Active NameNode写入,而Standby NameNode负责读取。

HA的配置

1. 配置hdfs-site.xml

配置nameservices的逻辑名。这里任意给一个mycluster。

<property>
  <name>dfs.nameservices</name>
  <value>mycluster</value>
</property>
2. 配置nameservices中的每一个NameNode

接着上边的逻辑名称mycluster,给出NameNode ID:nn1和nn2,用逗号分隔。

<property>
  <name>dfs.ha.namenodes.mycluster</name>
  <value>nn1,nn2</value>
</property>

注意:目前hadoop2.9.2最多只支持2个NameNode。

3. 配置每个NameNode的RPC地址
<property>
  <name>dfs.namenode.rpc-address.mycluster.nn1</name>
  <value>machine1.example.com:8020</value>
</property>
<property>
  <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  <value>machine2.example.com:8020</value>
</property>
4. 配置每个NameNode的Web UI
<property>
  <name>dfs.namenode.http-address.mycluster.nn1</name>
  <value>machine1.example.com:50070</value>
</property>
<property>
  <name>dfs.namenode.http-address.mycluster.nn2</name>
  <value>machine2.example.com:50070</value>
</property>

htts使用形如:dfs.namenode.https-address.mycluster.nn1

5. 配置NameNode的共享edit logs目录
<property>
  <name>dfs.namenode.shared.edits.dir</name>
  <value>qjournal://node1.example.com:8485;node2.example.com:8485;node3.example.com:8485/mycluster</value>
</property>

/mycluster是目录。

6. 配置客户端容灾代理提供者
<property>
  <name>dfs.client.failover.proxy.provider.mycluster</name>
  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

供hadoop客户端用来检测哪个NameNode是Active的。

7. 配置HA防护方法名集合(Optional)

QJM可以防止脑裂的发生,即不会存在两个Active NameNode写入edit logs。
可选配置sshfence或者给一个shell script。

8. 配置HDFS的文件系统

在core-site.xml中配置

<property>
  <name>fs.defaultFS</name>
  <value>hdfs://mycluster</value>
</property>
9. 配置JNs本地存放数据的目录(edit logs)
<property>
  <name>dfs.journalnode.edits.dir</name>
  <value>/path/to/journal/node/local/data</value>
</property>

一般设置在hadoop系统用户的家目录下。

HA的部署

1. 在JNs节点上启动JN进程
hadoop-daemon.sh start journalnode
2. 在磁盘上完成Active NameNode和Standby NameNode元数据的同步
(Ⅰ)如果正在构建新的hdfs集群,需要在一台NameNode上进行format工作。
(Ⅱ)若已经格式化文件系统或者在非HA的集群上启用HA功能,需要将现有NameNode的目录(~/hadoop/dfs/name)拷贝至另一台NameNode的相同目录下。在未格式化的NameNode主机上执行:
hdfs namenode -bootstrapStandby

该命令保证JNs有足够的edit来启动两个NameNode。在此之前要存在启动的NameNode。

(Ⅲ)如果正在将非HA的NameNode转换成HA,就执行命令
hdfs namenode -initializeShareEdits

上述命令将会将本地的NameNode编辑日志目录数据初始化到JNs中。要求~/hadoop/dfs/name目录不能锁定(没有in_use.lock文件)。

(Ⅴ)启动两个NameNode
hadoop-daemon.sh start namenode
(Ⅵ) 通过Web UI查看每个NameNode的状态

比如:
http://node01:50070
http://node02:50070

管理HA过程

1. 手动完成状态切换
hdfs haadmin -transitionToActive nn1 # 即NameNode ID
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值