0


【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高可用启动结果入下,即为正确

标签: hadoop zookeeper

本文转载自: https://blog.csdn.net/qq_46132558/article/details/141138558
版权归原作者 prince&陌 所有, 如有侵权,请联系我们删除。

“【Hadoop-HA 搭建】hadoop-ha 高可用集群配置”的评论:

还没有评论