Hadoop高可用HA搭建

在搭建HA之前需要先把Hadoop以及zookeeper搭建完成,具体的可参考前面的文章

一、修改配置文件

core-site.xml文件配置

1、指定hdfs的nameservice为ns,ns就是nameservice的缩写;
2、指定zookeeper的地址;

<configuration>
<!-- 指定hdfs的nameservice为ns -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop/tmp</value>
</property>
<!--指定zookeeper的地址-->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
</configuration>

hdfs-site.xml配置

1、指定名称服务,要和core-site.xml中的一致;
2、指定名称服务下的namenode节点;
3、http地址,50070端口;
4、rpc地址,9000端口;
5、namenode在journalNode(datanode)上存放数据的端口8485;
6、开启namenode失败自动切换实现方式;
7、配置namenode自动切换实现方式
8、配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行;
9、sshfence超时设置

<configuration>
<!-- 完全分布式集群名称 -->
	<property>
		<name>dfs.nameservices</name>
		<value>ns</value>
	</property>

	<!-- 集群中NameNode节点都有哪些,这里是hadoop1和hadoop2 -->
	<property>
		<name>dfs.ha.namenodes.ns</name>
		<value>hadoop01,hadoop2</value>
	</property>

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

	<!-- hadoop02的RPC通信地址 -->
	<property>
		<name>dfs.namenode.rpc-address.ns.hadoop2</name>
		<value>hadoop2:9000</value>
	</property>

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

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

	<!-- 指定NameNode元数据在JournalNode上的存放位置 -->
	<property>
		<name>dfs.namenode.shared.edits.dir</name>
	<value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485/ns</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>
	<!-- sshfence超时设置-->
	<property>
        <name>dfs.ha.fencing.ssh.connect-timeout</name>
        <value>30000</value>
	</property>
	<property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
	</property>
	<!-- 访问代理类:client,mycluster,active配置失败自动切换实现方式-->
	<property>
		<name>dfs.client.failover.proxy.provider.mycluster</name>
	<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
	</property>
<!--开启namenode失败自动切换实现方式-->
<property>
       <name>dfs.ha.automatic-failover.enabled</name>
       <value>true</value>
 </property>

	<property>
   <name>dfs.replication</name>
   <value>3</value>
  </property>
</configuration>

yarn.site.xml配置

1、开启resourcemanager高可用;
2、指定rm(resourcemanager)集群id;
3、指定rm集群的名字;
4、rm的映射关系;
5、指定zookeeper集群地址;

<!-- 1、开启RM高可用 -->
<property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
</property>
<!--2、指定rm集群id-->
<property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>cluster_id</value>
</property>
<!--3、指定rm集群的名字 -->
<property>
         <name>yarn.resourcemanager.ha.rm-ids</name>
         <value>rm1,rm2</value>
</property>
<!--4、指定rm映射关系-->
<property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>hadoop1</value>
</property>
<property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>hadoop2</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address.rm1</name>
        <value>hadoop1:8088</value>
</property>
<property>
        <name>yarn.resourcemanager.webapp.address.rm2</name>
        <value>hadoop2:8088</value>
</property>
<!-- 5、指定zookeeper集群地址 -->
<property>
       <name>yarn.resourcemanager.zk-address</name>
       <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
</property>

文件配置完成后,需要把文件复制到另外两台虚拟机:

scp core-site.xml hadoop2:$PWD
scp hdfs-site.xml hadoop2:$PWD
scp yarn-site.xml hadoop2:$PWD

二、启动

在启动之前删除hadoop下的tmp文件和logs文件(三个节点都要删)
先启动journalnode,因为在高可用下,格式化format需要借助NameNode才能运行,但是我们已经关闭了所有的进程,所以就需要有一个能代替它的程序,所有启动journalNode。有时候可能不需要启动journalnode 也可以完成格式化。
这里我用了三台虚拟机,所以三台虚拟机都需要启动

hadoop-daemon.sh start journalnode

启动完成后,选择一个主虚拟机进行操作即可。
格式化

hadoop namenode -format

把主节点新产生的tmp文件服饰到备用节点:

scp -r tmp/ hadoop2:$PWD

完成后,启动hdfs:
在这里插入图片描述
启动zookeeper,三台机子都要启动:

zkServer.sh start

在备用节点上,启动resourcemanager:

yarn-daemon.sh start resourcemanager

在为leader的节点上格式化zkfc,三个节点启动zkfc

hdfs zkfc -format

启动

hadoop-daemon.sh start zkfc

在配置历史服务的节点上启动历史服务:

mr-jobhistory-daemon.sh start historyserver
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值