Hadoop HA

2019-09-26  本文已影响0人  djm猿

HA 概述

2 HDFS-HA 工作机制

通过双 NameNode 消除单点故障

2.1 HDFS-HA 工作要点

元数据的管理方式需要改变:

需要一个状态管理功能模块:

必须保证两个 NN 之间能够 ssh 无密码登录

隔离(Fence),即同一时刻仅仅有一个 NN 对外提供服务

2.2 HDFS-HA 自动故障转移工作机制

image

自动故障转移为 HDFS 部署增加了两个新组件:

3 HDFS-HA 集群配置

3.1 集群规划

hadoop102 hadoop103 hadoop104
NameNode NameNode
JournalNode JournalNode JournalNode
DataNode DataNode DataNode
ZK ZK ZK
ResourceManager
NodeManager NodeManager NodeManager

3.2 配置 Zookeeper 集群

1、集群规划

2、ZooKeeper 分发

3、配置服务器编号

4、配置 zoo.cfg 文件

# 2是第几号服务器
# hadoop102是这个服务器的地址
# 2888是Follower与Leader交换信息的端口
# 3888是服务器通信端口
server.2=hadoop102:2888:3888
server.3=hadoop103:2888:3888
server.4=hadoop104:2888:3888

5、分别启动 ZooKeeper

3.3 配置 HDFS-HA 集群

1、将/opt/module/下的 hadoop-2.7.2 拷贝到/opt/module/ha 目录下
2、配置 core-site.xml

<configuration> 
  <property> 
  <!-- 把两个NN的地址组装成一个集群mycluster -->
    <name>fs.defaultFS</name>  
    <value>hdfs://mycluster</value> 
  </property>  
  <!-- 指定Hadoop运行时产生文件的存储目录 -->  
  <property> 
    <name>hadoop.tmp.dir</name>  
    <value>/opt//module/ha/hadoop-2.7.2/data/tmp</value> 
  </property> 
  <property>
    <name>ha.zookeeper.quorum</name>
    <value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value>
  </property>
</configuration>

3、配置 hdfs-site.xml

<configuration>
    <!-- 完全分布式集群名称 -->
    <property>
        <name>dfs.nameservices</name>
        <value>mycluster</value>
    </property>

    <!-- 集群中NameNode节点都有哪些 -->
    <property>
        <name>dfs.ha.namenodes.mycluster</name>
        <value>nn1,nn2</value>
    </property>

    <!-- nn1的RPC通信地址 -->
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn1</name>
        <value>hadoop102:9000</value>
    </property>

    <!-- nn2的RPC通信地址 -->
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn2</name>
        <value>hadoop103:9000</value>
    </property>

    <!-- nn1的http通信地址 -->
    <property>
        <name>dfs.namenode.http-address.mycluster.nn1</name>
        <value>hadoop102:50070</value>
    </property>

    <!-- nn2的http通信地址 -->
    <property>
        <name>dfs.namenode.http-address.mycluster.nn2</name>
        <value>hadoop103:50070</value>
    </property>

    <!-- 指定NameNode元数据在JournalNode上的存放位置 -->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://hadoop102:8485;hadoop103:8485;hadoop104:8485/mycluster</value>
    </property>

    <!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应 -->
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>

    <!-- 使用隔离机制时需要ssh无秘钥登录-->
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/home/djm/.ssh/id_rsa</value>
    </property>

    <!-- 声明journalnode服务器存储目录-->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/opt/module/ha/hadoop-2.7.2/data/jn</value>
    </property>

    <!-- 关闭权限检查-->
    <property>
        <name>dfs.permissions.enable</name>
        <value>false</value>
    </property>
    <!-- 访问代理类:client,mycluster,active配置失败自动切换实现方式-->
    <property>
        <name>dfs.client.failover.proxy.provider.mycluster</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
</configuration>

4、将修改后的配置分发到其他主机

3.4 启动 HDFS-HA 集群

1、在各个 JournalNode 节点上,输入以下命令启动 journalnode 服务

sbin/hadoop-daemon.sh start journalnode

2、在[nn1]上,对其进行格式化,并启动

bin/hdfs namenode -format
sbin/hadoop-daemon.sh start namenode

3、在[nn2]上,同步 nn1 的元数据信息

bin/hdfs namenode -bootstrapStandby

4、启动[nn2]

sbin/hadoop-daemon.sh start namenode

5、在[nn1]上,启动所有 datanode

sbin/hadoop-daemons.sh start datanode

6、将[nn1]切换为 Active

bin/hdfs haadmin -transitionToActive nn1

7、查看是否 Active

bin/hdfs haadmin -getServiceState nn1

3.5 配置 HDFS-HA 自动故障转移

1、在 hdfs-site.xml 中增加 如下配置:

<property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
</property>

2、在 core-site.xml 文件中增加如下配置:

<property>
    <name>ha.zookeeper.quorum</name>
    <value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value>
</property

3、关闭所有HDFS服务:

sbin/stop-dfs.sh

4、启动Zookeeper集群:

bin/zkServer.sh start

5、初始化HA在Zookeeper中状态:

bin/hdfs zkfc -formatZK

6、启动HDFS服务:

sbin/start-dfs.sh

7、验证

上一篇下一篇

猜你喜欢

热点阅读