Hadoop高可用集群配置

本文详细介绍了Hadoop高可用集群的配置步骤,包括配置文件、删除tmp和logs文件夹、启动JournalNode、主副结点初始化、Zookeeper服务初始化以及启动HDFS服务。JournalNode在HA中负责保持NameNode之间的Editlog同步,而Zookeeper则用于NameNode的错误感知和故障切换。此外,还解释了NameNode初始化的作用和高可用集群的关键概念。
摘要由CSDN通过智能技术生成

一、Hadoop高可用集群的配置

第一步:配置文件

1、 [root@hadoop2 hadoop]# vi etc/hadoop/core-site.xml

<configuration>
    <property>
    	#这里的hadoopHA是自定义的集群名称
        <name>fs.defaultFS</name>
        <value>hdfs://hadoopHA</value>
    </property>
    #下面两个配置还是保留完全分布式架构的配置
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/hadoop/tmp</value>
    </property>
    <property>
        <name>hadoop.proxyuser.root.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.root.groups</name>
        <value>*</value>
    </property>
    # 使用zookeeper管理的结点列表
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>num01:2181,num02:2181,num03:2181</value>
    </property>
</configuration>

2、 [root@hadoop2 hadoop]# vi etc/hadoop/hdfs-site.xml

<configuration>
	# 下面两项可以不用修改
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>num02:50090</value>
    </property>
    # 集群名称
    <property>
        <name>dfs.nameservices</name>
        <value>hadoopHA</value>
    </property>
    # 设置高可用主副结点
    <property>
        <name>dfs.ha.namenodes.hadoopHA</name>
        <value>nn1,nn2</value>
    </property>
    # 设置两个namenode的RCP通信地址
    <property>
        <name>dfs.namenode.rpc-address.hadoopHA.nn1</name>
        <value>num01:9000</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.hadoopHA.nn2</name>
        <value>num03:9000</value>
    </property>
    # 设置两个namenode的http通信地址
    <property>
        <name>dfs.namenode.http-address.hadoopHA.nn1</name>
        <value>num01:50070</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.hadoopHA.nn2</name>
        <value>num03:50070</value>
    </property>
    # 指定namenode元数据在journalnode上的存放地址
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://num01:8485;num02:8485;num03:8485/hadoopHA</value>
    </property>
    # 配置隔离机制,同一时刻只能保有一个namenode对外通信
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>
    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>
            sshfence
            shell(/bin/true)
        </value>
    </property>
    # 使用ssh无密钥登录
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/root/.ssh/id_rsa</value>
    </property>
    # 设置journalnode服务器存储目录
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/opt/hadoop/data/jn</value>
    </property>
    # 关闭权限检查
    <property>
        <name>dfs.permissions.enable</name>
        <value>false</value>
    </property>
    # 访问代理类: client, mycluster, active 配置失败自动切换实现方
式
    <property>
        <name>dfs.client.failover.proxy.provider.hadoopHA</name>
    	<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>
    # 设置自动故障切换
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
</configuration>

第二步:删除所有机器都tmp和logs文件夹

rm -rf logs/ rm -rf tmp/

第三步:启动journalnode(所有机器都要启动)

[root@hadoop2 hadoop]# hadoop-daemon.sh start journalnode

第四步:主结点操作初始化

[root@hadoop2 hadoop]# hdfs namenode -format

第五步:将初始化生成的tmp文件夹同步给副结点(有两种方式)

第一种:直接使用scp同步:scp -r tmp @主机名:$PWD
第二种:执行同步命令:hdfs namenode -bootstrapStandby

第六步:主节点初始化zookeeper服务

[root@hadoop2 hadoop]# hdfs zkfc -formatZK

第七步:主节点启动hdfs服务:

[root@hadoop2 hadoop]# start-hdfs.sh

服务启动后可以看到,设置的主副结点都有namenode和DFSZKFailoverController服务

在这里插入图片描述

二、什么是高可用集群

1、什么是高可用集群
高可用集群(High Availability Cluster,简称HA Cluster),是指以减少服务中断时间为目的的服务器集群技术。它通过保护用户的业务程序对外不间断地提供服务,把因为软件,硬件,人为造成的故障对业务的影响降低到最小程度。总而言之就是保证公司业务7*24小时不宕机

2、高可用集群的衡量标准

通常用平均无故障时间(MTTF:mean time to failure)来衡量系统的可靠性,用平均故障维修时间(MTTR:Mean Time Between Failures)来度量系统的可维护性。于是可用性被定义为: HA=MTTF/(MTTF+MTTR)*100%。

3、高可用集群实现原理

高可用集群主要是实现自动侦测(Auto-Detect)故障、自动切换/故障转移(FailOver)和 自动恢复(FailBack)。

(1:自动侦测、故障检测:通过集群各节点间心跳信息判断节点是否出现故障;

(2:当有节点(一个或多个)和另外节点互相接收不到对方心跳信息时,如何决定哪一部分接点是正常运行的,而哪一部分是出现故障需要隔离的呢?

这时候通过法定票数(quorum)决定,即当有节点故障时,节点间投票决定哪个节点是有问题,得票数大于半数为合法,每个节点可以设置其票数,当一个节点能和另一个节点保持心跳信息,该节点就获取了另一个节点的票数,该节点获得就是正常节点,反之为故障节点。

三、JournalNode的作用

**为了使Standby节点保持其状态与Active 节点同步,两个节点都与一组称为"JournalNodes"(JN)的单独守护进程进行通信。**当Active 节点执行任何命名空间修改时,它会持久地将修改记录记录到这些JN的大多数中。Standby节点能够从JN读取edit log内容,并不断监视它们以查看edit log内容的更改。当“Standby节点”看到edit log变化时,会将其应用到自己的命名空间。发生故障转移时,备用服务器将确保在将自身升级为活跃状态之前,已从JournalNode读取所有edit log内容。这样可确保在发生故障转移之前,命名空间状态已经完全同步。

JournalNode守护程序相对较轻,因此可以合理地将这些守护程序与其他Hadoop守护程序(例如NameNodes,JobTracker或YARN ResourceManager)并置在计算机上。

注意:必须至少有3个JournalNode守护程序,因为必须将编辑日志修改写入大多数JN。这将允许系统容忍单个计算机的故障。您可能还会运行3个以上的JournalNode,但是为了实际增加系统可以容忍的故障数量,您应该运行奇数个JN(即3、5、7等)。请注意,当与N个JournalNode一起运行时,系统最多可以容忍(N-1)/ 2个故障,并继续正常运行

四、主节点namenode初始化的作用

1 初始化操作
bin/hdfs namenode -format

初始化作用:
1.会生成namenode的文件目录结构
in_use.lock是在使用的时候生成和
edits相关的也是在使用之后生成
2. 确定了三个id namespace cluster blockpool
namespaceID:是系统文件的唯一标识符,格式化文件系统之后会生成
clusterID :生成的集群的ID
blockpoolID:针对每一个namespace对应的blockpool的ID 包含储存节点IP等信息
3. 生成了fsimage_00000

五、journalnode和zookeeper区别

journalnode的作用是在HA的两个namenode之间保持editlog的共享同步。

zookeeper用于两个namenode之间互相的错误感知(active的掉了,standby的可以看见)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值