说明:
hdfs:nn单点故障,压力过大,内存受限,扩展受阻。
hdfs ha :主备切换方式解决单点故障
hdfs Federation联邦:解决鸭梨过大。支持水平扩展,每个nn分管一部分目录,所有nn共享dn资源。
使用JN集群保证数据一致性,使用zk集群解决主备切换

1.若使用主备节点,常常存在的问题:强一致性,若一致性。
强一致性(同步):nn主节点必须等到nn副本返回成功后,才能向客户端返回成功。主和副本之间可能会有如网络延迟、阻塞等问题,就造成了nn的不可用,违背了HA初衷。
弱一致性(异步):采用异步方式,nn主无需等待nn副本返回成功,则会有nn副本数据同步失败,造成两个nn数据不一致。
2.JN(journalnode)集群:为了解决nn一致性,将使用jn 保持数据一致。namenode 的元数据通过这个集群共享。
当Active节点执行任何名称空间修改时,它会将修改记录持久地记录到大多数这些JN中。待机节点能够从JN读取编辑,并且不断观察它们对编辑日志的更改。
当备用节点看到编辑时,它会将它们应用到自己的命名空间。这可确保在发生故障转移之前完全同步命名空间状态,保证两个nn数据最终的一致性。

3.ZK集群:解决nn主备自动切换,当nn主节点挂掉,通过zk自动将nn副本升级为主节点。

准备三台zk服务器,安装zk并启动服务集群,比较简单,不知道的网上百度

nameNode 高 可 用 配置
1.配置高可用服务名称
编辑hdfs-site.xml
<!--配置ns 名称-->
<property>
<name>dfs.nameservices</name>
<value>cluster1</value>
<description>提供服务的NS逻辑名称</description> 
</property>

2.配置jn集群
2.1 编辑hdfs-site.xml 配置jn服务器列表及共享目录位置 dfs.namenode.shared.edits.dir
<!--(配置值最后的/cluster作为存储的根路径,多个HA可公用服务器进行数据存储,节约服务器成本。因此每个HA服务的根路径不能一样,便于区分。)这个目录类似与共享目录,jn主要实现作用,数据共享,保持数据一致性-->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://nameNode10.com:8485;dataNode20.com:8485;dataNode30.com:8485/cluster</value>
</property>
2.2指定 jn 物理储存路径 dfs.journalnode.edits.dir
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/software/data/hadoop/data/tmp/journal</value>
<description>指定 jn 物理储存路径 dfs.journalnode.edits.dir</description>
</property>
3.3启动hdfs服务,分别在三台机器执行jps 验证服务是否启动成功
2.zk和集群配置
编辑hdfs-site.xml
1.指定nn服务器服务器列表(实际应用中根据zk自动切换主备)
<!--指定nna(NameNodeActive)和nns(NameNodeStandby)-->
<property>
<name>dfs.ha.namenodes.cluster1</name>
<value>nn10,nn40</value>
<description>指定nn列表</description>
</property>
2.侦听的每个NameNode的RPC地址。
<property>
<name>dfs.namenode.rpc-address.cluster1.nn10</name>
<value>nameNode10.com:8020</value>
<description>侦听的每个NameNode的RPC地址</description>
</property>
<property>
<name>dfs.namenode.rpc-address.cluster1.nn40</name>
<value>nameNode40.com:8020</value>
</property>
3.侦听的每个NameNode的http地址。(如果启用https,还需要配置https)
<property>
<name>dfs.namenode.http-address.cluster1.nn10</name>
<value>nameNode10.com:9870</value>
<description>侦听的每个NameNode的http地址</description>
</property>
<property>
<name>dfs.namenode.http-address.cluster1.nn40</name>
<value>nameNode40.com:9870</value>
</property>
4.确定主节点配置(对于第一次调用,它同时调用所有名称节点以确定活动的名称节点,之后便直接调用主节点) dfs.client.failover.proxy.provider.[nameservice ID]
<!---确定主节点配置(对于第一次调用时确认-->
<property>
<name>dfs.client.failover.proxy.provider.cluster1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
5.配置免密方式(shell和sshfence)路径填写,你.ssh 位置目录文件
<!--配置免密方式(shell和sshfence)路径填写,你.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_rsa</value>
</property>

6.其他配置
<!-- 故障自动切换状态-->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!--数据存放目录-->
<property>
<name>dfs.namenode.name.dir</name>
<value>/software/data/hadoop/data/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/software/data/hadoop/data/dfs/data</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>

<property>
<name>dfs.journalnode.http-address</name>
<value>0.0.0.0:8480</value>
</property>
<property>
<name>dfs.journalnode.rpc-address</name>
<value>0.0.0.0:8485</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>nameNode10.com:2181,dataNode20.com:2181,nameNode40.com:2181</value>
</property>
3.配置core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://cluster1</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/software/data/hadoop/temp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>nameNode10.com:2181,nameNode40.com:2181,dataNode20.com:2181</value>
</property>

zk格式化:hdfs zkfc -formatZK 
手动激活nn:hdfs haadmin -transitionToActive -forcemanual nn10

单步启动流程
分别在三台机器上启动 journalnode 
/opt/hadoop/sbin/hadoop-daemon.sh start journalnode

//在第一台机器上进行格式化namenode (删除之前的文件)
[hadoop@bigdata11 opt]$ hdfs namenode -format

//在第一台启动namenode
[hadoop@bigdata11 ~]$ /opt/hadoop/sbin/hadoop-daemon.sh start namenode

//在第二个namenode节点上执行bootstarpStandby
[hadoop@bigdata12 opt]$ hdfs namenode -bootstrapStandby

Hadoop入门学习笔记-第二天 (HDFS:NodeName高可用集群配置)的更多相关文章

  1. Hadoop入门学习笔记-第三天(Yarn高可用集群配置及计算案例)

    什么是mapreduce 首先让我们来重温一下 hadoop 的四大组件:HDFS:分布式存储系统MapReduce:分布式计算系统YARN: hadoop 的资源调度系统Common: 以上三大组件 ...

  2. Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群

    Redis总结(五)缓存雪崩和缓存穿透等问题   前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...

  3. Hadoop(25)-高可用集群配置,HDFS-HA和YARN-HA

    一. HA概述 1. 所谓HA(High Available),即高可用(7*24小时不中断服务). 2. 实现高可用最关键的策略是消除单点故障.HA严格来说应该分成各个组件的HA机制:HDFS的HA ...

  4. 入门大数据---基于Zookeeper搭建Spark高可用集群

    一.集群规划 这里搭建一个 3 节点的 Spark 集群,其中三台主机上均部署 Worker 服务.同时为了保证高可用,除了在 hadoop001 上部署主 Master 服务外,还在 hadoop0 ...

  5. MongoDB 学习笔记(三) MongoDB (replica set) 集群配置

    MongoDB Replica Sets的结构类似于以集群,完全可以把他当成一个集群,因为他确实与集群实现的作用是一样的:如果其中一个节点出现故障,其他的节点会马上将业务接管过来.而无需停机操作 Mo ...

  6. RabbitMQ学习系列(六): RabbitMQ 高可用集群

    前面讲过一些RabbitMQ的安装和用法,也说了说RabbitMQ在一般的业务场景下如何使用.不知道的可以看我前面的博客,http://www.cnblogs.com/zhangweizhong/ca ...

  7. 入门大数据---基于Zookeeper搭建Kafka高可用集群

    一.Zookeeper集群搭建 为保证集群高可用,Zookeeper 集群的节点数最好是奇数,最少有三个节点,所以这里搭建一个三个节点的集群. 1.1 下载 & 解压 下载对应版本 Zooke ...

  8. Hadoop高可用集群

    1.简介 若HDFS集群中只配置了一个NameNode,那么当该NameNode所在的节点宕机,则整个HDFS就不能进行文件的上传和下载. 若YARN集群中只配置了一个ResourceManager, ...

  9. Hadoop入门学习笔记---part4

    紧接着<Hadoop入门学习笔记---part3>中的继续了解如何用java在程序中操作HDFS. 众所周知,对文件的操作无非是创建,查看,下载,删除.下面我们就开始应用java程序进行操 ...

随机推荐

  1. 使用基于vuecli创建的目录推送到指定远程分支

    笔者使用vuecli创建项目目录以后,在想将该目录提交到远程仓库时发现行不通,在忙活了一下午以后写下此文 1.github上新建一空分支,然后克隆该分支地址:  https://github.com/ ...

  2. excel中存储的时间的类型是什么

    做了一个excel导入数据的功能,其中需要导入时间,默认到天.在开发过程中发现了一个问题, 导入的数据解析到的时间格式是 02-03-19,发现年份前面的两位数丢失了.这当然是导入数据 的解析包的问题 ...

  3. python白帽子/黑客/实战编程教程

    Python搜索爬虫抓取超高清视频教程_第一期Python搜索爬虫抓取超高清视频教程_第二期Python搜索爬虫抓取视频教程_第三期Python搜索爬虫抓取视频教程_第四期Python搜索引擎爬虫抓取 ...

  4. 新手想掌握Python技能需要众多Python项目练习,适合项目有哪些?

    适合新手练习的Python项目有哪些?简单易上手的Python项目汇总:Web 项目设计:内容聚合器.正则表达式查询工具.网址缩短.便利贴.功能.测验.GUI 项目设计:MP3 播放器.闹铃提醒工具. ...

  5. Unity 游戏框架搭建 2019 (三十二、三十三) 类的命名 & 代码文件命名

    昨天我们完成了第八个示例的第二个 MenuItem 菜单顺序的调整. 我们今天再往下接着调整. 我们来看下接下来的 MenuItem 代码如下: [MenuItem("QFramework/ ...

  6. seo 回忆录百度基本概念(一)

    前言 我以前的博客自己做的seo,现在拿来和大家一起交流,是白帽哈,黑帽的不敢发,也不敢学[微笑]. 正文 为什么做seo 做seo说到底就是为了排名.为什么需要排名呢?因为现在人比较懒,只会去查看第 ...

  7. Java中Double保留小数位

    1.能四舍五入 double d = 114.145; d = (double) Math.round(d * 100) / 100; System.out.println(d); 2. BigDec ...

  8. js事件冒泡于事件捕获

    事件冒泡 事件捕获指的是从document到触发事件的那个节点,即自上而下的去触发事件. 事件冒泡是自下而上(从最深节点开始,向上传播事件)的触发事件 //例子 <div id="pa ...

  9. AIX详细的VG,LV扩容步骤

    需求 1.归档日志刷得太快,经常把空间挤爆. 2.Oracle数据库表空间需要扩容 解决方案 1.先做重要数据备份 2.进行文件系统扩容 步骤 1. df -g 查找出/u01 对应的VG卷 VOLU ...

  10. 点击Qtableview表头,触发事件

    connect(horizontalHeader(), SIGNAL(sectionClicked(int)), this, SLOT(onHeaderClicked(int))); refer to ...