十、Hadoop HA集群搭建过程(也可以下载文件)

22 篇文章 0 订阅
11 篇文章 0 订阅

环境:三台虚拟机,centos7,hadoop2.9.2,zookeeper3.4

1、zookeeper集群
2、hadoop-env配置java_home路径(每个节点都要配置为这个节点所在及其的java home路径)
3、配置core-site.xml
    <!-- hdfs集群使用名称为mycluster的集群,在hdfs-site中配置的nameservices -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://mycluster</value>
    </property>
    <!-- 指定hadoop临时目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/root/data/hadoopData</value>
    </property>
    
    <!-- 指定zookeeper地址,HA机制下,在zookeeper中记录哪个是active节点 -->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>local1:2181,local2:2181,local3:2181</value>
    </property>
4、配置hdfs-site.xml
    
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <!--hdfs的集群名称 -->
    <property>
        <name>dfs.nameservices</name>
        <value>mycluster</value>
    </property>
    
    <!-- mycluster有哪些namenode节点,这里为nn1,nn2 -->
    <property>
        <name>dfs.ha.namenodes.mycluster</name>
        <value>nn1,nn2</value>
    </property>
    
    <!-- nn1的RPC通信地址 -->
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn1</name>
        <value>local1:8020</value>
    </property>
    <!-- nn2的RPC通信地址 -->
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn2</name>
        <value>local2:8020</value>
    </property>
    
    <!-- nn1的http通信地址 -->
    <property>
        <name>dfs.namenode.http-address.mycluster.nn1</name>
        <value>local1:50070</value>
    </property>
    <!-- nn2的http通信地址 -->
    <property>
        <name>dfs.namenode.http-address.mycluster.nn2</name>
        <value>local2:50070</value>
    </property>
    
    <!-- 指定NameNode的元数据放在哪些机器的journalnode上,数据会放在下面指定的edits.dir下的mycluster目录下  -->
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://local1:8485;local2:8485;local3:8485/mycluster</value>
    </property>
    <!-- 指定JournalNode在本地磁盘存放数据的位置 -->
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/root/data/journalnodeData</value>
    </property>
    
    <!-- 配置隔离机制方法,即防止脑裂的机制,也可以指定自己的脚本实现防止脑裂的机制,多个机制用换行分割,即每个机制暂用一行-->
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>
    <!-- 使用sshfence隔离机制时需要ssh免登陆 -->
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/root/.ssh/id_rsa</value>
    </property>
    
    <!--关闭权限检查,也就是说任何用户都可以操作hdfs的文件了,如果不关闭,那么用户a是不能操作用户b的文件的-->
    <property>
        <name>dfs.permissions.enabled</name>
        <value>false</value>
    </property>
    
    <!-- 开启NameNode失败自动切换 -->
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
    
    <!-- 配置失败自动切换实现方式 -->
    <property>
        <name>dfs.client.failover.proxy.provider.mycluster</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    

namenode的ha由专门的zkfc进程进行失败处理,而yarn没有专门的进程进行处理,
而是把reourcemanager的状态信息写到zookeeper上,当nodemanager要与resourcemanager交互时,状态为standby的resourcemanager会把交互信息转发给active节点
    
5、配置mapred-site(和伪分布式一样,这个可没有什么高可用户需要配置)
    <!-- 指定mr框架为yarn方式 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    
    <!--配置历史服务器的信息,mr-jobhistory-daemon.sh start historyserver启动历史服务器会根据该配置启动-->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>local1:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>local1:19888</value>
    </property>
    
6、配置yarn-site

    <property>
       <name>yarn.nodemanager.aux-services</name>
       <value>mapreduce_shuffle</value>
    </property>
    
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    
    <!--任务历史服务器的地址,配置在mapred-site中,这里表示使用这个地址的历史服务器-->
    <property>
        <name>yarn.log.server.url</name>
        <value>http://local1:19888/jobhistory/logs</value>
    </property>
    
    <!--日志保留时间-->
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>86400</value>
    </property>
    
    
    <!-- 开启RM高可用 -->
    <property>
       <name>yarn.resourcemanager.ha.enabled</name>
       <value>true</value>
    </property>
    
    <!-- 指定RM高可用集群的集群id(集群名称) -->
    <property>
       <name>yarn.resourcemanager.cluster-id</name>
       <value>cluster-yarn1</value>
    </property>
    <!-- yarn的RM集群的节点的名称 -->
    <property>
       <name>yarn.resourcemanager.ha.rm-ids</name>
       <value>rm1,rm2</value>
    </property>
    
    <!-- 分别指定RM名称对应节点的地址 -->
    <property>
       <name>yarn.resourcemanager.hostname.rm1</name>
       <value>local2</value>
    </property>
    <property>
       <name>yarn.resourcemanager.hostname.rm2</name>
       <value>local3</value>
    </property>
    
    <!-- 指定zk集群地址 -->
    <property>
       <name>yarn.resourcemanager.zk-address</name>
       <value>local1:2181,local2:2181,local3:2181</value>
    </property>
    
    <!--启用自动恢复-->
    <property>
       <name>yarn.resourcemanager.recovery.enabled</name>
       <value>true</value>
    </property>
    
    <!--指定rm的状态信息存在zookeeper集群中-->
    <property>
       <name>yarn.resourcemanager.store.class</name>
       <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
    </property>
    

    <property> 
        <name>yarn.resourcemanager.webapp.address.rm1</name>  
        <value>local2:8088</value> 
    </property>  

    <property> 
        <name>yarn.resourcemanager.webapp.address.rm2</name>  
        <value>local3:8088</value> 
    </property>

    
    

7、配置slaves文件
local1
local2
local3
namenode所在机器的slaves应该写所有datanode机器的地址。
resourceanager所在机器的slaves应该写所有nodemanager机器的地址。
为什么这么做?请继续往后看:

8、解释原因
(1)start-dfs.sh脚本执行时,会通过hdfs-site配置文件中获取namenode的地址信息,然后启动HA集群中所有namenode节点,
然后远程启动当前机器的slaves文件的地址对应机器上的的datanode。
(2)start-yarn.sh脚本执行时,只会启动本机的resourcemanager,然后远程启动当前机器的slaves文件的地址对应机器上的的nodemanager,
(如果执行start0-yarn.sh脚本的机器上的配置文件中配置的RM并不在本机上,那么该脚本只会远程启动slaves中配置的的机器上的nodemanager)
启动另一台机器上的resourcemanager还需要到那台及其上活动使用yarn-dea.... start resourcemanager 手动启动,不像hdfs一样,用start-dfs.sh就可以全部启动。


一般情况下,datanode和nodemanager是一对一存在同一台机器上的,即local1有一个datanode,那么就会有一个nodemanager,local2、local3也是如此,有datanode就会有一个nodemanager。
所以namenode的机器与resourcemanager的机器的slaves文件的内容应该是一样的。

9、配置文件写完了,接下来就是启动了
(1)在namenode机器和RM所在的机器上配置SSH分别对datanode和nodemanager节点机器的免密登录。。这个百度上很多,也可以看我的其他博客。
(2)将上面的配置每个节点都复制一份
(3)启动zookeeper集群。
(4)启动历史服务器,历史服务器配置在mapred-site中。单点非集群的
        mr-jobhistory-daemon.sh start historyserver

(5)启动journalnode,配置文件中在local1、local2、local3都配置了一个journalnode
所以在三台机器上都执行hadoop-daemon.sh start journalnode启动节点。

(6)格式化HDFS(如果只是重启了,以前格式化过,这步应该省略,如果不省略,一定再执行一次这个命令的话,    则要注意删除以下几点中创建的文件)
    2.7.1#在weekend01上执行命令:
     hdfs namenode -format   
     该命令就是创建namenode记录的数据文件夹,在配置文件中配置的本地目录创建fsimage等信息,在journalnode创建存储edits log文件的相关文件夹
     (注意,如果以前格式化过,那么需要把journalnode下的namenode数据清除,这里是5、6、7三台的journalnode目录下删除ns1文件夹)
    
    格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,像fsimage镜像文件就在这里面,
    为了两台namenode的fsimage从一开始就一样,所以需要从local1拷贝到local2上,如下:
    《1》此时在local1上使用hadoop-daemon.sh start namenode 单独启动该机器上的namenode,
    然后在local2上执行hdfs namenode -bootstrapStandby,这时local2也会从local1拷贝上面的格式化数据,
    如果不先启动local1的namenode,那么hdfs namenode -bootstrapStandby是无法拉取到格式化数据的。
    
    这样local2也算是格式化完成了。和local1的namenode数据一致。

    《2》停掉local1的namenode
(7)格式化ZKFC(如果只是重启了,以前执行过,这步应该省略。如果不是则继续,在local1上执行即可,会自动读取配置文件,然后分别远程执行其他机器的脚本),就是格式化一下zookeeper的一些hadoop ha的数据,不启动进程
    hdfs zkfc -formatZK

    
(8)启动hdfs
    start-dfs.sh    会启动所有namenode和datanode

(9)启动yarn
    在一个rm节点上执行start-yarn.sh,此时会启动本节点上的RM和所有nodemanager,但不会启动HA机制的另一个RM,另一个RM需要手动启动。
    在另一个RM节点机器上yarn-daemon.sh start resourcemanager
    
    

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值