HDFS(一)
HDFS的概念
HDFS首先是文件系统(FileSystem,FS),尽管这个FS是基于OS原生的文件系统之上;而且这个文件系统是一个抽象概念,HDFS作为一个整体出现,对外(client)隐藏了其内部分分布式文件存储的细节。
HDFS的核心概念有三个,完美实现了对于内部复杂性的封装:
首先是数据块;原生的文件系统有数据块的概念,不同的操作系统不一样,大概几千K;硬件上面数据存储也是有数据块,512K。HDFS的数据块则是64M到128M。HDFS之所以这么就是为了减少选址时间(文件小,索引多,导致查询慢);但是文件块也不能太大,否则影响并发(文件大,分布少,导致并发小)。
数据块定义了这个概念目的是为了操作都是围绕数据块来的:
1)索引都是以块为单位进行记录;
2)容错也是以块为单位(副本拷贝,覆盖);
3)文件不再一个整体,而是文件块集合,这样模型变得简单(二级关系变成了一级关系);
4)刷缓冲区的文件到Disk也是以块为单位,即FSDataOutputStream.flush;想要立即刷回硬盘需要调用hsync()函数;
第二个概念是NameNode,NameNode的职责就是负责元数据管理,NameNode里面包含了文件块的位置;如果没有NameNode就无法组装起完整的文件。所以NameNode节点数据需要主备模式,即NameNode和Secondary NameNode两个;为了数据同步同时又不影响NameNode工作,HDFS设计了checkpoint机制。
VERSION文件里面定义了这个集群相关的一些信息
1)clusterId字段代表了集群ID;
2)namesparcId则代表HDFS文件系统ID,在NameNode创建之初的时候产生;
3)storageType代表node类型,namenode or datanode;
4)cTime代表文件操作系统创建的时间;新格式化的时候这个值总是0;但是当文件操作系统被更新的时候将会改写为更新的时间点(时间戳)。
checkpoint机制是一个时间点;到了时间点之后:
1)Secondary NameNode(SNN)将会向NameNode(NN)请求数据;NameNode会把当前操作日志(edits文件)进行roll,然后向一个新的操作日志文件中写;然后secondary获取到edits以及fsimage两个文件,注意此时faimage文件还是旧的,未同步;NameNode不会随时更新此文件,只有checkpoint的时候有secondary nameNode做同步。
2)SNN将会根据edits的日志操作合并到fsimage里面;
3)然后再把faimage文件同步到NameNode节点中去。
这样就实现了NameNode备份,可能会因为checkpoint不及时,导致数据丢失。
看过了checkpoint,其实你会发现在checkpoint之前,所有的改动其实并没有被持久化,只是被保存到内存中的数据库;任何的修改都是先该edits文件,然后再更新到内存数据;这种情况导致的就是当NameNode重启的时候,他是会将edits文件和fsimage文件进行合并,操作和SNN是类似的。

第三个概念是DataNode,DataNode的角色是用于存储和查询数据文件;数据存入DataNode的过程是:Client向NameNode请求文件路径,有则返回既存DataNode(包括两个副本DataNode),如果没有则根据DataNode的分布返回一个Pipeline,首先是map运行机器(第一个副本),另外两个尽量选择是一个机架上面的其他两个DataNode;如果没有则选择另外一个机架上面。
在整个操作过程中,有两条线,第一条线是访问NameNode获取Pipeline;第二条线是想dataNode中写入数据;其中client端在写入数据的时候其实会维护一个FileBlockQueue,只有写入成功的才会删除;用于当写入发生异常,比如4.1挂了,将会把所有的写入4.1失败的数据以及未来数据统统发给后续的副本DataNode机器,同时通知NameNode;另外为了数据一致性,将会在最后个DataNode写入的时候做校验和。但是为什么要在最后一个点做呢?这样做是为了避免在复制副本过程中发生了对包,所以check是放在最后一个节点做得,这样check只需要做一次。
其实NameNode和DataNode所管理的对象都是数据块;NameNode是记录数据块存储的位置,同时通过NN和SNN实现了高可用;
在Hadoop 2.x推出了NameNode的HA之后,其实Standby Namenode就会同时扮演Secondary NameNode的功能(当前活跃的NameNode称之为Active NameNode),Secondary NameNode和Standby NameNode最大的却别在于前者并不对外提供服务,只是对NameNode提供服务;后者则是提供对外服务(用于做为Active NameNode的backup)。所以二者不需要并存(即使并存也会报错)。NameNode的SecondaryNameNode是为了帮助NameNode做日志集成,用于挂掉后,可以通过集成的日志进行数据恢复;NameNode的HA则是扮演持续服务的角色,客户端将会同时配置两个NameNode;不过做standby node所在的节点同时会扮演secondary nameNode的角色;
standby namenode切换为active namenode之后,数据是如何做到同步的呢?通过共享存储实现的,这里使用到的是cloudera的QJM(Quorum Journal Manager) 方案,active namenode的每次写入edits之后,数据将会写入到JournalNode中(只要保证超过半数的JournalNode数据写入成功即可);standby namenode将会定时的从journalNode中同步数据;通过这种方式实现了该节点可以同步active nodename的数据。

HDFS还有两个很重要的工具:
distcp,用于在两个集群间拷贝数据;
1)distcp实现是基于mapreduce,但是只有map节点;
2)distcp有一个“-m”参数,该参数指定了几个map来跑程序;map将会被均匀的分布到各个DataNode上面;这个数字不能太小,否则将会导致数据倾斜因为map会选定执行的设备为数据保存的第一个副本;极端讲,如果只有一个map那么将会导致所有的文件都拷贝到了同一个节点上面。
har,hadoop自己的tar工具,可以对文件,尤其是小文件进行打包;好处就是hadoop原生支持,而且可以当成普通目录进行读取。
参考
《hadoop 权威指南(第四版)》
HDFS(一)的更多相关文章
- hadoop 2.7.3本地环境运行官方wordcount-基于HDFS
接上篇<hadoop 2.7.3本地环境运行官方wordcount>.继续在本地模式下测试,本次使用hdfs. 2 本地模式使用fs计数wodcount 上面是直接使用的是linux的文件 ...
- Hadoop学习之旅二:HDFS
本文基于Hadoop1.X 概述 分布式文件系统主要用来解决如下几个问题: 读写大文件 加速运算 对于某些体积巨大的文件,比如其大小超过了计算机文件系统所能存放的最大限制或者是其大小甚至超过了计算机整 ...
- python基础操作以及hdfs操作
目录 前言 基础操作 hdfs操作 总结 一.前言 作为一个全栈工程师,必须要熟练掌握各种语言...HelloWorld.最近就被"逼着"走向了python开发之路, ...
- C#、JAVA操作Hadoop(HDFS、Map/Reduce)真实过程概述。组件、源码下载。无法解决:Response status code does not indicate success: 500。
一.Hadoop环境配置概述 三台虚拟机,操作系统为:Ubuntu 16.04. Hadoop版本:2.7.2 NameNode:192.168.72.132 DataNode:192.168.72. ...
- HDFS的架构
主从结构 主节点,只有一个: namenode 从节点,有很多个: datanodes 在版本1中,主节点只有一个,在 版本2中主节点有两个. namenode 负责(管理): 接收用户操作请求 维护 ...
- hdfs以及hbase动态增加和删除节点
一个知乎上的问题:Hbase的Region server和hadoop的datanode是否可以部署在一台服务器上?如果是的话,二者是否是一对一的关系?部署在同一台服务器上,可以减少数据跨网络传输的流 ...
- hadoop程序问题:java.lang.IllegalArgumentException: Wrong FS: hdfs:/ expected file:///
Java代码如下: FileSystem fs = FileSystem.get(conf); in = fs.open(new Path("hdfs://192.168.130.54:19 ...
- 01 HDFS 简介
01.HDFS简介 大纲: hadoop2 介绍 HDFS概述 HDFS读写流程 hadoop2介绍 框架的核心设计是HDFS(存储),mapReduce(分布式计算),YARN(资源管理),为海量的 ...
- 何为HDFS?
该文来自百度百科,自我收藏. Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点.但同时, ...
- Flume(4)实用环境搭建:source(spooldir)+channel(file)+sink(hdfs)方式
一.概述: 在实际的生产环境中,一般都会遇到将web服务器比如tomcat.Apache等中产生的日志倒入到HDFS中供分析使用的需求.这里的配置方式就是实现上述需求. 二.配置文件: #agent1 ...
随机推荐
- 二十八 Python分布式爬虫打造搜索引擎Scrapy精讲—cookie禁用、自动限速、自定义spider的settings,对抗反爬机制
cookie禁用 就是在Scrapy的配置文件settings.py里禁用掉cookie禁用,可以防止被通过cookie禁用识别到是爬虫,注意,只适用于不需要登录的网页,cookie禁用后是无法登录的 ...
- word2016_统计字数
统计字数 审阅->字数统计
- jquery extend源码解析
$.extend(obj1,0bj2,{"name":"s","age":22}) //target 要拷贝到哪个对象上 // i 要执行拷 ...
- DNS污染——domain name的解析被劫持了返回无效的ip
看下dns污染: bash-3.2$ dig twitter.com +trace ; <<>> DiG 9.10.6 <<>> twitter.com ...
- superset dashboard 设置自动刷新
因为发现了,自己制作了看板dashboard,却不会刷新,很奇怪. 那这样不是太傻了.难道要业务人员一个个去点吗? 一定有刷新的,然后和无头苍蝇在网上找了半天. 实际刷新的位置在这里. 具体设置有很多 ...
- PKUSC2013 BUG集锦
如果今年考试真的是这个难度,那比的就是速度和准确度了…… a A:不明觉厉 B:推公式后不明觉厉 C:树的HASH D:不明觉厉 E:QAQ 复制代码'-'忘改'+' WA×1, F:QAQ 请输出 ...
- 验证email是否合法
https://buluo.qq.com/p/detail.html?bid=339910&pid=6675390-1514450689&from=grp_sub_obj 场景1:验证 ...
- 一点记忆—— Java框架知识的学习有感
一点记忆—— Java框架知识的学习有感 说一下自己学习的框架知识的历程吧:好久了,应该是一年前,也就是大三上的时候,我对于基本的 Java编程就已经达到所谓的“熟练”,认为自己可以在 ...
- C#常用函数与方法集合
1.DateTime 数字型 System.DateTime currentTime=new System.DateTime(); 1.1 取当前年月日时分秒 ...
- Django中类视图使用装饰器的方式
类视图使用装饰器 为类视图添加装饰器,可以使用两种方法. 为了理解方便,我们先来定义一个为函数视图准备的装饰器(在设计装饰器时基本都以函数视图作为考虑的被装饰对象),及一个要被装饰的类视图. def ...