前面介绍过hadoop的简单安装和FA安装,在这里将介绍几种hadoop2中HA(高可用性)安装,HA技术使hadoop不再存在单点namenode的故障。

先来第一种:nfs+zookeeper

Hadoop 版本:2.2.0

OS 版本: Centos6.4

Jdk 版本: jdk1.6.0_32

环境配置

机器名

Ip地址

功能

Hadoop1

192.168.124.135

NameNode, DataNode,

ResourceManager, NodeManager

Zookeeper

Zkfc

Hadoop2

192.168.124.136

NameNode

DataNode, NodeManager

Zookeeper

Zkfc

Hadoop3

192.168.124.137

DataNode, NodeManager

Zookeeper

Zkfc

Nfs server

安装zookeeper

使用 FileZilla上传zookeeper-3.4.5.tar.gz

解压缩    tar xzvf zookeeper-3.4.5.tar.gz

配置zookeeper

Vi conf/zoo.cfg

# The number of milliseconds of each tick

tickTime=2000

# The number of ticks that the initial

# synchronization phase can take

initLimit=10

# The number of ticks that can pass between

# sending a request and getting an acknowledgement

syncLimit=5

# the directory where the snapshot is stored.

# do not use /tmp for storage, /tmp here is just

# example sakes.

dataDir=/home/hadoop/repo1/zookeeper

# the port at which the clients will connect

clientPort=2181

#

# Be sure to read the maintenance section of the

# administrator guide before turning on autopurge.

#

# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance

#

# The number of snapshots to retain in dataDir

#autopurge.snapRetainCount=3

# Purge task interval in hours

# Set to "0" to disable auto purge feature

#autopurge.purgeInterval=1

server.1=hadoop1:2888:3888

server.2=hadoop2:2888:3888

server.3=hadoop3:2888:3888

在hadoop1, hadoop2, hadoop3, 修改 /home/hadoop/repo1/zookeeper/myid

按照下面的表哥填写myid

Hadoop1

1

Hadoop2

2

Hadoop3

3

nfs安装

在hadoop3上安装

yum install nfs-utils

vi /etc/exports

/home/hadoop/repo3/nfs 192.168.124.0/24(rw,sync,no_root_squash)

启动

service rpcbind restart

service nfs restart

在hadoop1和hadoop2运行mount命令

mount -t nfs hadoop3:/home/hadoop/repo3/nfs /home/hadoop/repo3/nfs

配置hadoop

vi etc/hadoop/hadoop-env.sh 修改jdk位置
export JAVA_HOME=/home/hadoop/jdk1.6.0_32

vi etc/hadoop/mapred-env.sh修改jdk位置

export JAVA_HOME=/home/hadoop/jdk1.6.0_32

vi etc/hadoop/yarn-env.sh修改jdk位置

export JAVA_HOME=/home/hadoop/jdk1.6.0_32

vi etc/hadoop/core-site.xml

<configuration>

<property>

<name>hadoop.tmp.dir</name>

<value>/home/hadoop/repo3/tmp</value>

<description>A base for other temporary
directories.</description>

</property>

<property>

<name>fs.defaultFS</name>

<value>hdfs://mycluster</value>

</property>

<property>

<name>dfs.journalnode.edits.dir</name>

<value>/home/hadoop/repo3/journal</value>

</property>

<property>

<name>ha.zookeeper.quorum</name>

<value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>

</property>

</configuration>

vi etc/hadoop/hdfs-site.xml

<configuration>

<property>

<name>dfs.replication</name>

<value>2</value>

</property>

<property>

<name>dfs.namenode.name.dir</name>

<value>/home/hadoop/repo3/name</value>

</property>

<property>

<name>dfs.datanode.data.dir</name>

<value>/home/hadoop/repo3/data</value>

</property>

<property>

<name>dfs.nameservices</name>

<value>mycluster</value>

</property>

<property>

<name>dfs.ha.namenodes.mycluster</name>

<value>hadoop1,hadoop2</value>

</property>

<property>

<name>dfs.namenode.rpc-address.mycluster.hadoop1</name>

<value>hadoop1:9000</value>

</property>

<property>

<name>dfs.namenode.http-address.mycluster.hadoop1</name>

<value>hadoop1:50070</value>

</property>

<property>

<name>dfs.namenode.rpc-address.mycluster.hadoop2</name>

<value>hadoop2:9000</value>

</property>

<property>

<name>dfs.namenode.http-address.mycluster.hadoop2</name>

<value>hadoop2:50070</value>

</property>

<property>

<name>dfs.namenode.shared.edits.dir</name>

<value>file:///home/hadoop/repo3/nfs</value>

</property>

<property>

<name>dfs.client.failover.proxy.provider.mycluster</name>

<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

</property>

<property>

<name>dfs.ha.fencing.methods</name>

<value>sshfence</value>

</property>

<property>

<name>dfs.ha.fencing.ssh.private-key-files</name>

<value>/home/hadoop/.ssh/id_rsa</value>

</property>

<property>

<name>dfs.ha.automatic-failover.enabled</name>

<value>true</value>

</property>

</configuration>

vi etc/hadoop/yarn-site.xml

<configuration>

<property>

<description>the valid service name</description>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

<property>

<description>The hostname of the RM.</description>

<name>yarn.resourcemanager.hostname</name>

<value>hadoop1</value>

</property>

</configuration>

vi etc/hadoop/mapred-site.xml

<configuration>

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

</configuration>

vi etc/hadoop/slaves

hadoop1

hadoop2

hadoop3

格式化namenode和failovercontroler

failovercontroler也需要格式化: bin/hdfs zkfc -formatZK

bin/hdfs namenode -format -clusterid mycluster

在hadoop2节点上的namenode信息需要与hadoop1节点同步,不能通过简单的格式化做到,hadoop2节点上的namenode需要向hadoop1的namenode发送数据请求。因此我们还需要启动hadoop1上的namenode.

在hadoop1上运行: bin/hdfs namenode

在hadoop3上运行:bin/hdfs namenode  -bootstrapStandby

最后关闭hadoop1上的namenode,然后启动整个hadoop集群。

启动hadoop集群

cd /home/hadoop/hadoop-2.2.0

sbin/start-all.sh

从图上可以看出,先启动namenode,再启动datanode, 再启动ZK failover controller, 再启动resourcemanger, 最后启动nodemanager。

使用jps查看启动的进程

在hadoop1上运行jps

在hadoop2上运行jps

在hadoop3上运行jps

查看namenode的状态

bin/hdfs haadmin -getServiceState hadoop1

bin/hdfs haadmin -getServiceState hadoop2

从图上可以看出hadoop2上的namenode处于standby状态,而hadoop1上的namenode处于active状态

这些信息也可以通过Hadoop的web界面得到。

在浏览器里输入:http://hadoop1:50070

在浏览器里输入:http://hadoop2:50070

Failover 测试

从图上我们可以看出hadoop1节点上的namenode处于active状态,hadoop2上的节点处于standby状态,我们现在杀死hadoop1节点上的namenode,然后看hadoop2上的节点会自动变为active状态

在hadoop1上使用jps查看启动的进程

找到NameNode的进程,然后杀死它

Kill -9 11146,发现namenode消失了

查看一下hadoop2节点的状态  bin/hdfs haadmin -getServiceState hadoop2

查看hadoop1节点的状态 bin/hdfs haadmin -getServiceState hadoop1

启动hadoop1节点上的namenode bin/hdfs namenode后

再查看hadoop1节点的状态 bin/hdfs haadmin -getServiceState hadoop1

很显然,hadoop1节点上namenode为standby状态,hadoop已经很好的解决了single namenode的问题,在不停机的条件下 备用节点成功的接管了主节点的任务。

尽管namenode可以很好的完成failover工作,但是他们之间使用nfs来存储变量的数据。nfs也会存在单点问题,也有可能停机导致整个集群的失败。Hadoop还提供了一种叫做jornalnode的技术,解决nfs的问题。

Hadoop2的HA安装(high availability):nfs+zookeeper的更多相关文章

  1. Hadoop2的HA安装(high availability):JournalNode+ zookeeper

    前面介绍过使用NFS+zookeeper来解决namenode单点失败问题,因为NFS可能也会存在单点问题,所以hadoop提供了一种叫做JournalNode技术,这项技术可以在JournalNod ...

  2. Hadoop2.6 Ha 安装

    Hadoop 2.6安装文档 版本说明:hadoop 2.6  linux-64位 Zookeeper3.4.6 jdk 1.7.0_75 1.       Ssh无密码 ssh-keygen vim ...

  3. hadoop2.7.1 HA安装部署(转)

    hadoop集群规划 目标:创建2个NameNode,做高可用,一个NameNode挂掉,另一个能够启动:一个运行Yarn,3台DataNode,3台Zookeeper集群,做高可用. 在 hadoo ...

  4. Apache Hadoop2.x 边安装边入门

    完整PDF版本:<Apache Hadoop2.x边安装边入门> 目录 第一部分:Linux环境安装 第一步.配置Vmware NAT网络 一. Vmware网络模式介绍 二. NAT模式 ...

  5. 2-Zookeeper、HA安装

    1.Zookeeper安装 1.解压 zookeeper 到安装目录中/opt/app/zookeeper 中. 2.在安装目录下创建data和logs两个目录用于存储数据和日志: cd /opt/a ...

  6. FW 构建OpenStack的高可用性(HA,High Availability)

    原文地址:http://blog.csdn.net/hilyoo/article/details/7704280 1.CAP理论 1) CAP 理论给出了3个基本要素: 一致性 ( Consisten ...

  7. 基于原生态Hadoop2.6 HA集群环境的搭建

    hadoop2.6  HA平台搭建   一.条件准备 软件条件: Ubuntu14.04 64位操作系统, jdk1.7 64位,Hadoop 2.6.0,  zookeeper 3.4.6 硬件条件 ...

  8. hadoop-2.4.1集群搭建及zookeeper管理

    准备 1.1修改主机名,设置IP与主机名的映射 [root@xuegod74 ~]# vim /etc/hosts 192.168.1.73 xuegod73 192.168.1.74 xuegod7 ...

  9. hadoop2.8 ha 集群搭建

    简介: 最近在看hadoop的一些知识,下面搭建一个ha (高可用)的hadoop完整分布式集群: hadoop的单机,伪分布式,分布式安装 hadoop2.8 集群 1 (伪分布式搭建 hadoop ...

随机推荐

  1. SchemaExport

    不在xml中配置         <!-- Drop and re-create the database schema on startup         <property name ...

  2. 基于Netty的RPC简易实现

    代码地址如下:http://www.demodashi.com/demo/13448.html 可以给你提供思路 也可以让你学到Netty相关的知识 当然,这只是一种实现方式 需求 看下图,其实这个项 ...

  3. ASP.NET 推荐书籍

    ASP.NET 推荐书籍 1.首先推荐一本ASP.NET MVC的书籍 —— <Web开发新体验:ASP.NET 3.5 MVC架构与实战> [点评]:ASP.NET的MVC的书籍本来就不 ...

  4. Android工程:引用另一个Android工程的方法详解

    本篇文章是对在Android中引用另一个Android工程的方法进行了详细的分析介绍.需要的朋友参考下   现在已经有了一个Android工程A.我们想扩展A的功能,但是不想在A的基础上做开发,于是新 ...

  5. 安装inkscape for mac注意事项

    今天为了安装inkscape for mac,搞了一下午.按以前的方法,先安最新的XQuartz,再安最新的inkscape,在运行inkscape前先打开XQuartz.但是发现不行了,inksca ...

  6. Daemon,Jos,定时器

    --> FileSystemWatcher--> EventWaitHandle / AutoResetEvent / ManualResetEvent--> Mutex--> ...

  7. 设置phpcms v9黄页模块作为首页方法

    如果我们根据需要,想把黄页作为单独的网站,我们可以用模块化安装,并且首页设置,那么仿站网就说说详细的步骤.首先,我们需要安装最新版本的phpcms V9其次,下载黄页模块,然后进行根目录的替换.再次, ...

  8. VS编译duilib项目时候的错误解决方法整理

    @1:找不到Riched20.lib 用everything等软件搜索下磁盘.找到所在的文件夹加入到vs的库文件夹就可以.我得是C:\Program Files (x86)\Microsoft SDK ...

  9. Java接口的异常设计

    一.问题的提出   疑惑1:在设计接口的时,对于接口方法何时需要声明抛出受检异常或者说所有的接口方法最后都声明抛出受检异常? 以下是代码片段: public interface xx{ public ...

  10. google_gflags使用

    gflags是google开源的一个解析命令行参数的工具. 最简单的demo #include <iostream> #include <gflags/gflags.h> us ...