Hadoop HA的安装配置

来源:互联网 发布:nba2k16数据 编辑:程序博客网 时间:2024/05/19 08:45

一,HA的架构

Hadoop HA 即Hadoop的高可用,不同于普通的namenode+second namenode的模式,second namenode只能作为namenode的冷备份,当namenode挂掉后,second namenode不能自动充当namenode的角色。所以为了保证高可用性,就有了Hadoop HA的机制。
hdfs HA中即有至少有两个namenode,这儿以两个namenode为例,一个可以对外提供服务的namenode成为active namenode,待命状态的namenode成为standby namenode。

1.如何做到两个namenode的元数据的一致性呢?

将edits文件托管给稳定的第三方存放(当然,为了防止第三方挂掉,namenode本地的edits文件也是必要的),standby namenode就可以定时去第三方取edits文件放在内存中,做元素据的修改。这样就可以保证actice 和standby的数据一致性。

2.第三方用什么才能保证高可用?

第三方用的是qjournal集群,集群就可以将edits文件存放在每个机器中。并且这个集群使用zookeeper作为集群的协调,保证数据写入一半以上的机器,才为写入成功。

3.怎么做到standby在active节点挂掉自动充当active的角色呢?

这儿在每个namenode对应着一个监控进程ZKFC。在active上ZKFC使用RPC调用以判断active是否挂掉,如果挂掉,那么在zookeeper上将相应的节点删除(分布式锁),在Standby节点上的ZKFC进程就可以感知到节点删除的信息。Standby节点上的ZKFC进程感知到active节点挂掉的信息之后会向active节点发送一个杀死hdfs namenode的命令,确保active死亡,然后再向standby发送切换的指令,并向zookeeper创建节点。这样就可以让standby模式转换为active模式。

对于resourceManager的HA,因为不存在数据的一致性,所以只需要向zookeeper创建节点(获得分布式锁)即可。

二,环境准备

1.节点角色搭配(这儿是7台节点)

hadoop1:NameNode ZKFC
hadoop2:NameNode ZKFC
hadoop3:ResourceManager
hadoop4:ResourceManager
hadoop5:DataNode NodeManager zookeeper JournalNode
hadoop6:DataNode NodeManager zookeeper JournalNode
hadoop7:DataNode NodeManager zookeeper JournalNode

2.每台机器上都需要安装hadoop和jdk

3.节点之间的免密登陆,以及hosts文件的相应映射配置好

4.hadoop5,hadoop6,hadoop7上需要安装zookeeper

三,配置文件及解析

1.首先需要在hadoop-env.sh中加上HADOOP_HOME

2.core-site.xml

<!-- 这儿的bi表示两个namenode组建成的逻辑名字 --><property><name>fs.defaultFS</name><value>hdfs://bi/</value></property><!-- 指定hadoop临时目录 --><property><name>hadoop.tmp.dir</name><value>/home/hadoop/hadoopdata</value></property><!-- 指定zookeeper地址 --><property><name>ha.zookeeper.quorum</name><value>hadoop5:2181,hadoop6:2181,hadoop7:2181</value></property>

3.hdfs-site.xml

<configuration><!--指定hdfs的nameservice为bi,需要和core-site.xml中的保持一致 --><property><name>dfs.nameservices</name><value>bi</value></property><!-- bi下面有两个NameNode,分别是nn1,nn2 ,这儿的nn1,nn2也是逻辑名字,可以自己指定,但是指定后下面的也要随之改变--><property><name>dfs.ha.namenodes.bi</name><value>nn1,nn2</value></property><!-- nn1的RPC通信地址 --><property><name>dfs.namenode.rpc-address.bi.nn1</name><value>hadoop1:9000</value></property><!-- nn1的http通信地址 --><property><name>dfs.namenode.http-address.bi.nn1</name><value>hadoop1:50070</value></property><!-- nn2的RPC通信地址 --><property><name>dfs.namenode.rpc-address.bi.nn2</name><value>hadoop2:9000</value></property><!-- nn2的http通信地址 --><property><name>dfs.namenode.http-address.bi.nn2</name><value>hadoop2:50070</value></property><!-- 指定NameNode的edits元数据在JournalNode上的存放位置 --><property><name>dfs.namenode.shared.edits.dir</name><value>qjournal://hadoop5:8485;hadoop6:8485;hadoop7:8485/bi</value></property><!-- 指定JournalNode在本地磁盘存放数据的位置 --><property><name>dfs.journalnode.edits.dir</name><value>/home/hadoop/qjournal</value></property><!-- 开启NameNode失败自动切换 --><property><name>dfs.ha.automatic-failover.enabled</name><value>true</value></property><!-- 配置失败自动切换实现方式 --><property><name>dfs.client.failover.proxy.provider.bi</name><value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value></property><!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行--><property><name>dfs.ha.fencing.methods</name><value>sshfenceshell(/bin/true)</value></property><!-- 使用sshfence隔离机制时需要ssh免登陆 --><property><name>dfs.ha.fencing.ssh.private-key-files</name><value>/root/.ssh/id_rsa</value></property><!-- 配置sshfence隔离机制超时时间 --><property><name>dfs.ha.fencing.ssh.connect-timeout</name><value>30000</value></property></configuration>

4.mapred-site.xml

<configuration><!-- 指定mr框架为yarn方式 --><property><name>mapreduce.framework.name</name><value>yarn</value></property></configuration>

5.yarn-site.xml

<configuration><!-- Site specific YARN configuration properties --><!-- 开启RM高可用 --><property><name>yarn.resourcemanager.ha.enabled</name><value>true</value></property><!-- 指定RM的cluster id --><property><name>yarn.resourcemanager.cluster-id</name><value>yrc</value></property><!-- 指定RM的名字 --><property><name>yarn.resourcemanager.ha.rm-ids</name><value>rm1,rm2</value></property><!-- 分别指定RM的地址 --><property><name>yarn.resourcemanager.hostname.rm1</name><value>hadoop3</value></property><property><name>yarn.resourcemanager.hostname.rm2</name><value>hadoop4</value></property><!-- 指定zookeeper集群地址 --><property><name>yarn.resourcemanager.zk-address</name><value>hadoop5:2181,hadoop6:2181,hadoop7:2181</value></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property></configuration>

6.slaves文件

hadoop5hadoop6hadoop7

四,启动顺序

1.先启动hadoop5,hadoop6,hadoop7的zookeeper

zkServer.sh start

2.启动hadoop5,hadoop6,hadoop7的journalnode

hadoop-daemon.sh start journalnode

3.格式化HDFS(在hadoop1或者hadoop2上执行格式化)

hdfs namenode -format

注意:格式化完成之后,为了保证两个namenode的数据一致,需要把hadoop1的namenode的数据目录复制到hadoop2的相应的目录下

4.格式化ZKFC(在hadoop1或者hadoop2上执行格式化)

hdfs zkfc -formatZK

5.启动HDFS(在hadoop1或者hadoop2上启动)

start-dfs.sh

6.启动yarn(在hadoop3或者hadoop4上启动)

start-yarn.sh

注意:在hadoop3上启动yarn后,hadoop4上没有resourcemanager进程,需要自动启动,指令如下

yarn-daemon.sh start resourcemanager

五,验证安装

hadoop1

hadoop2

hadoop3

hadoop4

hadoop5

hadoop6

hadoop7

这里写图片描述

这里写图片描述

原创粉丝点击