Hadoop---HA集群搭建

来源:互联网 发布:济南网络推广招聘 编辑:程序博客网 时间:2024/05/22 05:09

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现象的发生

上述过程的图示:

HDFS的HA机制:

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 node1192.168.1.12 node2192.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结构目录

bin              #可执行文件(hadoop的功能操作命令)etc              #配置文件include    lib              #本地库文件(数据压缩编解码、本地文件系统操作)libexec    LICENSE.txtNOTICE.txt README.txtsbin                #可执行文件(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结点信息

如下图:
需要修改的配置文件

4.1 修改hadoop-env.sh 文件

//指定jdkJAVA_HOME = /home/hadoop/app/jdk1.8.0_131

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

<configuration><!-- 指定hdfs的nameservice为ns1 --><property><name>fs.defaultFS</name><value>hdfs://ns1/</value></property><!-- 指定hadoop临时目录 --><property><name>hadoop.tmp.dir</name><value>/home/hadoop/app/hadoop-2.6.5/tmp</value></property><!-- 指定zookeeper地址 --><property><name>ha.zookeeper.quorum</name><value>node1:2181,node2:2181,node3:2181</value></property>

4.3 修改hdfs-site.xml文件

<configuration><!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 --><property>    <name>dfs.nameservices</name>    <value>ns1</value></property><!-- ns1下面有两个NameNode,分别是nn1,nn2 --><property>    <name>dfs.ha.namenodes.ns1</name>    <value>nn1,nn2</value></property><!-- nn1的RPC通信地址 --><property>    <name>dfs.namenode.rpc-address.ns1.nn1</name>    <value>node1:9000</value></property><!-- nn1的http通信地址 --><property>    <name>dfs.namenode.http-address.ns1.nn1</name>    <value>node1:50070</value></property><!-- nn2的RPC通信地址 --><property>    <name>dfs.namenode.rpc-address.ns1.nn2</name>    <value>node2:9000</value></property><!-- nn2的http通信地址 --><property>    <name>dfs.namenode.http-address.ns1.nn2</name>    <value>node2:50070</value></property><!-- 指定NameNode的元数据在JournalNode上的存放位置 --><property>    <name>dfs.namenode.shared.edits.dir</name>    <value>qjournal://node1:8485;node2:8485;node3:8485/ns1</value></property><!-- 指定JournalNode在本地磁盘存放数据的位置 --><property>    <name>dfs.journalnode.edits.dir</name>    <value>/home/hadoop/app/hadoop-2.6.5/journaldata</value></property><!-- 开启NameNode失败自动切换 --><property>    <name>dfs.ha.automatic-failover.enabled</name>    <value>true</value></property><!-- 配置失败自动切换实现方式 --><property>    <name>dfs.client.failover.proxy.provider.ns1</name>    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value></property><!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行--><property>    <name>dfs.ha.fencing.methods</name>    <value>        sshfence        shell(/bin/true)    </value></property><!-- 使用sshfence隔离机制时需要ssh免登陆 --><property>    <name>dfs.ha.fencing.ssh.private-key-files</name>    <value>/home/hadoop/.ssh/id_rsa</value></property><!-- 配置sshfence隔离机制超时时间 --><property>    <name>dfs.ha.fencing.ssh.connect-timeout</name>    <value>10000</value></property><!-- 配置复本数量,默认为3 --><property>    <name>dfs.replication</name>    <value>2</value>  </property>  </configuration>

4.4 修改mapred-site.xml文件

<!-- 指定为yarn平台运行mapreduce --><configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property>

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

<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>node1</value></property><property><name>yarn.resourcemanager.hostname.rm2</name><value>node2</value></property><!-- 指定zk集群地址 --><property><name>yarn.resourcemanager.zk-address</name><value>node1:2181,node2:2181,node3:2181</value></property><!-- 指定shuffle --><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property></configuration>

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

node1node2node3

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

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

//复制分发到node2scp -r  hadoop-2.6.5 node2:/home/hadoop/app//复制分发到node3scp -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平台
//启动hdfsstart-hdfs.sh//启动yarn平台start-yarn.sh//或者:直接启动hdfs+yarn服务: sbin/start-all.sh

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

页面显示

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

页面显示2

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

故障模仿

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

这里写图片描述

再访问http://node1:50070,

这里写图片描述

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

./hadoop-daemon.sh start namenode

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

原创粉丝点击