HDFS高可用模式安装部署

实验步骤

  • 将ZooKeeper集群模式启动
  • 获取安装包
    • 安装包在本地:通过XFTP等工具将安装包上传到虚拟机中
    • 安装包在网络:
      • 虚拟机可以访问互联网
      • 虚拟机无法访问互联网
  • 解压缩安装包
  • 将解压出来安装目录重命名
  • 配置环境变量
  • 刷新环境变量,使新增的环境变量生效
  • 修改hadoop相关配置文件
    • 修改core-site.xml配置文件
    • 修改hdfs-site.xml配置文件
    • 修改hadoop-env.sh配置文件
    • 修改slaves配置文件
  • 将配置好的文件分发给集群中的其他节点
    • 将hadoop的安装包分发给集群中的其他节点
    • 将profile环境变量分发给集群中其他节点
  • 创建配置目录中所涉及到的目录
  • 启动管理日志Journalnode节点
  • 在第一台节点上格式化NameNode
  • 启动第一台节点的NameNode节点
  • 在第二台节点上同步hadoop01节点的元数据信息
  • 启动hadoop02节点的NameNode节点
  • zkfc对接hdfs,实现主备抢占
  • 启动zkfc服务进程
    • hadoop01节点上启动zkfc
    • hadoop02节点上启动zkfc
  • 启动DataNode节点

一、启动ZooKeeper集群服务

注意:一个一个的启动,即一个一个的使用zkServer.sh start命令后再使用zkServer.sh status命令查看节点状态。

1、启动hadoop01节点的ZooKeeper服务

[root@hadoop01 install]# zkServer.sh start

[root@hadoop01 install]# zkServer.sh status

输出结果,如下图所示:

2、启动hadoop02节点的ZooKeeper服务

[root@hadoop02 ~]# zkServer.sh start

[root@hadoop02 ~]# zkServer.sh status

输出结果,如下图所示:

3、启动hadoop03节点的ZooKeeper服务

[root@hadoop03 ~]# zkServer.sh start

[root@hadoop03 ~]# zkServer.sh status

输出结果,如下图所示:

二、安装Hadoop

1、将hadoop安装包解压到指定的安装目录

[root@hadoop01 install]# cd

[root@hadoop01 ~]# tar -zxvf hadoop-2.7.7.tar.gz -C /opt/install/

2、进入到安装目录,对hadoop的安装目录进行重命名

[root@hadoop01 ~]# cd /opt/install/

[root@hadoop01 install]# mv hadoop-2.7.7/ hadoop

3、配置hadoop的环境变量

[root@hadoop01 install]# vim /etc/profile

export HADOOP_HOME=/opt/install/hadoop

export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

输出结果,如下图所示:

4、刷新环境变量,使得新增环境变量生效

[root@hadoop01 install]# source /etc/profile

5、验证hadoop版本信息

[root@hadoop01 install]# hadoop version

输出结果,如下图所示:

三、修改hadoop配置文件

1、修改core-site.xml配置文件

[root@hadoop01 ~]# cd /opt/install/hadoop/etc/hadoop/

[root@hadoop01 hadoop]# vim core-site.xml

<configuration>

    <property>

        <!--不启用服务级授权,默认为false-->

        <name>hadoop.security.authorization</name>

        <value>false</value>

    </property>

    <property>

        <!--配置hadoop的临时目录-->

        <name>hadoop.tmp.dir</name>

        <value>/data/hadoop/tmp</value>

    </property>

    <property>

        <!--指定hdfs的nameservice为cluster-->

        <name>fs.defaultFS</name>

        <value>hdfs://cluster</value>

    </property>

    <property>

        <!--指定 zookeeper地址-->

        <name>ha.zookeeper.quorum</name>

        <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>

    </property>

    <property>

        <!--指定ZooKeeper会话超时时间-->

        <name>ha.zookeeper.session-timeout.ms</name>

        <value>10000</value>

    </property>

</configuration>

输出结果,如下图所示:

2、修改hdfs-site.xml配置文件

[root@hadoop01 hadoop]# vim hdfs-site.xml

<configuration>

    <!--设置副本数量-->

    <property>

        <name>dfs.replication</name>

        <value>3</value>

    </property>

    <!--指定hdfs的nameservice为cluster-->

    <property>

        <name>dfs.nameservices</name>

        <value>cluster</value>

    </property>

    <!--cluster下有两个NameNode,分别是namenode01,namenode02-->

    <property>

        <name>dfs.ha.namenodes.cluster</name>

        <value>namenode01,namenode02</value>

    </property>

    <!--namenode01的RPC通信地址-->

    <property>

        <name>dfs.namenode.rpc-address.cluster.namenode01</name>

        <value>hadoop01:9000</value>

    </property>

    <!--namenode01的http通信地址-->

    <property>

        <name>dfs.namenode.http-address.cluster.namenode01</name>

        <value>hadoop01:8989</value>

    </property>

    <!--namenode02的RPC通信地址-->

    <property>

        <name>dfs.namenode.rpc-address.cluster.namenode02</name>

        <value>hadoop02:9000</value>

    </property>

    <!--namenode02的http通信地址-->

    <property>

        <name>dfs.namenode.http-address.cluster.namenode02</name>

        <value>hadoop02:8989</value>   

    </property>

    <!--是否启用HA自动切换-->

    <property>

        <name>dfs.ha.automatic-failover.enabled.cluster</name>

        <value>true</value>

    </property>

    <!--指定NameNode的元数据在JournalNode上的存放位置-->

    <property>

        <name>dfs.namenode.shared.edits.dir</name>

        <value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/cluster</value>

    </property>

    <!--指定JournalNode在本地磁盘存放数据的位置-->

    <property>

        <name>dfs.journalnode.edits.dir</name>

        <value>/data/hadoop/journal</value>

    </property>

    <!--指定NameNode在本地磁盘存放数据的位置-->

    <property>

        <name>dfs.namenode.name.dir</name>

        <value>/data/hadoop/namenode</value>

    </property>

    <!--指定DataNode在本地磁盘存放数据的位置-->

    <property>

        <name>dfs.datanode.data.dir</name>

        <value>/data/hadoop/datanode</value>

    </property>

    <!--配置隔离机制方法,多个机制用换行分割,即每个机制占用一行-->

    <property>

        <name>dfs.ha.fencing.methods</name>

        <value>

              sshfence

              shell(/bin/true)

        </value>

    </property>

    <!--使用sshfence隔离机制时需要ssh免登录-->

    <property>

        <name>dfs.ha.fencing.ssh.private-key-files</name>

        <value>/root/.ssh/id_rsa</value>

    </property>

    <!--配置sshfence隔离机制超时时间-->

    <property>

        <name>dfs.ha.fencing.ssh.connect-timeout</name>

        <value>30000</value>

    </property>

    <!--配置失败自动切换实现方式-->

    <property>

        <name>dfs.client.failover.proxy.provider.cluster</name>

        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

    </property>

   <!--开启webHDFS-->

    <property>

        <name>dfs.webhdfs.enabled</name>

        <value>true</value>

    </property>

    <!--设置重新进行健康检查的时间-->

    <property>

        <name>heartbeat.recheck.interval</name>

        <value>2000</value>

    </property>

    <!--datanode会按照此间隙(单位是s)向namenode发送心跳,默认发送10次-->

    <property>

        <name>dfs.heartbeat.interval</name>

        <value>1</value>

    </property>

</configuration>

输出结果,如下图所示:

3、修改hadoop-env.sh配置文件

[root@hadoop01 hadoop]# vim hadoop-env.sh

export JAVA_HOME=/opt/install/java

输出结果,如下图所示:

4、修改slaves文件

[root@hadoop01 hadoop]# vim slaves

hadoop01

hadoop02

hadoop03

输出结果,如下图所示:

四、将配置好的文件分发给集群中其他节点

1、将hadoop的安装目录分发给集群中的其他节点

[root@hadoop01 hadoop]# cd /opt/install/

[root@hadoop01 install]# scp -r hadoop/ hadoop02:/opt/install/

[root@hadoop01 install]# scp -r hadoop/ hadoop03:/opt/install/

2、将配置好的环境变量分发给集群中的其他节点

[root@hadoop01 install]# scp /etc/profile hadoop02:/etc/

[root@hadoop01 install]# scp /etc/profile hadoop03:/etc/

五、创建配置文件中的所需目录

[root@hadoop01 install]# mkdir -p /data/hadoop/journal

[root@hadoop01 install]# mkdir -p /data/hadoop/namenode

[root@hadoop01 install]# mkdir -p /data/hadoop/datanode

[root@hadoop01 install]# mkdir -p /data/hadoop/tmp

六、启动管理日志的JournalNode

[root@hadoop01 install]# hadoop-daemon.sh start journalnode

[root@hadoop02 ]# hadoop-daemon.sh start journalnode

[root@hadoop03 ]# hadoop-daemon.sh start journalnode

七、格式化Namenode

1、在hadoop01节点上格式化Namenode

[root@hadoop01 install]# hdfs namenode -format

输出结果,如下图所示:

2、格式化成功后,在hadoop01节点上启动Namenode

[root@hadoop01 install]# hadoop-daemon.sh start namenode

输出结果,如下图所示:

八、在hadoop02上同步hadoop01的元数据

1、格式化hadoop02的Namenode,并同步hadoop01主节点的元数据信息

[root@hadoop02 install]# hdfs namenode -bootStrapStandby

输出结果,如下图所示:

2、启动hadoop02的NameNode节点

[root@hadoop02 install]# hadoop-daemon.sh start namenode

输出结果,如下图所示:

此时,我们可以通过web页面的形式观察namenode节点的状态

通过登录hadoop01可以看到,hadoop01此时为standby状态

登录hadoop02后,发现此时也同样为standby状态

九、zkfc对接hdfs,实现主备抢占

1、格式化zkfc

[root@hadoop01 install]# hdfs zkfc -formatZK

输出结果,如下图所示:

2、在hadoop01上启动zkfc

[root@hadoop01 install]# hadoop-daemon.sh start zkfc

输出结果,如下图所示:

3、在hadoop02上启动zkfc

[root@hadoop02 install]# hadoop-daemon.sh start zkfc

输出结果,如下图所示:

当zkfc启动成功后,再次刷新hadoop的web界面,并观察Namenode节点的状态,hadoop01的状态由原来的standby变为Active,成为主节点。

而hadoop02的状态则维持不变。

十、启动DataNode

所有节点启动DataNode节点

[root@hadoop01 install]# hadoop-daemons.sh start datanode

输出结果,如下图所示:

刷新web页面,单击“datanodes”标签

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值