【Hadoop-HA 搭建】hadoop-ha 高可用集群配置

搭建hadoop高可用集群,首先确保搭建了hadoop集群,zookeeper集群。hadoop 三个集群节点分别为主节点 master,两个副节点node01、node02。

hadoop集群配置

配置core-site.xml

vi core-site.xml

<configuration>
       <property>
              <name>fs.defaultFS</name>
              <value>hdfs://master:8020</value>
       </property>
       <property>
              <name>hadoop.tmp.dir</name>
              <value>/usr/local/hadoop/data</value>
       </property>
</configuration>

配置 hdfs-site.xml

vi hdfs-site.xml

<configuration>
    <property>
              <name>dfs.replication</name>
              <value>2</value>
       </property>
       <property>
              <name>dfs.permissions.enabled</name>
              <value>false</value>
       </property>
       <property>
             <name>dfs.namenode.http-address</name>
             <value>node01:9870</value>
       </property>
</configuration>

配置 mapred-site.xml

vi mapred-site.xml

<configuration>
       <property>

              <name>mapreduce.framework.name</name>

              <value>yarn</value>

       </property>

</configuration>

配置 yarn-site.xml

vi yarn-site.xml

<configuration>
       <property>

              <name>yarn.resourcemanager.hostname</name>

              <value>master</value>

       </property>

       <property>

              <name>yarn.nodemanager.aux-services</name>

              <value>mapreduce_shuffle</value>
       </property>
          
       <property>
    <name>yarn.application.classpath</name>
    <value>/usr/local/hadoop/etc/hadoop:/usr/local/hadoop/share/hadoop/common/lib/*:/usr/local/hadoop/share/hadoop/common/*:/usr/local/hadoop/share/hadoop/hdfs:/usr/local/hadoop/share/hadoop/hdfs/lib/*:/usr/local/hadoop/share/hadoop/hdfs/*:/usr/local/hadoop/share/hadoop/mapreduce/lib/*:/usr/local/hadoop/share/hadoop/mapreduce/*:/usr/local/hadoop/share/hadoop/yarn:/usr/local/hadoop/share/hadoop/yarn/lib/*:/usr/local/hadoop/share/hadoop/yarn/*</value>
       </property>
        <property>
            <name>yarn.resourcemanager.webapp.address</name>
            <value>node01:8088</value>
        </property>
</configuration>

hadoop-ha集群配置

配置 core-site.xml

vi core-site.xml

<configuration>
       <property>
              <name>fs.defaultFS</name>
              <value>hdfs://ns</value>
       </property>

       <property>
              <name>hadoop.tmp.dir</name>
              <value>/usr/local/hadoop/data</value>
       </property>
       <property>
              <name>io.file.buffer.size</name>
              <value>131702</value>
              <description>缓存大小设置,单位为KB,131072KB即为默认的64M</description>
       </property>
       <property>
              <name>ha.zookeeper.quorum</name>
              <value>master:2181,node01:2181,node02:2181</value>
       </property>
        <property>
            <name>hadoop.proxyuser.hue.hosts</name>
            <value>*</value>
        </property>
        <property>
            <name>hadoop.proxyuser.hue.groups</name>
            <value>*</value>
        </property>
</configuration>

配置 hdfs-site.xml

vi hdfs-site.xml

<configuration>

        <!-- 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>

        <!-- JournalNode数据存储目录 -->
        <property>
                <name>dfs.journalnode.edits.dir</name>
                <value>${hadoop.tmp.dir}/jn</value>
        </property>

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


        <!-- 集群中 NameNode 节点都有哪些 -->
        <property>
                <name>dfs.ha.namenodes.ns</name>
                <value>nn1,nn2,nn3</value> 
        </property>
        <!-- NameNode 的 RPC 通信地址 -->
        <property>
                <name>dfs.namenode.rpc-address.ns.nn1</name>
                <value>master:8020</value>
        </property>
        <property>
                <name>dfs.namenode.rpc-address.ns.nn2</name>
                <value>node01:8020</value>
        </property>

        <property>
                <name>dfs.namenode.rpc-address.ns.nn3</name>
                <value>node02:8020</value>
        </property>
        <!-- NameNode 的 http 通信地址 -->
        <property>
                <name>dfs.namenode.http-address.ns.nn1</name>
                <value>master:9870</value>
        </property>
        <property>
                <name>dfs.namenode.http-address.ns.nn2</name>
                <value>node01:9870</value>
        </property>
        <property>
                <name>dfs.namenode.http-address.ns.nn3</name>
                <value>node02:9870</value>
        </property>
        <!-- 指定 NameNode 元数据在 JournalNode 上的存放位置 -->
        <property>
                <name>dfs.namenode.shared.edits.dir</name>
                <value>qjournal://master:8485;node01:8485;node02:8485/ns</value>
        </property>
        <!-- 访问代理类:client 用于确定哪个 NameNode 为 Active -->
        <property>
                <name>dfs.client.failover.proxy.provider.ns</name>

                <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</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>
        <!-- 启用 nn 故障自动转移 -->
        <property>
                <name>dfs.ha.automatic-failover.enabled</name>
                <value>true</value>
        </property>
</configuration>

配置 mapred-site.xml

vi mapred-site.xml

<configuration>
       <property>

              <name>mapreduce.framework.name</name>

              <value>yarn</value>

       </property>

</configuration>

配置 yarn-site.xml

vi yarn-site.xml

<configuration>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>

        <!-- 开启日志聚集功能 -->
        <property>
                <name>yarn.log-aggregation-enable</name>
                <value>true</value>
        </property>
        <!-- 设置日志聚集服务器地址 -->
        <property>
                <name>yarn.log.server.url</name>
                <value>http://master:19888/jobhistory/logs</value>
        </property>
        <!-- 设置日志保留时间为 7 天 -->
        <property>
                <name>yarn.log-aggregation.retain-seconds</name>
                <value>604800</value>
        </property>

        <!-- 启用 resourcemanager ha -->
        <property>
                <name>yarn.resourcemanager.ha.enabled</name>
                <value>true</value>
        </property>


        <!-- 声明 resourcemanager 的地址 -->
        <property>
                <name>yarn.resourcemanager.cluster-id</name>
                <value>cluster-yarn1</value>
        </property>
        <!--指定 resourcemanager 的逻辑列表-->
        <property>
                <name>yarn.resourcemanager.ha.rm-ids</name>
                <value>rm1,rm2,rm3</value>
        </property>
        <!-- ========== rm1 的配置 ========== -->
        <!-- 指定 rm1 的主机名 -->
        <property>
                <name>yarn.resourcemanager.hostname.rm1</name>
                <value>master</value>
        </property>
        <!-- 指定 rm1 的 web 端地址 -->
        <property>
                <name>yarn.resourcemanager.webapp.address.rm1</name>
                <value>master:8088</value>
        </property>
        <!-- 指定 rm1 的内部通信地址 -->
        <property>
                <name>yarn.resourcemanager.address.rm1</name>
                <value>master:8032</value>
        </property>
        <!-- 指定 AM 向 rm1 申请资源的地址 -->
        <property>
                <name>yarn.resourcemanager.scheduler.address.rm1</name>
                <value>master:8030</value>
        </property>
        <!-- 指定供 NM 连接的地址 -->
        <property>
                <name>yarn.resourcemanager.resource-tracker.address.rm1</name>
                <value>master:8031</value>
        </property>
        <!-- ========== rm2 的配置 ========== -->
        <!-- 指定 rm2 的主机名 -->
        <property>
                <name>yarn.resourcemanager.hostname.rm2</name>
                <value>node01</value>
        </property>
        <property>
                <name>yarn.resourcemanager.webapp.address.rm2</name>
                <value>node01:8088</value>
        </property>
        <property>
                <name>yarn.resourcemanager.address.rm2</name>
                <value>node01:8032</value>
        </property>
        <property>
                <name>yarn.resourcemanager.scheduler.address.rm2</name>
                <value>node01:8030</value>
        </property>
        <property>
                <name>yarn.resourcemanager.resource-tracker.address.rm2</name>
                <value>node01:8031</value>
        </property>
        <!-- ========== rm3 的配置 ========== -->
        <!-- 指定 rm3 的主机名 -->
        <property>
                <name>yarn.resourcemanager.hostname.rm3</name>
                <value>node02</value>
        </property>
        <!-- 指定 rm3 的 web 端地址 -->
        <property>
                <name>yarn.resourcemanager.webapp.address.rm3</name>
                <value>node02:8088</value>
        </property>
        <!-- 指定 rm3 的内部通信地址 -->
        <property>
                <name>yarn.resourcemanager.address.rm3</name>
                <value>node02:8032</value>
        </property>
        <!-- 指定 AM 向 rm3 申请资源的地址 -->
        <property>
                <name>yarn.resourcemanager.scheduler.address.rm3</name>
                <value>node02:8030</value>
        </property>
        <!-- 指定供 NM 连接的地址 -->
        <property>
                <name>yarn.resourcemanager.resource-tracker.address.rm3</name>
                <value>node02:8031</value>
        </property>
        <!-- 指定 zookeeper 集群的地址 -->
        <property>
                <name>yarn.resourcemanager.zk-address</name>
                <value>master:2181,node01:2181,node02:2181</value>
        </property>


        <!-- 启用自动恢复 -->
        <property>
                <name>yarn.resourcemanager.recovery.enabled</name>
                <value>true</value>
        </property>


        <!-- 指定 resourcemanager 的状态信息存储在 zookeeper 集群 -->
        <property>
                <name>yarn.resourcemanager.store.class</name>
                <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
        </property>
        <!-- 环境变量的继承 -->
        <property>
                <name>yarn.nodemanager.env-whitelist</name>
                <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLAS SPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
        </property>

</configuration>

将hadoop 复制到节点 “/export/hadoop” 为自己hadoop安装的文件地址

scp -r /export/hadoop node01:/export
scp -r /export/hadoop node02:/export

hadoop-ha启动配置

启动JournalNode服务

JournalNode是Hadoop高可用架构中的一个重要组件,‌它负责编辑日志的管理和存储,‌以确保NameNode的数据一致性和高可用性。‌

先关闭hadoop集群包括hdfs,yarn和zookeeper,咋master节点启动JournalNode。

hdfs --daemon start journalnode

master节点初始化namenode

hdfs namenode -format

三个节点都启动zookeeper

zkServer.sh start

查看zookeeper启动状态,三个节点查看状态,只会有一个节点显示active,是正确的

zkServer.sh status

在master节点初始化ZKFC

这个命令会清除ZKFC的元数据,‌包括故障转移控制器的状态和配置信息。‌在使用此命令之前,‌需要确保ZooKeeper服务已经启动并且可用。‌该命令的主要作用是初始化或重置ZKFC,‌以便创建一个新的ZKFC实例或清除旧的配置信息和状态。‌

hdfs zkfc -formatZK

在node01、node02节点复制NameNode元数据

命令用于将Active NameNode的元数据目录内容复制到Standby NameNode的元数据目录下,‌以实现两者之间的元数据同步。‌这一操作通常在HDFS高可用(HA)配置中执行,‌特别是在初始化Standby NameNode或需要同步两个NameNode的元数据时。‌执行此命令可以确保Standby NameNode拥有与Active NameNode相同的元数据状态,‌从而在Active NameNode发生故障时,‌Standby NameNode能够迅速接管并继续提供服务,‌实现无缝的故障转移‌。‌

hdfs namenode -bootstrapStandby

启动hadoop

start-all.sh      #启动全部
start-dfs.sh     #启动dfs
start-yarn.sh    #启动yarn

查看yarn服务状态

yarn rmadmin -getServiceState rm1
yarn rmadmin -getServiceState rm2
yarn rmadmin -getServiceState rm3

hadoop高可用启动结果入下,即为正确

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值