在hdfs中, NN只有一个, 但其中保存的数据尤其重要, 所以需要将元数据保存, 其中源数据有2个形式, fsimage 和 edit文件, 最简单的解决方法就是复制fsimage, 并在文件修改时同时修改 NNActive 和 NNStandby 中的edit, 保存在第三方的QJM中, 所以多个NN除了active接受用户请求外, 无其他区别

首先是, 集群规划:

可以看到NN是有1和2组成active和standby的, 之前说过NN需要有DNN免密登录的权限, 所以, 两台分别设置其他三台的免密登录

1, 多台NN间切换, 通过zookeeper来实现的

1) 安装zookeeper.3.4.6.tar.gz, 并创建 conf/zoo.cfg文件

tickTime=
dataDir=/var/lib/zookeeper
clientPort=
initLimit=
syncLimit=
server.=192.168.208.106::
server.=192.168.208.107::
server.=192.168.208.108::

2), 创建data目录和log目录(mkdir -p)

3), 在 ${dataDir}/下面 配置节点信息 myid, 跟上面的server.x保持一致




4), 启动, cd /usr/opt/zookeeper3.4.6/bin

zkServer.sh start

5), 链接内存数据库, 通过get 和ls 等命令可查看数据库中的内容

zkCli.sh

zookeeper启动后, 就不要关闭了...

zk启动脚本:

脚本启动不管用的, 把环境变量配置在 ~/.bashrc下, 因为ssh分为登陆和非登陆, 读取配置文件的顺序不同

#!/bin/bash
host=(node2 node3 node4) start() {
for i in ${host[@]}
do
echo start $i
ssh -o StrictHostKeyChecking=no root@$i "/usr/local/zookeeper-3.4.11/bin/zkServer.sh start"
ssh -o StrictHostKeyChecking=no root@$i "jps"
echo start $i done
done
} stop() {
for i in ${host[@]}
do
echo stop $i
ssh -o StrictHostKeyChecking=no root@$i "/usr/local/zookeeper-3.4.11/bin/zkServer.sh stop"
ssh -o StrictHostKeyChecking=no root@$i "jps"
echo stop $i done
done
} case "$1" in start)
start
;; stop)
stop
;; *)
echo "Usage: start|stop"
;; esac

2, 修改hdfs的配置文件

2.1), 删除masters, 不需要SNN了

rm -rf /usr/opt/hadoop-2.5./etc/hadoop

2.2) 删除原集群中的数据文件

rm -rf /opt/hadoop

2.3) hdfs-site.xml

servername, zookeeper 使用

<property>
<name>dfs.nameservices</name>
<value>hdfscluster</value>
</property>

节点协议( 有几个nameNode定义几个)

<property>
<name>dfs.ha.namenodes.hdfscluster</name>
<value>nn1,nn2</value>
</property>

rpc协议( 文件上传下载使用)

<property>
<name>dfs.namenode.rpc-address.hdfscluster.nn1</name>
<value>192.168.208.106:</value>
</property>
<property>
<name>dfs.namenode.rpc-address.hdfscluster.nn2</name>
<value>192.168.208.107:</value>
</property>

http协议

<property>
<name>dfs.namenode.http-address.hdfscluster.nn1</name>
<value>192.168.208.:</value>
</property>
<property>
<name>dfs.namenode.http-address.hdfscluster.nn2</name>
<value>192.168.208.:</value>
</property>

qjm节点, journalNodes节点, 用于缓存edits文件, uri, 分号隔开

<property>
<name>dfs.namenode.shared.edits.dir</name>
 <value>qjournal://192.168.208.107:8485;192.168.208.108:8485;192.168.208.109:8485/hdfscluster</value>
</property>

帮助客户端获得activeNameNode

<property>
<name>dfs.client.failover.proxy.provider.hdfscluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

远程登陆, 需要ssh密钥文件

<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property> <property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_dsa</value>
</property>

journalNode 数据存放的目录

<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/journalNode/data</value>
</property>

2.4) core-site.xml, 修改下入口即可

<property>
<name>fs.defaultFS</name>
<value>hdfs://hdfscluster</value>
</property>

3, 启用自动切换

3.1), hdfs-site.xml

<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>

3.2), core-site.xml, 更改一个配置即可, hadoop.tmp.dir仍然保留

<property>
<name>ha.zookeeper.quorum</name>
<value>192.168.208.106:,192.168.208.107:,192.168.208.108:</value>
</property>

4, 启动journalNode

hadoop-daemon.sh start journalnode

查看日志检查是否成功启动

停止: hadoop-daemon.sh stop journalnode

lgos/hadoop-root-journalnode-node4.log

5, 格式化其中一个NN

hdfs namenode -format

6, 拷贝fsimage 到另一台 NN上, 或者手动拷贝过去也可以

#启动刚刚格式化的NN
hadoop-daemon.sh start namenode
#在没有格式化的NN上执行
hdfs namenode -bootstrapStandby
#启动第二个NN
hadoop-daemon.sh start namenode

7, 初始化zookeeper, 在active的NN上执行

hdfs zkfc -formatZK

8, 启动

start-dfs.sh

排错时, 可用jps命令查看集群端口号, 然后kill -9, 或者 killall java

ps: 记得上个博客的配置, slaves等

 以后启动时, 先启动3台zookeeper, 然后 start-dfs.sh 即可以了

非常坑, 因为私钥文件root前面没有加 / 表明根目录, 卡了一个小时!!!!

系列来自尚学堂

11-hdfs-NameNode-HA-wtihQJM解决单点故障问题的更多相关文章

  1. HDFS NameNode HA 部署文档

    简介: HDFS High Availability Using the Quorum Journal Manager Hadoop 2.x 中,HDFS 组件有三个角色:NameNode.DataN ...

  2. Apache hadoop namenode ha和yarn ha ---HDFS高可用性

    HDFS高可用性Hadoop HDFS 的两大问题:NameNode单点:虽然有StandbyNameNode,但是冷备方案,达不到高可用--阶段性的合并edits和fsimage,以缩短集群启动的时 ...

  3. HDFS namenode 高可用(HA)搭建指南 QJM方式 ——本质是多个namenode选举master,用paxos实现一致性

    一.HDFS的高可用性 1.概述 本指南提供了一个HDFS的高可用性(HA)功能的概述,以及如何配置和管理HDFS高可用性(HA)集群.本文档假定读者具有对HDFS集群的组件和节点类型具有一定理解.有 ...

  4. HDFS的HA(高可用)

    HDFS的HA(高可用) 概述 (1)实现高可用最关键的策略是[消除单点故障].HA 严格来说应该分成各个组件的 HA 机制:HDFS 的 HA 和 YARN 的 HA. (2)Hadoop2.0 之 ...

  5. hadoop2—namenode—HA原理详解

    在hadoop1中NameNode存在一个单点故障问题,也就是说如果NameNode所在的机器发生故障,那么整个集群就将不可用(hadoop1中有个SecorndaryNameNode,但是它并不是N ...

  6. CDH4.1基于Quorum-based Journaling的NameNode HA

    几个星期前, Cloudera发布了CDH 4.1最新的更新版本,这是第一个真正意义上的独立高可用性HDFS NameNode的hadoop版本,不依赖于特殊的硬件或外部软件.这篇文章从开发者的角度来 ...

  7. Hadoop2.0 Namenode HA实现方案

    Hadoop2.0 Namenode HA实现方案介绍及汇总 基于社区最新release的Hadoop2.2.0版本,调研了hadoop HA方面的内容.hadoop2.0主要的新特性(Hadoop2 ...

  8. Hadoop2之NameNode HA详解

    在Hadoop1中NameNode存在一个单点故障问题,如果NameNode所在的机器发生故障,整个集群就将不可用(Hadoop1中虽然有个SecorndaryNameNode,但是它并不是NameN ...

  9. 通过tarball形式安装HBASE Cluster(CDH5.0.2)——Hadoop NameNode HA 切换引起的Hbase错误,以及Hbase如何基于NameNode的HA进行配置

    通过tarball形式安装HBASE Cluster(CDH5.0.2)——Hadoop NameNode HA 切换引起的Hbase错误,以及Hbase如何基于NameNode的HA进行配置 配置H ...

随机推荐

  1. POJ1511来回最短路

    POJ1511 问你从1到其它点得所有最短路之和  与  其他点到1得所有最短路之和 得总和 思路很明确就是两次最短路,翻转一次地图就好了 一开始就是两次spfa之间处理好数据得更新管理就好 vect ...

  2. 浏览器中调用PHP在执行linux sudo指令时报sudo: sorry, you must have a tty to run sudo

    在php程序中使用了exec函数调用sudo指令,在浏览器中访问后,报sudo: sorry, you must have a tty to run sudo错误. 按照网上搜到的方法,修改/etc/ ...

  3. CSS选择器分类总结

    一.选择器语法及其意义(pattern and meaning) Pattern Meaning CSS level E an element of type E 标记选择器,匹配所有标签名为E的元素 ...

  4. Day 6 编码的进阶

     https://blog.csdn.net/Deft_MKJing/article/details/79460485 a.ascii码:8位表示一个字符,共可以表示2**8个(即256)字符 ,   ...

  5. 使用pipreqs生成项目依赖

    作用 导出当前项目的环境依赖 使用 # 安装 pip3 install pipreqs # 导出项目环境依赖 pipreqs ./ # 如果是Windows系统,会报编码错误 (UnicodeDeco ...

  6. Java的HashMap

    FAQ: 为什么要有HashMap? 答:我非常期待能在Java 中使用Hash表 这种数据结构 ,因为它的快速存取特性. Hash表 和HashMap的关系? 答:Hash表 是一种逻辑数据结构,H ...

  7. 文件操作(FILE)与常用文件操作函数

    文件 1.文件基本概念 C程序把文件分为ASCII文件和二进制文件,ASCII文件又称文本文件,二进制文件和文本文件(也称ASCII码文件)二进制文件中,数值型数据是以二进制形式存储的, 而在文本文件 ...

  8. FunDA(7)- Reactive Streams to fs2 Pull Streams

    Reactive-Stream不只是简单的push-model-stream, 它还带有“拖式”(pull-model)性质.这是因为在Iteratee模式里虽然理论上由Enumerator负责主动推 ...

  9. 【北京】安全研究员/工程师-20-35K,人体工程学座椅坐等你来~

    招聘地点:北京市西城区 薪资:20-35K 人体工程学座椅,高大上环境坐等你来 [招聘]安全研究员+安全工程师-北京数字观星科技有限公司 北京数字观星科技有限公司成立于2016年9月29日,是一家致力 ...

  10. AQS源码泛读,梳理设计流程(jdk8)

    一.AQS介绍 AQS(AbstractQueuedSynchronizer)抽象队列同步器,属于多线程编程的基本工具:JDK对其定义得很详细,并提供了多种常用的工具类(重入锁,读写锁,信号量,Cyc ...