Hadoop集群的Namenode HA高可用配置

HA配置首先要有zookeeper集群,这里就不再说明zookeeper集群的搭建了,可以在我的前面的文章中找到

我这里是在之前Hadoop单点的基础上进行HA配置的

集群HA规划:

cdh0: Namenode   Datanode  JournalNode  NodeManager   ZK

cdh1:Namenode   Datanode  JournalNode   ResourceManager   NodeManager    ZK

cdh2:Datanode  ResourceManager   NodeManager  JournalNode    ZK

Namenode HA

hdfs-site.xml:

<configuration>
<property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>172.17.0.4:50090</value>
</property>
<property>
<!-- 指定数据冗余份数 -->
	<name>dfs.replication</name>
	<value>3</value>
</property>
<property>
<!-- 完全分布式集群名称 -->
	<name>dfs.nameservices</name>
	<value>mycluster</value>
</property>
<property>
<!-- 集群中 NameNode 节点都有哪些 -->
	<name>dfs.ha.namenodes.mycluster</name>
	<value>cdh0,cdh1</value>
</property>
<property>
<!-- cdh0 的 RPC 通信地址 -->
	<name>dfs.namenode.rpc-address.mycluster.cdh0</name>
	<value>cdh0:8020</value>
</property>
<property>
<!-- cdh1 的 RPC 通信地址 -->
<name>dfs.namenode.rpc-address.mycluster.cdh1</name>
<value>cdh1:8020</value>
</property>
<property>
<!-- cdh0 的 http 通信地址 -->
	<name>dfs.namenode.http-address.mycluster.cdh0</name>
	<value>cdh0:50070</value>
</property>
<property>
<!-- cdh1 的 http 通信地址 -->
	<name>dfs.namenode.http-address.mycluster.cdh1</name>
	<value>cdh1:50070</value>
</property>
<property>
<!-- 指定 NameNode 元数据在 JournalNode 上的存放位置 -->
	<name>dfs.namenode.shared.edits.dir</name>
	<value>qjournal://cdh0:8485;cdh1:8485;cdh2:8485/mycluster</value>
</property>
<property>
<!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应 -->
	<name>dfs.ha.fencing.methods</name>
	<value>sshfence</value>
</property>
<property>
<!-- 使用隔离机制时需要 ssh 无秘钥登录,value是密钥所在的位置-->
	<name>dfs.ha.fencing.ssh.private-key-files</name>
	<value>/root/.ssh/id_rsa</value>
</property>
<property>
<!-- 声明 journalnode 服务器存储目录-->
	<name>dfs.journalnode.edits.dir</name>
	<value>/opt/package/hadoop/jl</value>
</property>
<property>
<!-- 关闭权限检查-->
	<name>dfs.permissions.enable</name>
	<value>false</value>
</property>
<property>
<!-- 访问代理类:client,mycluster,active 配置失败自动切换实现方式-->
	 <name>dfs.client.failover.proxy.provider.mycluster</name> 
 <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
 </property>
</configuration>

core-site.xml:

<configuration>
	<property>
        <name>fs.defaultFS</name>
        <value>hdfs://mycluster</value>
    </property>
<property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/package/hadoop/data/</value>
    </property>
<property>
        <name>fs.trash.interval</name>
        <value>10080</value>

    </property>
</configuration>

然后将这两个配置文件拷贝到其他两台机器上,使用scp命令

在三台机器上启动Journalnode

sbin/hadoop-daemon.sh start journalnode

在cdh0机器上进行格式化并启动Namenode和Datanode

 bin/hdfs namenode -format
 sbin/start-dfs.sh

在cdh1上同步cdh0的元数据信息,并启动Namenode

 bin/hdfs namenode -bootstrapStandby
 sbin/hadoop-daemon.sh start namenode

在cdh1上查看服务

bin/hdfs haadmin -getServiceState cdh1

这时候cdh0和cdh1上的Namenode都是处于standby状态,需要手动激活一个

 bin/hdfs haadmin -transitionToActive cdh0

最后使用cdh0:50070和cdh1:50070都可以进入Namenode的WEBUI界面,cdh0是active状态,cdh1是standby状态

猜你喜欢

转载自blog.csdn.net/ys_230014/article/details/84329973