Hadoop---HA集群搭建

1)hadoop-ha集群运作机制介绍
所谓HA,即高可用(7*24小时不中断服务)
实现高可用最关键的是消除单点故障
hadoop-ha严格来说应该分成各个组件的HA机制

2)HDFS的HA机制
通过双namenode消除单点故障
双namenode协调工作的要点:
A、元数据管理方式需要改变:
内存中各自保存一份元数据
Edits日志只能有一份,只有Active状态的namenode节点可以做写操作
两个namenode都可以读取edits
共享的edits放在一个共享存储中管理(qjournal和NFS两个主流实现)
B、需要一个状态管理功能模块
实现了一个zkfailover,常驻在每一个namenode所在的节点
每一个zkfailover负责监控自己所在的namenode节点,利用zk进行状态标识
当需要进行状态切换时,由zkfailover来负责切换
切换时需要防止brain split现象的发生

上述过程的图示:

Hadoop---HA集群搭建_第1张图片

3)HA集群搭建

搭建环境:CentOS release 6.5 (Final) + jdk1.8.0_131
这里使用三台服务器来搭建,分别为node1、node2、node3;
对应的ip为:192.168.1.11、192.168.1.12、192.168.1.13

在搭建之前先配置三台机器之间的SSH免密登录和搭建zookeeper集群。参考:集群内部的SSH密钥认证登陆机制配置(免密登陆)和 ZooKeeper-3.4.6分布式集群安装。

1.主机名称与IP地址的映射配置

HDFS集群中具有两个关键的角色:namenode和datanode。集群中所有的结点作为一个整体对分布式应用提供服务,集群中每个结点都与namenode结点相连接,所以,在配置的hdfs集群的时候,每一个结点的host到IP地址的映射都要配置上集群中其它结点的映射信息,方便结点之间的相互通信。
以node1为例:

vi /etc/hosts

进入配置文件hosts,配置对应映射

192.168.1.11 node1
192.168.1.12 node2
192.168.1.13 node3

2.关闭防火墙

//关闭防火墙
service iptables stop 
// 防火墙开机不自动启动 
chkconfig iptables off

3.安装Hadoop

我这里下载的是hadoop-2.6.5.tar.gz,执行

tar -zxvf hadoop-2.6.5.tar.gz -C /home/hadoop/app/

解压到/home/hadoop/app目录下,结构目录如下:

Hadoop---HA集群搭建_第2张图片

bin              #可执行文件(hadoop的功能操作命令)
etc              #配置文件
include    
lib              #本地库文件(数据压缩编解码、本地文件系统操作)
libexec    
LICENSE.txt
NOTICE.txt 
README.txt
sbin                #可执行文件(hadoop集群进程管理的操作命令)
share           #开发所需要的jar包及用户帮助文档

4.修改配置文件

进入etc/hadoop/目录下

cd hadoop-2.6.5/etc/hadoop/

Hadoop集群需要修改的配置文件总共为6个,分别是

(1)hadoop-env.sh #配置jdk环境
(2)core-site.xml #配置Hadoop相关服务
(3)hdfs-site.xml #配置hdfs系统信息
(4) mapred-site.xml #配置mapreduce相关信息
(5)yarn-site.xml #配置yarn平台信息
(6)slaves #配置DataNode结点信息

如下图:
Hadoop---HA集群搭建_第3张图片

4.1 修改hadoop-env.sh 文件

//指定jdk
JAVA_HOME = /home/hadoop/app/jdk1.8.0_131

4.2 修改core-site.xml文件,配置hdfs系统

<configuration>

<property>
<name>fs.defaultFSname>
<value>hdfs://ns1/value>
property>

<property>
<name>hadoop.tmp.dirname>
<value>/home/hadoop/app/hadoop-2.6.5/tmpvalue>
property>


<property>
<name>ha.zookeeper.quorumname>
<value>node1:2181,node2:2181,node3:2181value>
property>

4.3 修改hdfs-site.xml文件

<configuration>

<property>
    <name>dfs.nameservicesname>
    <value>ns1value>
property>

<property>
    <name>dfs.ha.namenodes.ns1name>
    <value>nn1,nn2value>
property>

<property>
    <name>dfs.namenode.rpc-address.ns1.nn1name>
    <value>node1:9000value>
property>

<property>
    <name>dfs.namenode.http-address.ns1.nn1name>
    <value>node1:50070value>
property>

<property>
    <name>dfs.namenode.rpc-address.ns1.nn2name>
    <value>node2:9000value>
property>

<property>
    <name>dfs.namenode.http-address.ns1.nn2name>
    <value>node2:50070value>
property>

<property>
    <name>dfs.namenode.shared.edits.dirname>
    <value>qjournal://node1:8485;node2:8485;node3:8485/ns1value>
property>

<property>
    <name>dfs.journalnode.edits.dirname>
    <value>/home/hadoop/app/hadoop-2.6.5/journaldatavalue>
property>

<property>
    <name>dfs.ha.automatic-failover.enabledname>
    <value>truevalue>
property>

<property>
    <name>dfs.client.failover.proxy.provider.ns1name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvidervalue>
property>

<property>
    <name>dfs.ha.fencing.methodsname>
    <value>
        sshfence
        shell(/bin/true)
    value>
property>

<property>
    <name>dfs.ha.fencing.ssh.private-key-filesname>
    <value>/home/hadoop/.ssh/id_rsavalue>
property>

<property>
    <name>dfs.ha.fencing.ssh.connect-timeoutname>
    <value>10000value>
property>

<property>  
  <name>dfs.replicationname>  
  <value>2value>  
property>  
configuration>

4.4 修改mapred-site.xml文件


<configuration>
<property>
<name>mapreduce.framework.namename>
<value>yarnvalue>
property>

4.5 修改yarn-site.xml文件,配置yarn-ha机制

<configuration>


<property>
<name>yarn.resourcemanager.ha.enabledname>
<value>truevalue>
property>

<property>
<name>yarn.resourcemanager.cluster-idname>
<value>yrcvalue>
property>

<property>
<name>yarn.resourcemanager.ha.rm-idsname>
<value>rm1,rm2value>
property>

<property>
<name>yarn.resourcemanager.hostname.rm1name>
<value>node1value>
property>
<property>
<name>yarn.resourcemanager.hostname.rm2name>
<value>node2value>
property>

<property>
<name>yarn.resourcemanager.zk-addressname>
<value>node1:2181,node2:2181,node3:2181value>
property>

<property>
<name>yarn.nodemanager.aux-servicesname>
<value>mapreduce_shufflevalue>
property>
configuration>

4.6修改slaves文件,配置DataNode结点

node1
node2
node3

5.复制分发Hadoop包至node2和node3

将配置文件修改好后,进入/app目录,执行

//复制分发到node2
scp -r  hadoop-2.6.5 node2:/home/hadoop/app
//复制分发到node3
scp -r  hadoop-2.6.5 node3:/home/hadoop/app

6.配置Hadoop环境变量

配置方法与配置JAVA_HOME相同,参见Linux下JAVA_HOME配置

7.启动Hadoop-HA集群

注意:严格按照下面的步骤启动

  • 7.1 启动zookeeper集群

    zookeeper集群的搭建,参考 ZooKeeper-3.4.6分布式集群安装,启动zookeeper集群.

  • 7.2 手动启动 journalnode

    分别进入各结点的hadoop-2.6.5/sbin/目录下,执行

//启动 journalnode
 ./hadoop-daemon.sh start journalnode
  • 7.3 格式化HDFS
    只在node1上执行:
 hdfs namenode -format
//将格式化生成的集群id文件(tmp文件夹)复制到备用namenode上:  
scp -r tmp/ node2:/home/hadoop/app/hadoop-2.6.0
  • 7.4格式化ZKFC
    只在node1上执行:
 hdfs zkfc -formatZK
  • 7.5 启动hdfs和yarn平台
//启动hdfs
start-hdfs.sh
//启动yarn平台
start-yarn.sh
//或者:直接启动hdfs+yarn服务: 
sbin/start-all.sh

4)登录web浏览器查看
使用web浏览器访问http://node1:50070,页面显示结果如下图:

Hadoop---HA集群搭建_第4张图片

表示此时node1状态为standby,为备用namenode结点,再访问http://node2:50070,

Hadoop---HA集群搭建_第5张图片

node2的状态为active,说明此时node2为工作状态的namenode,
此时若node2的namenode进程发生故障,则node1会被激活,将正式成为工作状态的namenode.
这里我们就直接杀死node2的namenode进程来模仿故障,

Hadoop---HA集群搭建_第6张图片

再次访问http://node2:50070,

Hadoop---HA集群搭建_第7张图片

再访问http://node1:50070,

Hadoop---HA集群搭建_第8张图片

node1已被激活,成功接管namenode工作,实现单点故障转移.
可再到node2结点上进入hadoop-2.6.5/sbin/目录下,执行

./hadoop-daemon.sh start namenode

再次启动node2,作为namenode备用结点

你可能感兴趣的:(大数据相关)