5.1.zookeeper+hadoop安装

该文详细介绍了如何手动配置Hadoop的高可用(HA)集群,包括创建目录,复制配置文件,设置权限,配置core-site.xml和hdfs-site.xml,启动JournalNode,NameNode和datanode服务,进行NameNode的格式化,元数据同步,以及故障转移操作。
摘要由CSDN通过智能技术生成

Hadoop HA高可用部署-手动模式

1.配置HDFS-HA集群

1)在/opt目录下创建一个ha的目录

[root@hadoop01 ~]#cd /opt/
[root@hadoop01 ~]#mkdir ha

2)将/opt/module/下的 hadoop拷贝到/opt/ha目录下

[root@hadoop01 ~]# cp -rv /opt/module/hadoop-3.3.1/ /opt/ha/

3)给ha目录授予myhadoop用户权限

[root@hadoop01 ~]# chown -R myhadoop:myhadoop /opt/

4)切换到myhadoop用户

[root@hadoop01 ~]# su - myhadoop
[root@node1 ~]$ 

5)配置core-site.xml

[root@node1 ~]$  vim /opt/ha/hadoop-3.3.1/etc/hadoop/core-site.xml 
<configuration>
        <!-- 指定 NameNode 的地址 -->
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://mycluster</value>
        </property>
        <!-- 指定 hadoop 数据的存储目录 -->
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/opt/ha/hadoop-3.3.1/data/tmp</value>
        </property>
        <!-- 声明journalnode服务器存储目录-->
         <property>
                 <name>dfs.journalnode.edits.dir</name>
                <value>file://${hadoop.tmp.dir}/jn</value>
         </property>
        <!-- 配置 HDFS 网页登录使用的静态用户为 myhadoop -->
        <property>
                <name>hadoop.http.staticuser.user</name>
                <value>root</value>
        </property>
        <property>
              <name>hadoop.proxyuser.root.hosts</name>
              <value>*</value>
         </property>
         <property>
              <name>hadoop.proxyuser.root.groups</name>
              <value>*</value>
         </property>

</configuration>

6)配置hdfs-site.xml

<configuration>
    <!-- 完全分布式集群名称 -->
    <property>
       <name>dfs.nameservices</name>
       <value>mycluster</value>
    </property>
    <!-- NameNode数据存储目录 -->
    <property>
       <name>dfs.namenode.name.dir</name>
       <value>file://${hadoop.tmp.dir}/name</value>
    </property>
    <!-- DataNode数据存储目录  -->
    <property>
       <name>dfs.datanode.data.dir</name>
       <value>file://${hadoop.tmp.dir}/data</value>
    </property>
      <!--集群中NameNode节点都有哪些 -->
    <property>
       <name>dfs.ha.namenodes.mycluster</name>
       <value>nn1,nn2,nn3</value>
    </property>
     <!--nn1的RPC通信地址 -->
    <property>
       <name>dfs.namenode.rpc-address.mycluster.nn1</name>
       <value>node1:9000</value>
    </property>
    <!--nn2的RPC通信地址 -->
    <property>
       <name>dfs.namenode.rpc-address.mycluster.nn2</name>
       <value>node2:9000</value>
    </property>
    <!-- nn3的RPC通信地址 -->
    <property>
       <name>dfs.namenode.rpc-address.mycluster.nn3</name>
       <value>node3:9000</value>
    </property>  
    <!--nn1的http通信地址 -->
    <property>
       <name>dfs.namenode.http-address.mycluster.nn1</name>
       <value>node1:9870</value>
    </property>   
    <!--nn2的http通信地址-->
    <property>
       <name>dfs.namenode.http-address.mycluster.nn2</name>
       <value>node2:9870</value>
    </property>
    <!--  nn3的http通信地址  -->
    <property>
       <name>dfs.namenode.http-address.mycluster.nn3</name>
       <value>node3:9870</value>
    </property>   
    <!-- 指定NameNode元数据在JournalNode上的存放位置 -->
    <property>
       <name>dfs.namenode.shared.edits.dir</name>
       <value>qjournal://node1:8485;node2:8485;node3: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>/root/.ssh/id_rsa</value>
    </property>   
    <!-- 访问代理类:client用于确定哪个NameNode为Active  -->
    <property>
          <name>dfs.client.failover.proxy.provider.mycluster</name>
          <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
            <property>
                <name>dfs.webhdfs.enabled</name>
                 <value>true</value>
        	</property>

</configuration>

7)拷贝配置好的hadoop环境到其他节点(使用xsync脚本)

[root@node1 ~]$sudo xsync  /opt/ha

2.启动HDFS-HA集群

1)修改hadooop的环境变量,指向HA的集群

[root@node1 ~]$ sudo vim  /etc/profile.d/my_env.sh
export HADOOP_HOME=/opt/ha/hadoop-3.3.1

2)分发文件

[root@node1 ~]$ sudo xsync /etc/profile.d/my_env.sh

3)在各个节点刷新环境变量

[root@node1 ~]$ source /etc/profile

[root@node2 ~]$ source /etc/profile

[root@node3 ~]$ source /etc/profile

4)在各个节点上删除/tmp目录下的内容

[myhadoop@node1 ~]$ sudo rm -rf /tmp/*

[myhadoop@node2 ~]$ sudo rm -rf /tmp/*

[myhadoop@node3 ~]$ sudo rm -rf /tmp/*

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

[root@node1 ~]$ hdfs --daemon start journalnode
[root@node2 ~]$ hdfs --daemon start journalnode
[root@node3 ~]$ hdfs --daemon start journalnode
[root@node1 ~]$ jpsall 
=============== hadoop01 ===============
1774 Jps
1727 JournalNode
=============== hadoop02 ===============
2485 Jps
2439 JournalNode
=============== hadoop03 ===============
2698 Jps
2653 JournalNode

6)在nn1上,对namenode进行格式化,并启动

[root@node1 ~]$ hdfs namenode -format

[root@node1 ~]$ hdfs --daemon start namenode

[root@node1 ~]$ jps
1909 NameNode
1977 Jps
1727 JournalNode

7)在nn2和nn3上,同步nn1的元数据信息

[root@node2 ~]$  hdfs namenode -bootstrapStandby

[root@node3 ~]$  hdfs namenode -bootstrapStandby

8)启动nn2和nn3上的namenode服务

[root@node2 ~]$  hdfs --daemon start namenode
[root@node2 ~]$ jps
2786 Jps
2439 JournalNode
2714 NameNode

[root@node3 ~]$  hdfs --daemon start namenode
[root@node3 ~]$ jps
2918 NameNode
3002 Jps
2653 JournalNode

9)在web页面显示,01 02 03 都为standby状态

Overview ‘hadoop01:9000’ (standby)

Overview ‘hadoop02:9000’ (standby)

Overview ‘hadoop03:9000’ (standby)

10)启动所有节点的datanode服务

[root@node1 ~]$  hdfs --daemon start datanode
[root@node1 ~]$ jps
1909 NameNode
2203 DataNode
1727 JournalNode
2271 Jps

[root@node2 ~]$  hdfs --daemon start datanode
[root@node2 ~]$ jps
2439 JournalNode
2714 NameNode
2938 DataNode
3020 Jps

[root@node3 ~]$  hdfs --daemon start datanode
[root@node3 ~]$ jps
3219 Jps
3141 DataNode
2918 NameNode
2653 JournalNode

11)将nn1切换为Active状态

[root@node1 ~]$  hdfs haadmin -transitionToActive nn1

Overview ‘hadoop01:9000’ (active)

12)命令验证是否为Active

[root@node1 ~]$  hdfs haadmin -getServiceState nn1
active

13)kill掉Active的NameNode,进行手动故障转移

[root@node1 ~]$ jps
1909 NameNode
2203 DataNode
2588 Jps
1727 JournalNode
[root@node1 ~]$ kill -9 1909

14)在nn2上切换为Active

[root@node2 ~]$  hdfs haadmin -transitionToActive nn2 --forceactive
[root@node2 ~]$ hdfs haadmin -getServiceState nn2
active

15)恢复nn1上的namenode服务切换为active

[root@node1 ~]$ hdfs haadmin -transitionToActive --forceactive nn1
[root@node1 ~]$ hdfs haadmin -getServiceState nn1
active

16)查看nn2上的状态:namenode服务掉了

[root@node2 ~]$ jps
2439 JournalNode
2938 DataNode
4412 Jps

[root@node3 ~]$  hdfs --daemon start datanode
[root@node3 ~]$ jps
3219 Jps
3141 DataNode
2918 NameNode
2653 JournalNode

[root@node3 ~]$ hdfs haadmin -getServiceState nn2
standby
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风口浪尖上的鼠标

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值