HDFS学习(1)---(namenode、datanode、Block)
概念
HDFS:Hadoop Distribute File System—>Hadoop 分布式文件系统。
HDFS的特点
- 超大文件:”超大文件“在这里指具有几百MB,几百GB甚至几百TB大小的文件。
- 流式数据访问 :HDFS的构建思路是,一次写入、多次读取是最高效的访问模式。
- 商用硬件:Hadoop并不需要运行在昂贵且可靠的硬件上。它是设计运行在商用硬件(在各种零售店都能买得到的普通硬件)的集群上的,因此至少对于庞大的集群来说,阶段的故障率还是非常高的。HDFS遇到上述故障时,被设计成能继续运行且不让用户察觉到明显的中断。
- 低时间延迟的数据访问:要求低时间延迟数据访问的应用,例如几十毫秒范围,不适合在HDFS上运行。HDFS是为高数据吞吐量应用优化的,这可能会以提高时间延迟为代价,目前对于低延迟的访问需求,HBase(参见第20章)是更好的选择。
- 大量的小文件:由于namenode将文件系统的元数据存储在内存中,因此该文件系统所能存储的文件总数受限于namenode的内存容量。
- 多用户写入,任意修改文件:HDFS中的文件写入只支持单个写入者,而且写操作总是以”只添加“方式在文件末尾写数据。它不支持多个写入者的操作,也不支持在文件任意位置进行修改。
namenode和datanode
HDFS集群中有两类节点 ----》管理节点和工作节点
一个namenode(管理节点)和多个datanode(工作节点)。namenode管理文件系统的命名空间。它维护着整个文件系统树及整棵树内所有的文件和目录。这些信息以两个文件形式保存在本地磁盘上:命名空间镜像文件(fsimage)和编辑日志文件(edits),namenode也记录着每个文件中各个块所在的数据节点信息,但它并不永久保存块的位置信息,因为这些信息会在系统启动时根据数据节点信息重建。
NameNode
存储元数据信息,在内存和文件(fsimage,edits ,fsTime)中同时存在
内存中:文件及目录结构 组成文件的块的信息 副本数量信息 块和DataNode的映射关系 [/aaa/bbb/x.txt [b1,b2] 3 b1:DN01 DN02 DN03 b2:DN02 DN04 DN05]
文件中:文件及目录结构 组成文件的块的信息 副本数量信息 [/aaa/bbb/x.txt [b1,b2] 3]
DataNode
是HDFS的工作节点,真正存储数据的节点,以Block为单位来存储数据,DataNode并不直到也不关心Block属于哪个文件,只是根据要求以Block为单位处理数据。DataNode定期向NameNode发送它们所存储的块的列表。
对NameNode的容错
第一种机制:备份那些组成文件系统元数据持久状态的文件,Hadoop可以通过配置使NameNode在多个文件系统上保存元数据的持久状态。这些操作时实时同步的,且是原子操作。一般的配置是,将持久状态写入本地磁盘的同时,写入一个远程挂载的网络文件系统(NFS)
第二种机制:运行一个辅助Namenode,但它并不能被用作Namonode,这个辅助namenode的重要作用是定期合并并编辑日志与命名空间镜像,以防止编辑日志过大,这个辅助namenode一般在另一台单独的物理计算机上运行,因为它需要占用大量CPU时间,并且需要与namenode一样多的内存来执行合并操作。它会保存合并后的命名空间镜像的复本,并在namenode发生故障时启用。但是辅助namenode保存的状态总是滞后于主节点,所以在主节点全部失效时,难免会丢失部分数据。在这种情况下一般把存储在NFS上的namenode元数据复制到辅助namenode并作为新的主namenode运行(注意:也可以运行热备份namenode代替运行辅助namenode)
块缓存
通常datanode从磁盘中读取块,但是对于访问频繁的文件,其对应的块可能被显式的缓存在DataNode的内存中,以堆外块缓存(off-heap block cache)的形式存在。
用户或应用通过在缓存池(cache pool)中增加一个cache directive来告诉namenode需要缓存哪些文件及存多久。缓存池是一个用于管理缓存权限和资源使用的管理性分组。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- dubbo学习之源码创建属于自己的dubbo-demo
- Vue4.x配置env开发环境、测试环境、生产环境
- SpringBoot总结之CommandLineRunner
- 详细整理Spring事务失效的具体场景及解决方案
- Vue监听文本框实时输入限制输入长度
- 30 分钟轻松搞定正则表达式基础
- Vant引入CDN实现图片懒加载
- Js时间戳倒计时天时分秒
- 微信小程序引用we-cropper裁切图片
- NodeJs获取get/post传值
- Mybatis源码本地化构建Demo
- NodeJs封装静态web服务器、路由、读取文件获取响应类型
- NodeJs使用ejs模板引擎实现后端渲染
- 如何优雅地本地化构建Mybatis源码
- Vue监听返回键关闭弹出层不返回页面