搭建Hadoop HA集群

配置hdfs-site.xml文件

<configuration>
        <property>
                <name>dfs.replication</name>
                <value>2</value>
        </property>
           <property>
                <name>dfs.nameservices</name>
                <value>mycluster</value>
           </property>
           <property>
                <name>dfs.ha.namenodes.mycluster</name>
                <value>nn1,nn2</value>
           </property>
            <property>
                <name>dfs.namenode.rpc-address.mycluster.nn1</name>
                <value>centos01:8020</value>
           </property>
            <property>
                <name>dfs.namenode.rpc-address.mycluster.nn2</name>
                <value>centos02:8020</value>
           </property>
           <property>
                <name>dfs.namenode.http-address.mycluster.nn1</name>
                <value>centos01:50070</value>
           </property>
           <property>
                <name>dfs.namenode.http-address.mycluster.nn2</name>
                <value>centos02:50070</value>
           </property>
           <property>
                <name>dfs.namenode.shared.edits.dir</name>
                <value>qjournal://centos01:8485;centos02:8485;centos03:8485/mycluster</value>
           </property>
         <property>
                <name>dfs.journalnode.edits.dir</name>
                <value>/usr/local/hadoop/tmp/dfs/jn</value>
        </property>
          <property>
                <name>dfs.client.failover.proxy.provider.mycluster</name>
             <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
        </property>

        <property>
                <name>dfs.ha.fencing.methods</name>
                <value>sshfence</value>
        </property>
        <property>
                <name>dfs.ha.fencing.ssh.private-key-files</name>
                <value>/home/hadoop/.ssh/id_rsa</value>
        </property>
        <property>
                <name>dfs.ha.automatic-failover.enabled.mycluster</name>
                <value>true</value>
        </property>
</configuration>

说明:

dfs.replication:文件在HDFS系统中的副本数。

dfs.nameservices:为nameservice设置一个逻辑名称ID,名称ID可以自定义,这里设置为mycluster,需要使用这个逻辑名称ID作为配置属性的值。后续配置属性将引用这个ID。

dfs.ha.namenodes.mycluster:nameservice中每个nameservice的唯一标识符。属性值是一个以逗号分割的NameNodeID列表。这将被DataNode用于确定集群中的所有NameNode。这里使用mycluster作为nameserviceID,并且使用nn1和nn2作为NameNode的单个ID。

dfs.namenode.rpc-address.mycluster.nn1:设置NameNode的RPC监听地址,需要设置NameNode进程的完整地址和RPC端口。

dfs.namenode.rpc-address.mycluster.nn2:设置另一个NameNode的RPC监听地址,需要设置NameNode进程的完整地址和RPC端口。

dfs.namenode.http-address.mycluster.nn1:设置NameNode的HTTP Web端监听地址,类似于上面的PRC地址,可以通过浏览器查看NameNode状态。

dfs.namenode.rpc-address.mycluster.nn2:设置另一个NameNode的HTTP Web端监听地址,类似于上面的PRC地址,可以通过浏览器查看NameNode状态。

dfs.namenode.shared.edits.dir:设置一组JournalNode的URI地址,活动NameNode将元数据写入这些JournalNode,而备用NameNode则读取这些元数据信息,并作用在内存的目录树中。如果JournalNode有多个节点,则使用分号分割。

dfs.journalnode.edits.dir:JournalNode所在节点上的一个目录,用于存放元数据和其他状态信息。

dfs.client.failover.proxy.provider.mycluster:客户端与活动状态的NameNode进行交互的JAVA实现类。由于有两个NameNode,只有活动NameNode可以对外提供读写服务,当客户端访问HDFS时,客户端将通过该类寻找当前的活动NameNode。目前Hadoop的唯一实现是ConfiguredFailoverProxyProvider类,除非用户自己对其定制,否则应该使用这个类。

dfs.ha.fencing.methods:解决HA集群脑裂问题(即出现两个NameNode同时对外提供服务,导致系统处于不一致状态)。在HDFS HA中,JournalNode只允许一个NameNode对其写入数据,不会出现两个NameNode的问题。但当主/备切换时,之前的活动NameNode能仍在处理客户端的RPC请求,为从需要增加隔离机制,将之前的活动NameNode杀死。常用的fence方法是sshfence,使用SSH需要指定SSH通信使用的密钥文件。

dfs.ha.fencing.ssh.private-key-files:指定上述属性SSH通信使用的密钥文件在系统中的位置。配置SSH无密钥登录所生成的私钥文件,一般在当前用户主目录下的.ssh文件夹中。

dfs.ha.automatic-failover.enabled.mycluster:开启自动故障转移,mycluster为自定义配置的nameserviceID。

配置core-site.xml文件

<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://mycluster</value>
        </property>
<property>
                <name>hadoop.tmp.dir</name>
                <value>file:/usr/local/hadoop/tmp</value>
        </property>
        <property>
                <name>ha.zookeeper.quorum</name>
                <value>centos01:2181,centos02:2181,centos03:2181</value>
        </property>
</configuration>

说明:

fs.defaultFS:HDFS的默认访问路径,也是NameNode的访问地址。

hadoop.tmp.dir:Hadoop数据文件的存放目录。该参数如果不配置默认指向/tmp目录,而/tmp目录在系统重启后会自动清空,从而导致Hadoop的文件系统数据丢失。

ha.zookeeper.quorum:指定ZooKeeper集群个节点主机名及访问端口。

配置yarn-site.xml文件

<configuration>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
        <property>
                <name>yarn.resourcemanager.ha.enabled</name>
                <value>true</value>
        </property>
        <property>
                <name>yarn.resourcemanager.cluster-id</name>
                <value>cluster1</value>
        </property>
         <property>
                <name>yarn.resourcemanager.ha.rm-ids</name>
                <value>rm1,rm2</value>
        </property>
        <property>
                <name>yarn.resourcemanager.hostname.rm1</name>
                <value>centos01</value>
        </property>
        <property>
                <name>yarn.resourcemanager.hostname.rm2</name>
                <value>centos02</value>
        </property>
        <property>
                <name>yarn.resourcemanager.webapp.address.rm1</name>
                <value>centos01:8088</value>
        </property>
        <property>
                <name>yarn.resourcemanager.webapp.address.rm2</name>
                <value>centos02:8088</value>
        </property>
        <property>
                <name>yarn.resourcemanager.zk-address</name>
                <value>centos01:2181,centos02:2181,centos03:2181</value>
        </property>
        <property>
                <name>yarn.resourcemanager.recovery.enabled</name>
                <value>true</value>
        </property>
        <property>
                <name>yarn.resourcemanager.store.class</name>
                <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
        </property>
</configuration>

说明:

yarn.nodemanager.aux-services:NodeManager上运行的附属服务,需配置成mapreduce_shuffle才可正常运行MapReduce程序。YARN提供了该配置项用于再NodeManager上扩展自定义服务,MapReduce的Shuffle功能正式一种扩展服务。

yarn.resourcemanager.ha.enabled:开启Resourcemanager HA功能。

yarn.resourcemanager.cluster-id:标识集群种的Resourcemanager。如果设置该属性,需要确保所有的Resourcemanager在配置中都有自己的ID。

yarn.resourcemanager.ha.rm-ids:Resourcemanager的逻辑ID列表。可以自定义,这里设置为rm1和rm2。后面的配置将引用该ID。

yarn.resourcemanager.hostname.rm1:指定Resourcemanager对应的主机名。另外可以设置Resourcemanager的每个服务地址。

yarn.resourcemanager.hostname.rm2:指定另一个Resourcemanager对应的主机名。

yarn.resourcemanager.webapp.address.rm1:指定Resourcemanager的Web端访问地址。

yarn.resourcemanager.webapp.address.rm2:指定另一个Resourcemanager的Web端访问地址。

yarn.resourcemanager.zk-address:指定集成的ZooKeeper的服务地址。

yarn.resourcemanager.recovery.enabled:启用Resourcemanager重启的功能,默认为false。

yarn.resourcemanager.store.class:用于Resourcemanager状态存储的类,默认为org.apache.hadoop.yarn.server.resourcemanager.recovery.FileSystemRMStateStore,基于Hadoop文件系统的实现。另外,还可以指定org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore,该类为基于ZooKeeper的实现。这里指定该类。

把三个文件复制到其他的节点

scp -r /etc/hadoop/hdfs-site.xml hadoop@centos02:/usr/local/hadoop/etc/hadoop/
scp -r /etc/hadoop/hdfs-site.xml hadoop@centos03:/usr/local/hadoop/etc/hadoop/
scp -r /etc/hadoop/core-site.xml hadoop@centos02:/usr/local/hadoop/etc/hadoop/
scp -r /etc/hadoop/core-site.xml hadoop@centos03:/usr/local/hadoop/etc/hadoop/
scp -r /etc/hadoop/yarn-site.xml hadoop@centos02:/usr/local/hadoop/etc/hadoop/
scp -r /etc/hadoop/yarn-site.xml hadoop@centos03:/usr/local/hadoop/etc/hadoop/

进入ZooKeeper安装目录,启动ZooKeeper

bin/zkServer.sh start

初始化HA在ZooKeeper的状态

bin/hdfs zkfc -formatZK

启动Hadoop

start-all.sh

启动ZKFC守护进程

sbin/hadoop-daemon.sh start zkfc

两个配置了NameNode节点的进程都执行,先执行命令开启守护进程的NameNode为avtive,后执行的为standby。

查看各节点启动进程

jps

centos01节点包含NameNode, ResourceManager,Jps,DataNode,NodeManager,QuorumPeerMain,DFSZKFailoverController,journalNode。

centos02节点包含NameNode, ResourceManager,Jps,DataNode,NodeManager,QuorumPeerMain,DFSZKFailoverController,journalNode。

centos03节点包含Jps,DataNode,NodeManager,QuorumPeerMain,journalNode。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hadoop High Availability (HA) 集群是为了提高Apache Hadoop集群的可靠性和可用性而设计的一种架构。它通过将关键服务(如NameNode和JobTracker)冗余部署,并在主节点故障时自动切换到备用节点,保证了数据处理任务的持续进行。下面是Hadoop HA集群搭建的基本步骤: 1. **安装并配置Hadoop**: - 安装Hadoop到两个或更多节点上,每个节点都是一个独立的Hadoop集群实例。 - 配置`core-site.xml`和`hdfs-site.xml`文件,设置集群的名称节点(NameNode)和数据节点(DataNodes)。 2. **启用HDFS HA**: - 在`hdfs-site.xml`中,设置`ha.fencing.methods`指定节点之间的心跳检测方法,例如SSH或JMX。 - 创建一个HDFS HA配置文件,如`core-site.xml.template`,并在实际集群中创建对应的配置文件。 3. **配置高可用NameNode**: - 设置`ha.zookeeper.quorum`为ZooKeeper集群地址,用于选举新的Active NameNode。 - 配置`dfs.nameservice.id`定义NameNode服务名。 - 在`hdfs-site.xml`中启用`dfs.ha.namenodes.<nameservice-id>`属性。 4. **设置Secondary NameNode**: - 在`hdfs-site.xml`中启用`dfs.ha.automatic-failover.enabled`,并配置`dfs.ha.automatic-failover.retry-interval`和`dfs.ha.automatic-failover.timeout`。 5. **配置ZooKeeper**: - 如果没有使用ZooKeeper,需要配置一个或多个ZooKeeper服务器作为NameNode服务选举的协调器。 6. **启动HDFS服务**: - 启动HDFS集群,包括两个NameNode(一个为主,一个为备)和足够的DataNodes。 7. **验证集群状态**: 使用`hdfs haadmin`命令检查集群状态、启动/关闭心跳检测和手动触发Failover。 8. **配置YARN HA**: 对于YARN资源管理器,类似地,需要配置ResourceManager HA(RMHA),并设置HA模式。 9. **测试和监控**: 确保服务可用,执行负载测试,并设置监控工具(如Hadoop Metrics2或Ganglia)来监控性能和异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值