前言:正式引入HA机制是从hadoop2.0开始,之前的版本中没有HA机制

1. HA的运作机制

(1)hadoop-HA集群运作机制介绍

所谓HA,即高可用(7*24小时不中断服务)

实现高可用最关键的是消除单点故障

hadoop-ha严格来说应该分成各个组件的HA机制——HDFS的HA、YARN的HA

(2)HDFS的HA机制详解

通过双namenode消除单点故障

双namenode协调工作的要点:

A、元数据管理方式需要改变:

内存中各自保存一份元数据

Edits日志只能有一份,只有Active状态的namenode节点可以做写操作

两个namenode都可以读取edits

共享的edits放在一个共享存储中管理(qjournal和NFS两个主流实现)

B、需要一个状态管理功能模块

实现了一个zkfailover,常驻在每一个namenode所在的节点

每一个zkfailover负责监控自己所在namenode节点,利用zk进行状态标识

当需要进行状态切换时,由zkfailover来负责切换

切换时需要防止brain split现象的发生

HA集群的安装部署

集群部署节点角色的规划(10节点):

server01   namenode   zkfc    > start-dfs.sh

server02   namenode   zkfc

server03   resourcemanager    > start-yarn.sh

server04   resourcemanager

server05   datanode   nodemanager

server06   datanode   nodemanager

server07   datanode   nodemanager

server08   journal node    zookeeper

server09   journal node    zookeeper

server10   journal node    zookeeper

集群部署节点角色的规划(3节点)

server01   namenode    resourcemanager  zkfc   nodemanager  datanode   zookeeper   journal node

server02   namenode    resourcemanager  zkfc   nodemanager  datanode   zookeeper   journal node

server05   datanode    nodemanager     zookeeper    journal node

环境准备

1、环境准备

a/linux系统准备

ip地址配置

hostname配置

hosts映射配置

防火墙关闭

init启动级别修改

sudoers加入hadoop用户

ssh免密登陆配置

b/java环境的配置

上传jdk,解压,修改/etc/profile

c/zookeeper集群的部署

配置文件

core-site.xml

<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.4.1/tmp</value>

</property>

<!-- 指定zookeeper地址 -->

<property>

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

<value>weekend05:2181,weekend06:2181,weekend07:2181</value>

</property>

</configuration>

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>weekend01:9000</value>

</property>

<!-- nn1的http通信地址 -->

<property>

<name>dfs.namenode.http-address.ns1.nn1</name>

<value>weekend01:50070</value>

</property>

<!-- nn2的RPC通信地址 -->

<property>

<name>dfs.namenode.rpc-address.ns1.nn2</name>

<value>weekend02:9000</value>

</property>

<!-- nn2的http通信地址 -->

<property>

<name>dfs.namenode.http-address.ns1.nn2</name>

<value>weekend02:50070</value>

</property>

<!-- 指定NameNode的edits元数据在JournalNode上的存放位置 -->

<property>

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

<value>qjournal://weekend05:8485;weekend06:8485;weekend07:8485/ns1</value>

</property>

<!-- 指定JournalNode在本地磁盘存放数据的位置 -->

<property>

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

<value>/home/hadoop/app/hadoop-2.4.1/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>30000</value>

</property>

/configuration>

Datanode动态上下线

Datanode动态上下线很简单,步骤如下:

a) 准备一台服务器,设置好环境

b) 部署hadoop的安装包,并同步集群配置

c) 联网上线,新datanode会自动加入集群

d) 如果是一次增加大批datanode,还应该做集群负载重均衡

2、Namenode状态切换管理

使用的命令上hdfs  haadmin

可用 hdfs  haadmin –help查看所有帮助信息

可以看到,状态操作的命令示例:

查看namenode工作状态

hdfs haadmin -getServiceState nn1

将standby状态namenode切换到active

hdfs haadmin –transitionToActive nn1

将active状态namenode切换到standby

hdfs haadmin –transitionToStandby nn2

HA下hdfs-api变化

客户端需要nameservice的配置信息,其他不变

/**

* 如果访问的是一个ha机制的集群

* 则一定要把core-site.xml和hdfs-site.xml配置文件放在客户端程序的classpath下

* 以让客户端能够理解hdfs://ns1/中  “ns1”是一个ha机制中的namenode对——nameservice

* 以及知道ns1下具体的namenode通信地址

* @author

*

*/

public class UploadFile {

public static void main(String[] args) throws Exception  {

Configuration conf = new Configuration();

conf.set("fs.defaultFS", "hdfs://ns1/");

FileSystem fs = FileSystem.get(new URI("hdfs://ns1/"),conf,"hadoop");

fs.copyFromLocalFile(new Path("g:/eclipse-jee-luna-SR1-linux-gtk.tar.gz"), new Path("hdfs://ns1/"));

fs.close();

}

}

启动

1.先启动zoomkeeper bin/zkServer.sh

2.格式化HDFS

 在namenode1上执行命令: hadoop namenode -format
 格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,之后通过sbin/hadoop-daemon.sh start namenode启动namenode进程
3.在namenode2上执行hdfs namenode -bootstrapStandby完成主备节点同步信息
4.格式化ZK(在namenode1上执行即可)

 hdfs zkfc -formatZK
5.启动HDFS(在namenode1上执行)

sbin/start-dfs.sh
 6.启动YARN(在namenode1和namenode2上执行)
sbin/start-yarn.sh

Hadoop的HA机制的更多相关文章

  1. Hadoop的HA机制浅析

    Zookeeper在Hadoop的HA中的应用 非HA的弊端: HDFS集群的分布式存储是靠namenode节点(namenode负责响应客户端请求)来实现.在非HA集群中一旦namenode宕机,虽 ...

  2. 学习笔记 Hadoop的job提交过程,shuffle过程以及HA机制的实现

    一,在hadoop中的mapreduce的job提交过程比较繁琐,但掌握job的提交过程是我们进入深入学习的必要. 二,mapreduce的shuffle机制 三,Hadoop的HA机制.

  3. HADOOP高可用机制

    HADOOP高可用机制 HA运作机制 什么是HA HADOOP如何实现HA HDFS-HA详解 HA集群搭建 目标: 掌握分布式系统中HA机制的思想 掌握HADOOP内置HA的运作机制 掌握HADOO ...

  4. Hadoop技术之Hadoop HA 机制学习

    欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:温球良 导语 最近分享过一次关于Hadoop技术主题的演讲,由于接触时间不长,很多技术细节认识不够,也没讲清楚,作为一个技术人员,本 ...

  5. HA机制下的Hadoop配置

    [版权申明:本文系作者原创,转载请注明出处] 文章出处:http://www.cnblogs.com/sdksdk0/p/5585355.html 作者: 朱培    ID:sdksdk0 ----- ...

  6. 【Hadoop】Hadoop HA机制要点

    Hadoop HA 机制架构.要点.原理: 需要的机器(规划): 至少三台机器 HOSTNAME IP 安装软件ZK HADOOP进程 HADOOP-NODE1 10.20.0.11 JDK,HADO ...

  7. 【Hadoop】HDFS笔记(二):HDFS的HA机制和Federation机制

    HA解决了HDFS的NameNode的单点问题: Federation解决了整个HDFS集群中只有一个名字空间,并且只有单独的一个NameNode管理所有DataNode的问题. 一.HA机制(Hig ...

  8. 安装hadoop+zookeeper ha

    安装hadoop+zookeeper ha 前期工作配置好网络和主机名和关闭防火墙 chkconfig iptables off //关闭防火墙 1.安装好java并配置好相关变量 (/etc/pro ...

  9. Hadoop_HDFS架构和HA机制

    Hadoop学习笔记总结 01.HDFS架构 1. NameNode和ResourceManager NameNode负责HDFS,从节点是DataNode:ResourceManager负责MapR ...

随机推荐

  1. linux的find命令详解

    find命令是用来在给定的目录下查找符合给定条件的文件 find [OPTIONS] [查找起始路径] [查找条件] [处理动作]   一.OPTIONS参数 -P.-L.-H:控制软连接的对待方式, ...

  2. 条款14:在资源管理类中小型coping的行为

    首先假设对于一个mutex互斥器对象,有lock以及unlock两个函数可用: void lock(Mutex * pm); void unlock(Mutex * pm); 那么为了防止资源忘记被释 ...

  3. linux语言设置i18n(转)

    修改 /etc/sysconfig/i18n 文件,如 LANG="en_US.UTF-8",xwindow会显示英文界面, LANG="zh_CN.GB18030&qu ...

  4. .Net版SQLite无法访问网络位置的数据库文件-winOpen,os_win.c 36702异常

    最近一个C#小程序,希望将SQLite数据库放在网络共享的位置,让多个客户端同时访问.却发现SQLite连接不上该网络位置的数据库,而如果数据库在本地则一切正常. 例如将SQLite数据库 test. ...

  5. iOS Charles Proxy 教程

    原文:Charles Proxy Tutorial for iOS 作者:Aaron Douglas 译者:kmyhy 有时不得不承认--我们曾经写过一些代码,它们不正确,但我们又无法调试.更麻烦的是 ...

  6. golang日期转字符串,仿照C#中的日期格式结构体

    1.日期格式集合.日期转字符串方法 package util import ( "strings" "time" ) //日期格式:模仿java中的结构体 ty ...

  7. 安装使用lynis扫描Linux的安全漏洞

    Lynis是Linux平台上的一款安全漏洞扫描工具.它可以扫描系统的安全漏洞.收集系统信息.安装的软件信息.配置问题.没有设置密码的用户和防火墙等等. Lynis是流行可靠的安全扫描工具. 前不久,L ...

  8. svn的使用流程

    一.安装: 1. 服务器端:VisualSVN_Server 2. 客户端:TortoiseSVN 二.使用VisualSVN Server建立版本库 1. 首先打开VisualSVN Server ...

  9. 21天学通C++_Day4

    0.迭代器 昨天晚上3G移动通信实验的时候,需要写一些简单的C程序,用到for循环的时候,发现在不同的for循环中,若定义标识符相同的变量名时,会有报错,环境是VC6: 可是一想到在for语句声明的迭 ...

  10. 2017 山东二轮集训 Day7 国王

    2017 山东二轮集训 Day7 国王 题目大意 给定一棵树,每个点有黑白两种颜色,定义一条简单路径合法当且仅当路径上所有点黑色与白色数量相等,求有多少非空区间 \([L,R]\) ,使得所有编号 \ ...