Hadoop@大数据开发专家(40K以上)必须掌握技能!( 三 )


a.FsImage用于维护文件系统树以及文件树中所有的文件和文件夹的元数据
b.FsImage文件没有记录块存储在哪个数据节点 。 而是由名称节点把这些映射保留在内存中 , 这个信息单独在内存中一个区域维护 , 当数据节点加入HDFS集群时 , 数据节点会把自己所包含的块列表告知给名 称节点 , 此后会定期执行这种告知操作 , 以确保名称节点的块映射是最新的
EditLog文件:
操作日志文件EditLog中记录了所有针对文件的创建、删除、重命名等操作
(2)名称节点的启动
在名称节点启动的时候 , 它会将FsImage文件中的内容加载到内存中 , 之后再执行 EditLog文件中的各项操作 , 使得内存中的元数据和实际的同步 , 存在内存中的元数据支持客户端的读写操作 。
接收所有datanodes上的文件块信息汇报 , 退出安全模式 。
(3)名称节点的问题
名称节点运行期间 , HDFS的所有更新操作都是直接写到EditLog中 , 久而久之 , EditLog件将会变得很大 , 这对名称节点运行没有什么明显影响的 , 但是 , 名称节点重启的时候 , 需要先将FsImage里面的所有内容映像到内存中 , 然后再一条一条地执行EditLog中的记录 , 当EditLog文件非常大的时候 , 会导致名称节点启动操作非常慢 , 而在这段时间内HDFS系统处于安全模式 , 一直无法对外提供写操作 , 影响了用户的使用 。
名称节点坏掉了 。
(4)解决方案之一
Hadoop@大数据开发专家(40K以上)必须掌握技能!
本文插图

Hadoop@大数据开发专家(40K以上)必须掌握技能!
本文插图

(5)解决方案之二(Hadoop HA)
Hadoop@大数据开发专家(40K以上)必须掌握技能!
本文插图

(6)HDFS 异常处理之DataNode

  • 数据节点出错
每个数据节点会定期向名称节点发送“心跳”信息 , 向名称节点报告自己的状态, 当数据节点发生故障 , 或者网络发生断网时 , 名称节点就无法收到来自一些数据节点的心跳信息 , 这时 , 这些数据节点就会被标记为“宕机” , 节点上面的所有数据都 会被标记为“不可读” , 名称节点不会再给它们发送任何I/O请求 这时 , 有可能出现一种情形 , 即由于一些数据节点的不可用 , 会导致一些数据块的 副本数量小于冗余因子, 名称节点会定期检查这种情况 , 一旦发现某个数据块的副本数量小于冗余因子 , 就 会启动数据冗余复制 , 为它生成新的副本 。 HDFS和其它分布式文件系统的最大区别就是可以调整冗余数据的位 。
  • 数据出错
客户端在读取到数据后 , 会采用md5等对数据块进行校验 , 以确定读取到正确 的数据, 如果校验出错 , 客户端就会请求到另外一个数据节点读取该文件块 , 并且向名称节点报告这个文件块有错误 , 名称节点会定期检查并且重新复制这个块。
(7)其他
  • 优点
a.存储非常大的文件
b.采用流式的数据访问方式
c.运行于普通商用机器
d.高容错、高可靠性
  • 不适合的应用场景:
a.低延时的数据访问
b.大量小文件的情况
c.多方读写 , 需要任意的文件修改
(8)扩展 GFS简介(Google File System)
谈到Hadoop的起源 , 就不得不提Google的三驾马车:Google FS、MapReduce、BigTable 。 虽然Google没有公布这三个产品的源码 , 但是他发布了这三个产品的详细设计论文 , 奠定了风靡全球的大数据算法的基础!
(9)问题
1、为什么不适用于处理大量小文件?
2、HDFS的Block为什么这么大?
3、读取或者写入文件 , 如果不调用Close方法关闭文件流会咋样?


推荐阅读