简介:

HDFS High Availability Using the Quorum Journal Manager

Hadoop 2.x 中,HDFS 组件有三个角色:NameNode、DataNode、Secondary NameNode

1、NameNode

保存着 HDFS 的元数据信息,包括命名空间、块信息等。

维护着两种文件:fsimage、edit logs

2、DataNode

保存着 HDFS 的数据信息。

3、Secondary NameNode

负责合并 edit logs 到 fsimage。

# NameNode 会将元数据信息 fsimage 加载到内存中,供 DataNode 使用,将每次的修改保存在 edit logs 中。
# 每次 NameNode 重启时,将 edit logs 合并到 fsimage 中。
# 然而生产环境中 NameNode 很少重启,这就导致 edit logs 文件无限变大,当重启 NameNode 时,合并时间变长、启动时间变长。

# Secondary NameNode 负责定期将 edit logs 合并到 fsimage 然后同步给 NameNode,避免上述问题。

Hadoop 2.x 默认情况下,整个集群只有一台服务器充当 NameNode 角色,如果 NameNode 宕机,则 HDFS 及所有依赖 HDFS 的组件都无法访问。

由此可见 NameNode 的重要性,所以需要给 NameNode 做 HA !

  角色分配如下:

  192.168.1.25 master.hadoop      (NameNode Active 、ZKFC)
192.168.1.26 backup.hadoop (NameNode Standby、ZKFC)
192.168.1.27 datanode01.hadoop (DataNode、ZooKeeper Server、JournalNode)
192.168.1.28 datanode02.hadoop (DataNode、ZooKeeper Server、JournalNode)
192.168.1.29 datanode03.hadoop (DataNode、ZooKeeper Server、JournalNode)

一、搭建 Hadoop 集群

文档链接:http://www.cnblogs.com/wangxiaoqiangs/p/6700717.html

# 停止集群 sh sbin/stop-all.sh

二、搭建 ZooKeeper 集群

文档链接:http://www.cnblogs.com/wangxiaoqiangs/p/6809065.html

shell > ansible datanode -m shell -a '/usr/local/zookeeper-3.4.10/bin/zkServer.sh status'
datanode02.hadoop | SUCCESS | rc= >>
Mode: followerZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4./bin/../conf/zoo.cfg datanode03.hadoop | SUCCESS | rc= >>
Mode: leaderZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4./bin/../conf/zoo.cfg datanode01.hadoop | SUCCESS | rc= >>
Mode: followerZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4./bin/../conf/zoo.cfg shell > sh bin/zkCli.sh -server 192.168.1.27:,192.168.1.28:,192.168.1.29: [zk: 192.168.1.27:,192.168.1.28:,192.168.1.29:(CONNECTED) ] ls /
[zookeeper]

# 验证集群状态

三、配置 HDFS NameNode HA

1、修改 core-site.xml

shell > vim etc/hadoop/core-site.xml

<configuration>

    <property>
<name>fs.defaultFS</name>
<value>hdfs://myhdfs</value>
</property> <property>
<name>hadoop.tmp.dir</name>
<value>file:///data/hadoop/tmp</value>
</property> <property>
<name>fs.trash.interval</name>
<value></value>
</property> <property>
<name>io.file.buffer.size</name>
<value></value>
</property> <property>
<name>ha.zookeeper.quorum</name>
<value>192.168.1.27:,192.168.1.28:,192.168.1.29:</value>
</property> <property>
<name>ha.zookeeper.session-timeout.ms</name>
<value></value>
</property> </configuration>

# fs.defaultFS 指定的不再是某台 NameNode 的地址,是一个逻辑名称 ( hdfs-site.xml 文件中定义 )
# ha.zookeeper.quorum 指定 ZooKeeper Server 地址
# ha.zookeeper.session-timeout NameNode 与 ZooKeeper Server 超时时间,超时会发生主备切换

2、修改 hdfs-site.xml

shell > vim etc/hadoop/hdfs-site.xml

<configuration>

    <property>
<name>dfs.blocksize</name>
<value></value>
</property> <property>
<name>dfs.replication</name>
<value></value>
</property> <property>
<name>dfs.namenode.name.dir</name>
<value>file:///data/dfs/nn</value>
</property> <property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file:///data/dfs/sn</value>
</property> <property>
<name>dfs.datanode.data.dir</name>
<value>file:///data/dfs/dn</value>
</property> <property>
<name>dfs.namenode.handler.count</name>
<value></value>
</property> <property>
<name>dfs.nameservices</name>
<value>myhdfs</value>
</property> <property>
<name>dfs.ha.namenodes.myhdfs</name>
<value>nn1,nn2</value>
</property> <property>
<name>dfs.namenode.rpc-address.myhdfs.nn1</name>
<value>master.hadoop:</value>
</property> <property>
<name>dfs.namenode.rpc-address.myhdfs.nn2</name>
<value>backup.hadoop:</value>
</property> <property>
<name>dfs.namenode.http-address.myhdfs.nn1</name>
<value>master.hadoop:</value>
</property> <property>
<name>dfs.namenode.http-address.myhdfs.nn2</name>
<value>backup.hadoop:</value>
</property> <property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://192.168.1.27:8485;192.168.1.28:8485;192.168.1.29:8485/journal</value>
</property> <property>
<name>dfs.client.failover.proxy.provider.myhdfs</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property> <property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property> <property>
<name>dfs.journalnode.edits.dir</name>
<value>/data/dfs/journal</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.fencing.ssh.connect-timeout</name>
<value></value>
</property> </configuration>

四、初始化 backup.hadoop

# 根据集群部署文档来做 ( 修改主机名、配置hosts、创建hadoop用户、密钥认证、java环境、修改/data目录权限等 )

# 密钥认证要与原 NameNode、DataNode 都做

五、同步配置文件

1、修改 HOSTS

shell > vim /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
:: localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.1.25 master.hadoop
192.168.1.26 backup.hadoop
192.168.1.27 datanode01.hadoop
192.168.1.28 datanode02.hadoop
192.168.1.29 datanode03.hadoop

2、密钥认证

shell > ssh-copy-id -i ~/.ssh/id_rsa.pub "-p 22 root@backup.hadoop"

shell > su - hadoop

hadoop shell > ssh-copy-id -i ~/.ssh/id_rsa.pub "-p 22 hadoop@backup.hadoop"

3、同步配置文件

shell > ansible all -m synchronize -a 'src=/usr/local/hadoop-2.8.0 dest=/usr/local/'

六、初始化、启动 NameNode HA

1、初始化 zkfc

shell > su - hadoop

hadoop shell > hdfs zkfc -formatZK

INFO ha.ActiveStandbyElector: Successfully created /hadoop-ha/myhdfs in ZK.

2、启动 journalnode

hadoop shell > ansible datanode -m shell -a '/usr/local/hadoop-2.8.0/sbin/hadoop-daemon.sh start journalnode'

3、初始化 namenode,启动 NameNode

hadoop shell > hadoop namenode -format myhdfs

hadoop shell > sh /usr/local/hadoop-2.8./sbin/hadoop-daemon.sh start namenode

4、backup.hadoop 拷贝元数据、启动 NameNode

hadoop shell > hdfs namenode -bootstrapStandby  # 从 master.hadoop 拷贝 NameNode 元数据

hadoop shell > sh /usr/local/hadoop-2.8./sbin/hadoop-daemon.sh start namenode

5、master.hadoop、backup.hadoop 启动 zkfc

hadoop shell > sh /usr/local/hadoop-2.8./sbin/hadoop-daemon.sh start zkfc

6、启动 YARN

hadoop shell > sh /usr/local/hadoop-2.8./sbin/start-yarn.sh

6、启动 DataNode

hadoop shell > ansible datanode -m shell -a '/usr/local/hadoop-2.8.0/sbin/hadoop-daemon.sh start datanode'

# master.hadoop

 NameNode
ResourceManager
DFSZKFailoverController

# backup.hadoop

 NameNode
DFSZKFailoverController

# datanode.hadoop

 DataNode
NodeManager
JournalNode

七、验证 NameNode HA

# 访问 http://192.168.1.25:50070 显示 active
# 访问 http://192.168.1.26:50070 显示 standby

hadoop shell > kill   # 杀掉 master.hadoop 上的 NameNode

hadoop shell > tail -f /usr/local/hadoop-2.8./logs/hadoop-hadoop-zkfc-backup.hadoop.log  # backup.hadoop 监控 zkfc 日志

-- ::, INFO org.apache.hadoop.ha.ZKFailoverController: Trying to make NameNode at backup.hadoop/192.168.1.26: active...
-- ::, INFO org.apache.hadoop.ha.ZKFailoverController: Successfully transitioned NameNode at backup.hadoop/192.168.1.26: to active state

# 有待进一步完善

HDFS NameNode HA 部署文档的更多相关文章

  1. HP DL160 Gen9服务器集群部署文档

    HP DL160 Gen9服务器集群部署文档 硬件配置=======================================================Server        Memo ...

  2. hadoop2.6.0汇总:新增功能最新编译 32位、64位安装、源码包、API下载及部署文档

    相关内容: hadoop2.5.2汇总:新增功能最新编译 32位.64位安装.源码包.API.eclipse插件下载Hadoop2.5 Eclipse插件制作.连接集群视频.及hadoop-eclip ...

  3. Hadoop 部署文档

    Hadoop 部署文档 1 先决条件 2 下载二进制文件 3 修改配置文件 3.1 core-site.xml 3.2 hdfs-site.xml 3.3 mapred-site.xml 3.4 ya ...

  4. keepalived双机热备,安装部署文档

    keepalived双击热备,安装部署文档: 下载目录:/apps/keepalived-1.2.7.tar.gz 1:---> yum install -y make wget 2:---&g ...

  5. Flink 部署文档

    Flink 部署文档 1 先决条件 2 下载 Flink 二进制文件 3 配置 Flink 3.1 flink-conf.yaml 3.2 slaves 4 将配置好的 Flink 分发到其他节点 5 ...

  6. LVS+Heartbeat安装部署文档

    LVS+Heartbeat安装部署文档 发表回复 所需软件: ipvsadm-1.24-10.x86_64.rpmheartbeat-2.1.3-3.el5.centos.x86_64.rpmhear ...

  7. PPTP部署文档

    PPTP部署文档 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.       欢迎加入:高级运维工程师之路 598432640 前言:这款VPN部署起来特别简单,想对OPENVON配 ...

  8. supervisor 部署文档

    supervisor 部署文档 supervisor 需要Python支持,如果不用系统的supervisor,单独安装python python 安装 #依赖 yum install python- ...

  9. centos6 Cacti部署文档

    centos6 Cacti部署文档 1.安装依赖 yum -y install mysql mysql-server mysql-devel httpd php php-pdo php-snmp ph ...

随机推荐

  1. 修复Ubuntu下XTerm不能正常显示中文字体的问题

    打开/etc/X11/app-defaults/XTerm在最后添加如下代码: Xft.dpi:96         xpdf.title: PDF         XTerm*faceSize: 1 ...

  2. vue-cli脚手架目录讲解

    build目录 config目录 是webpack配置相关的 node-modules目录 是我们用npm install 安装的依赖代码库 src目录 是我们项目的源码(我们开发的所有项目文件都在s ...

  3. SGU 219 Synchrograph tarjian找环,理解题意,图论 难度:3

    http://acm.sgu.ru/problem.php?contest=0&problem=219 题目大意: 如果指向某个点的边权全都为正数,那么这个点就是可点燃的,点燃操作把入弧权值- ...

  4. 改造 Ace Admin 模板的 ace_tree 组件的 folderSelect 样式

    *注:我用的Ace Admin版本为1.3.4 Ace Admin 是一个轻量,功能丰富,HTML5.响应式.支持手机及平板电脑上浏览的优秀管理后台模板. 关于tree的使用,html文件夹下tree ...

  5. sql 时间段内没有的数据等于0

    如何实现没有的时间段中使用0来填充?? if object_id('[A]') is not null drop table [A] go create table [A]([日期] datetime ...

  6. Alpha冲刺一 (8/10)

    前言 队名:拖鞋旅游队 组长博客:https://www.cnblogs.com/Sulumer/p/10023260.html 作业博客:https://edu.cnblogs.com/campus ...

  7. 回首C语言关键字(~回首向来萧瑟处~)

    开篇废话: 本文意在回顾 C 语言中的关键字,整理文件发现当时做的这些笔记还是蛮用心的,有临摹 前辈的足迹也有自己的理解和体会.时至今日2018已经跨过一半,对不起过去半年,今天 拿这篇关键字开篇,开 ...

  8. 2017年7月ROS学习资料小结

    <孙子兵法·谋攻篇>:"上兵伐谋,其次伐交,其次伐兵,其下攻城:攻城之法为不得已." 任何发生在自己国土上的战争,即便胜利,也饱含屈辱. ----~~~~----Gaz ...

  9. w3m使用小记

    By francis_hao    Mar 8,2017   w3m是一个基于文本的web浏览器和分页器,运行在unix和windows系统上. 可显示包含链接的超文本标记语言(HTML),显示效果如 ...

  10. Codeforces 989A:A Blend of Springtime

    A. A Blend of Springtime time limit per test 1 second memory limit per test 256 megabytes input stan ...