1 .Hadoop HA 说明

1.1 Hadoop HA主备介绍

​ 自Hadoop2.x版本后可以增加多个namenode节点【保存着整个系统的名称空间和文件数据块的地址映射又称“元数据”】,多个namenode有活跃(active)和 准备(Standby)两种状态 , 即一个帮派有一个正一个副,平时都是正帮主主持大局,但如果正帮主遭遇不测被Kill S掉后,这时候副帮主就得出来主持大局了。

1.2 Hadoop HA选举介绍

​ Hadoop HA 的正帮主(active)选举一般都要借助长老会(Zookeeper)帮助。长老会保存着每个帮会成员的生命水晶,生命水晶一般会检测到每个帮员生命特征,一但生命水晶熄灭也就代表人死亡。长老会会定时查看帮主的生命水晶状况,一但帮主生命水晶熄灭,长老会会立刻在副帮主之间推选出新的正帮主,从而继续管理帮内事务。

1.3 Hadoop HA同步机制(QJM)

​ 当长老会(Zookeeper)推选出新的正帮主,那被推出的帮主他是如何快速接手帮内事务呢?答案是正副帮主之间有一个小本本,这个小本本记录着大小帮内的事务,帮主会将帮内事务写在这个正副帮主共享的小本本上面,所以一但帮主惨遭不测,其他帮主凭借帮主小本本也能快速上位处理帮内事务。

2. Hadoop HA 部署

2.1部署前的环境配置:

  1. jdk1.8安装并配置环境变量
  2. ssh免密,注意因为是多帮主帮派(namenode)故在“两个帮主”(namenode)节点生成密钥分别分发给所以节点

  3. Zookeeper安装,每个节点都要安装。

2.2 Hadoop 节点部署

ip 主机名 服务 备注
192.168.216.111 hadoop01 jdk、NameNode、DataNode、JouranlNode、ResourceManger、NodeManager 正帮主
192.168.216.112 hadoop02 jdk、NameNode、DataNode、JouranlNode、ResourceManger、NodeManager 副帮主
192.168.216.113 hadoop03 jdk、DataNode、JouranlNode、NodeManager
# 解压Hadoop
[root@hadoop01 src]# tar -zxvf /home/hadoop-2.7.6.tar.gz -C /usr/local/src/
#配置hadoop环境变量
[root@hadoop01 src]# vi /etc/profile
#增加jdk、zookeeper、hadoop的地址
#注意:要添加你自己解压所在的地址,下面是我的解压地址
export JAVA_HOME=/usr/local/src/jdk1.8.0_152/
export ZK_HOME=/usr/local/src/zookeeper-3.4.10/
export HADOOP_HOME=/usr/local/src/hadoop-2.7.6/
export PATH=$PATH:$JAVA_HOME/bin:$ZK_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:#刷新环境变量
[root@hadoop01 src]# source /etc/profile

NameNode和ResourceManager配置高可用大概需要配置如下6个配置文件:

2.1.1 core-site.xml
[root@hadoop01 hadoop-2.7.6]# vi ./etc/hadoop/core-site.xml<configuration>
<!--指定hdfs文件系统的默认名-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://sw</value>
</property>
<!--指定zk的集群地址-->
<property><name>ha.zookeeper.quorum</name><value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property>
<!--指定hadoop的临时目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadata/tmp</value>
</property>
</configuration>
注意 " fs.defaultFS "和 " fs.default.name"的区别:
  1. 使用 " fs.defaultFS “首先会判断Hadoop是否开启HA(高可用),使用” fs.defaultFS "一般使用在Hadoop HA
  2. 使用 " fs.default.name "一般在单一的Namenode节点(一个帮就一个帮主) ,如果在单一的Namenode节点用 " fs.defaultFS "就会报错
2.1.2 hdfs-site.xml
[root@hadoop01 hadoop-2.7.6]# vi ./etc/hadoop/hdfs-site.xml<configuration>
<!--指定块的副本数,默认是3-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property><!--指定数据块的大小-->
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
</property><!--指定namenode的元数据目录-->
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadata/dfs/name</value>
</property><!--指定datanode存储数据目录-->
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadata/dfs/data</value>
</property><!--hdfs的命名空间,逻辑名称-->
<property><name>dfs.nameservices</name><value>sw</value>
</property><!--qianfeng下的namenode的别名-->
<property><name>dfs.ha.namenodes.sw</name><value>nn1,nn2</value>
</property><!--指定nn1和nn2的通信地址-->
<property><name>dfs.namenode.rpc-address.qianfeng.nn1</name><value>hadoop01:9000</value>
</property>
<property><name>dfs.namenode.rpc-address.qianfeng.nn2</name><value>hadoop02:9000</value>
</property>
<!--指定namenode的web通信地址-->
<property><name>dfs.namenode.http-address.qianfeng.nn1</name><value>hadoop01:50070</value>
</property>
<property><name>dfs.namenode.http-address.qianfeng.nn2</name><value>hadoop02:50070</value>
</property><!--指定共享日志目录, 这个就是帮主的小本本-->
<property><name>dfs.namenode.shared.edits.dir</name><value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/sw</value>
</property><!--指定开启namenode失败自动转移,这个就是长老会根据生命水晶检测选举新帮主-->
<property><name>dfs.ha.automatic-failover.enabled</name><value>true</value>
</property><!--指定失败转移的类-->
<property><name>dfs.client.failover.proxy.provider.qianfeng</name><value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property><!--防止namenode的脑裂-->
<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_rsa</value>
</property><!--指定超时时间设置-->
<property><name>dfs.ha.fencing.ssh.connect-timeout</name><value>30000</value>
</property><!--指定日志的本地目录-->
<property><name>dfs.journalnode.edits.dir</name><value>/home/hadata/journal1</value>
</property><!--是否开启webhdfs的-->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property><!--是否开启hdfs的权限-->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property></configuration>
2.1.3 mapred-site.xml
[root@hadoop01 hadoop-2.7.6]# mv ./etc/hadoop/mapred-site.xml.template ./etc/hadoop/mapred-site.xml
[root@hadoop01 hadoop-2.7.6]# vi ./etc/hadoop/mapred-site.xml<configuration>
<!--配置mapreduce的框架名称-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<final>true</final>
</property><!--指定jobhistoryserver的内部通信地址-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop01:10020</value>
</property><!--指定jobhistoryserver的web地址-->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop01:19888</value>
</property>
</configuration>

jobhistoryserver: 历史服务器,管理者可以通过历史服务器查看已经运行完成的Mapreduce作业记录。

2.1.4 yarn-site.xml
[root@hadoop01 hadoop-2.7.6]# vi ./etc/hadoop/yarn-site.xml<configuration><!--指定mapreduce的shuffle服务-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property><!--是否开启yarn的HA-->
<property><name>yarn.resourcemanager.ha.enabled</name><value>true</value>
</property>
<property><name>yarn.resourcemanager.cluster-id</name><value>sw_yarn</value>
</property>
<property><name>yarn.resourcemanager.ha.rm-ids</name><value>rm1,rm2</value>
</property>
<property><name>yarn.resourcemanager.hostname.rm1</name><value>hadoop01</value>
</property>
<property><name>yarn.resourcemanager.hostname.rm2</name><value>hadoop02</value>
</property>
<property><name>yarn.resourcemanager.webapp.address.rm1</name><value>hadoop01:8088</value>
</property>
<property><name>yarn.resourcemanager.webapp.address.rm2</name><value>hadoop02:8088</value>
</property><!--指定zookeeper的集群地址-->
<property><name>yarn.resourcemanager.zk-address</name><value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
</property></configuration>
2.1.5 slaves
[root@hadoop01 hadoop-2.7.6]# vi ./etc/hadoop/slaveshadoop01
hadoop02
hadoop03
2.1.6 hadoop-env.sh
[root@hadoop01 hadoop-2.7.6]# vi ./etc/hadoop/hadoop-env.sh
#添加jdk路径
export JAVA_HOME=/usr/local/src/jdk1.8.0_152/

3. Hadoop HA 开启

3.1 先启动三台的Zookeeper

#节点1
[root@hadoop01 hadoop-2.7.6]# zkServer.sh start
#节点2
[root@hadoop02 hadoop-2.7.6]# zkServer.sh start
#节点3
[root@hadoop03 hadoop-2.7.6]# zkServer.sh start

3.2 启动 JournalNode

JournalNode : 作为独立进程进行相互通信。当active状态的NameNode的命名空间有任何修改时,会告知大部分的JournalNodes进程。standby状态的NameNode有能力读取JNs中的变更信息,并且一直监控edit log的变化,把变化应用于自己的命名空间。standby可以确保在集群出错时,命名空间状态已经完全同步了。(即帮主会把本帮的事务写在小本本上,副帮主也能同时获取小本本的记录)

[root@hadoop01 hadoop-2.7.6]# hadoop-daemons.sh start journalnode

3.3 namenode格式化并启动

HDFS集群有两类节点以管理节点-工作节点模式运行,即一个namenode(管理节点)和多个datanode(工作节点)。

namenode(管理文件系统的命名空间):它维护着文件系统树及整棵树内的所有文件和目录。namenode以两个文件形式永久保存在本地磁盘上 ”命名空间镜像文件“ 和 ”编辑日志文件“。

[root@hadoop01 ~]# hdfs namenode -format
[root@hadoop01 ~]# hadoop-daemon.sh start namenode

3.4 另外的namenode节点同步

副帮主查看帮主在小本本写的”羞羞“事,并记录在自己这里

[root@hadoop02 ~]# hdfs namenode -bootstrapStandby

3.5 格式化zkfc

#选择其中一个namenode节点进行格式化zkfc
#前提QuorumPeerMain服务必须处于开启状态,客户端zkfc才能格式化成功
[root@hadoop01 ~]# hdfs zkfc -formatZK

3.6 启动集群

[root@hadoop01 ~]# start-all.sh

原来你是这样的Hadoop HA?相关推荐

  1. hadoop(ha)hbase(双master)安装

    一.软件包准备 CentOS Linux release 7.2  Linux version 3.10.0-327.el7.x86_64 jdk-7u65-linux-x64.tar.gz zook ...

  2. Hadoop HA+Federation 高可用联邦模式搭建指南

    为什么80%的码农都做不了架构师?>>>    简述 Hadoop 集群一共有4种部署模式,详见<Hadoop 生态圈介绍>. HA联邦模式解决了单纯HA模式的性能瓶颈( ...

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

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

  4. 图说Hadoop HA

    1.hadoopHA 概览 2.hadoop HA 架构图 3.架构 4.运行流程图 5.组件 转载于:https://www.cnblogs.com/dreamofintellegent/p/579 ...

  5. Hadoop Ha集群配置

    为什么要配置HDFS HA?   首先:HDFS集群中NameNode 如果存在单点故障.对于只有一个NameNode的集群,如果NameNode机器出现意外情况,将导致整个集群无法使用. 而影响HD ...

  6. Hadoop Ha (High avilable)配置

    为什么要配置HDFS HA? 首先:HDFS集群中NameNode 如果存在单点故障.对于只有一个NameNode的集群,如果NameNode机器出现意外情况,将导致整个集群无法使用. 而影响HDFS ...

  7. 【云原生】Hadoop HA on k8s 环境部署

    文章目录 一.概述 二.开始部署 1)添加 journalNode 编排 1.控制器Statefulset 2.service 2)修改配置 1.修改values.yaml 2.修改hadoop/te ...

  8. Hadoop HA集群配置问题记录

    打算用3个节点搭建一个HA 集群,规划如下 HA集群规划   NameNode DataNode JournalNode node1 是 是 是 ndoe2 是 是 是 node3   是 是 hdf ...

  9. 基于Hadoop HA集群部署HBase HA集群(详细版)

    文章目录 1.前言 2.ZooKeeper与Hadoop.HBase的关系 3.Hadoop与HBase的关系 4.架构资源规划 5.ZooKeeper集群设置 5.1 设置nn节点的zoo.conf ...

  10. 在Mac上安装Hadoop HA 高可

    **Mac安装Hadoop HA高可 在Mac上安装Hadoop HA 高可用 配置环境: HA & Federation介绍 Hadoop 1.x与Hadoop 2.x Hadoop 2.x ...

最新文章

  1. Spring Boot 工程集成全局唯一ID生成器 Vesta
  2. AppDynamics把业务交易跟踪扩展到SAP环境
  3. Tech·Ed 2009
  4. 【树莓派学习笔记】八、两步安装VS Code (Visual Studio Code)
  5. oracle 表空间 碎片,Oracle表空间碎片整理
  6. Python 如何拆分数据集
  7. [USACO13MAR]Poker Hands【贪心】
  8. Win10操作系统下,如何打开DOS窗口(图文教程)
  9. 失败产品手册:一款影音娱乐平台的败局
  10. MSM8937-MSM8953 I2C 配置调试指南
  11. python用于爬虫的包是_Python 爬虫之抓包的理解
  12. 计算机无法继续安装程序,电脑提示nvidia安装程序无法继续 如何解决 - 驱动管家...
  13. Android 中Goolgle 相关服务的移植
  14. android-微信sdk
  15. android 6g 有必要吗,手机6g运存有必要吗
  16. 佳能Canon MF9200 Series 一体机驱动
  17. linux java定时关机,Linux定时关机
  18. 水果食用大全 -- 果品食疗 - 杏
  19. JAVA代码混淆器大全
  20. u盘中Trojan.Generic病毒

热门文章

  1. D类水声功放模块简介
  2. 怎样在M1 Mac上运行iOS应用?
  3. Mac 用命令行终端打开app应用程序
  4. html计算年龄代码,js+html实现周岁年龄计算器
  5. 解决方案:用word制作的简历表格转为PDF多了条线
  6. Java-Spring MVC学习笔记
  7. python异步协程,抓取豆瓣top250电影海报。
  8. vue3 中使用图片播放器
  9. 智慧政务 | 云计算赋能传统政务升级
  10. 去除PDF文件的数字签名、密码