Hadoop--HA(高可用)

1.HA(高可用)方案

1.namenode HA

  • 由两(多)个NameNode组成,一个处于active状态,另一个处于standby状态。Active NameNode对外提供服务,而Standby NameNode则不对外提供服务,仅同步active namenode的状态,以便能够在它失败时快速进行切换。
  • 两(多)个NameNode,会出现脑裂(brain split),两(多)个NameNode被认定为active。官方提供了两种HDFS HA的解决方案,一种是NFS,另一种是QJM。这里我们使用简单的QJM。在该方案中,主备NameNode之间通过一组JournalNode同步元数据信息,一条数据只要成功写入多数JournalNode即认为写入成功。通常配置奇数个JournalNode。
  • 配置zookeeper集群,zookeeper对namenode进行监听,用于ZKFC(DFSZKFailoverController)故障转移,当Active NameNode挂掉了,会自动切换Standby NameNode为active状态

2.yarn HA

两个ResourceManager,一个是Active,一个是Standby,状态由zookeeper进行协调

2.HA搭建

官网说明
在这里插入图片描述

1.集群规划

主机ip进程
hadoop0192.168.0.105QuorumPeerMain、DataNode、NodeManager、JournalNode、NameNode、zkfc、ResourceManager
hadoop1192.168.0.106QuorumPeerMain、DataNode、NodeManager、JournalNode、NameNode、zkfc、ResourceManager
hadoop2192.168.0.107QuorumPeerMain、DataNode、NodeManager、JournalNode、

2./etc/hadoop/下的配置文件

core-site.xml
<configuration>
	<!--hdfs集群名称-->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://mycluster</value>
    </property>
    <!-- 指定hadoop运行时产生文件的存储路径(工作目录) -->
    <property>
        <name>hadoop.tmp.dir</name>
	<value>/home/fcc/opt/hadoop/hadoop-2.9.2/data/</value>
    </property>
    <!-- 指定zookeeper地址 -->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>zookeeper0:2181,zookeeper1:2182,zookeeper2:2183</value>
    </property>

    <!--hadoop链接zookeeper的超时时长设置
    <property>
        <name>ha.zookeeper.session-timeout.ms</name>
        <value>3000</value>
        <description>ms</description>
    </property>-->
</configuration>
hdfs-site.xml
<configuration>
	<!--hdfs集群服务名称-->
	<property>
		<name>dfs.nameservices</name>
		<value>mycluster</value>
	</property>
	<!--集群的namenode-->
    	<property>
        	<name>dfs.ha.namenodes.mycluster</name>
        	<value>nn1,nn2</value>
	</property>
	<!--nn1的RPC通信地址-->
 	<property>
        	<name>dfs.namenode.rpc-address.mycluster.nn1</name>
		<value>hadoop0:9000</value>
	</property>

	<!--nn1的http通信地址-->
 	<property>
        	<name>dfs.namenode.http-address.mycluster.nn1</name>
		<value>hadoop0:50070</value>
	</property>

	<!--nn2的RPC通信地址-->
 	<property>
        	<name>dfs.namenode.rpc-address.mycluster.nn2</name>
		<value>hadoop1:9000</value>
	</property>

	<!--nn2的http通信地址-->
 	<property>
        	<name>dfs.namenode.http-address.mycluster.nn2</name>
		<value>hadoop1:50070</value>
	</property>
	<!--指定namenode的元数据在JournalNode上的存放位置-->
	<property>
		<name>dfs.namenode.shared.edits.dir</name>
		<value>qjournal://hadoop0:8485;hadoop1:8485;hadoop2:8485/mycluster</value>
	</property>
	<!--指定JournalNode在本地磁盘存放数据的位置-->
	<property>
		<name>dfs.journalnode.edits.dir</name>
		<value>/home/fcc/opt/hadoop/hadoop-2.9.2/journaldata</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>
	<!--配置隔离机制方法,多个机制用换行分,即每个机制一行-->
	<property>
		<name>dfs.ha.fencing.methods</name>
		<value>sshfence</value>
	</property>
	<!--使用sshfence隔离机制时需要ssh免登陆-->
	<property>
		<name>dfs.ha.fencing.ssh.private-key-files</name>
		<value>/home/fcc/.ssh/id_rsa</value>
	</property>
	<!--配置sshfence隔离机制超时时间-->
	<property>
		<name>dfs.ha.fencing.ssh.connect-timeout</name>
		<value>10000</value>
	</property>
    <!-- 关闭权限检查-->
    <property>
            <name>dfs.permissions.enable</name>
            <value>false</value>
    </property>
</configuration>

mapre-site.xml
<configuration>
	<!--指定mapreduce框架为yarn-->
	<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
	</property>
</configuration>
yarn-site.xml
<configuration>
	<!--开启RM高可用-->
	<property>
		<name>yarn.resourcemanager.ha.enabled</name>
		<value>true</value>
	</property>
	<!--指定RM的cluster id-->
	<property>
		<name>yarn.resourcemanager.cluster-id</name>
		<value>yrcluster</value>
	</property>
    <!-- 指定RM的名字 -->
	<property>
	    <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
	</property>
    <!-- 分别指定RM的地址 rm1-->
	<property>
	    <name>yarn.resourcemanager.hostname.rm1</name>
        <value>hadoop0</value>
	</property>
    <!-- 分别指定RM的地址 rm2-->
	<property>
	    <name>yarn.resourcemanager.hostname.rm2</name>
        <value>hadoop1</value>
	</property>
    <!-- 指定zk集群地址 -->
	<property>
	    <name>yarn.resourcemanager.zk-address</name>
        <value>zookeeper0:2181,zookeeper1:2182,zookeeper2:2183</value>
	</property>
	<property>
		<name>yarn.nodemanager.aux-services</name>
		<value>mapreduce_shuffle</value>
	</property>
</configuration>
slaves文件

slaves文件指定子节点的位置
启动hdfs的实例上的slaves需指定DataNode的位置
启动yarn的实例上的slaves需指定NodeManager的位置

配置ssh免密登录
  1. 在hadoop0上启动hdfs,所以hadoop0到hadoop1、hadoop2上ssh免密登录
  2. hadoop0、hadoop1两台作为namenode要互相通信,作为resourceManager要互相通信,所以hadoop0和hadoop1之间要互相ssh免密登录
  3. 在hadoop0上生成一对钥匙 ssh-keygen -t rsa
    ssh-copy-id hadoop1
    ssh-copy-id hadoop2

3.集群启动

1.启动zk集群

(hadoop0,hadoop1,hadoop2上个自启动)
zkServer.sh start
查看实例状态zkServer.sh status,一个leader,两个follower

2.启动journalnode进程

hadoop0,hadoop1,hadoop2上个自启动
sbin/hadoop-daemon.sh start journalnode
在这里插入图片描述
jps查看JournalNode进程启动成功
在这里插入图片描述

3.格式化HDFS

  1. 在hadoop0(active)上执行:hdfs namenode -format
    格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件
  2. hadoop0和hadoop1作为两个namenode要保持同步,可以将hadoop0(active)中hadoop.tmp.dir(工作目录)下的文件拷贝到hadoop1(standby)的hadoop.tmp.dir(工作目录)
    scp -r data/ hadoop1:/home/xxx
    或者在hadoop1(standby)上执行:hdfs namenode -bootstrapStandby

4.格式化ZKFC

hdfs zkfc -formatZK 在hadoop0(namenode active)上执行即可
在这里插入图片描述

5.启动HDFS

sbin/start-dfs.sh 在hadoop0(dataNode 的master)上执行即可
在这里插入图片描述

6.启动YARN

sbin/start-yarn.sh 在hadoop0(resourceManager的active)上执行即可
在这里插入图片描述
在这里插入图片描述
如果在hadoop1(resourceManager的standby)resourceManager没起,则在hadoop1上执行:sbin/yarn-daemon.sh start resourcemanager

7.HDFS web页面 & YARN web页面

HDFS web页面 192.168.0.105:50070或192.168.0.106:50070
YARN web页面 192.168.0.105:8088 resourcemanager cluster 的master

测试

  • 杀死namenode(active)这个进程,namenode(standby)的状态会变为active
  • hadoop fs -put 传一个大文件过程中,把namenode(active)这个进程杀掉,最后文件仍然上传成功

bin/hdfs dfsadmin -report 查看hdfs的各节点状态信息

bin/hdfs haadmin -getServiceState nn1 获取一个namenode节点的HA状态

sbin/hadoop-daemon.sh start namenode 单独启动一个namenode进程

./hadoop-daemon.sh start zkfc 单独启动一个zkfc进程

https://blog.csdn.net/baidu_28997655/article/details/81906591

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值