本节并不大算为大家讲接什么是hadoop,或者hadoop的基础知识因为这些知识在网上有很多详细的介绍,在这里想说的是关于hdfs的相关内容。或许大家都知道hdfs是hadoop底层存储模块,专门用于存放数据,那么在进行文件上传的时候hdfs是如何进行的呢?我们按照宏观和微观来进行相关解析工作。

  首先需要向大家解释如下几个概念:

  (1) secondaryNamenode: 其实起初我对SN的理解也和大部分人相同,认为SN是NN(nameNode)的一个实时热备份实现HA,并且在一次笔试的过程中还写错了,尴尬,后台经过查看相关的书籍发现其实并不是这么一回事,SN主要是完成的Edits和fsImage的合并工作,以减少NN的工作压力。对于错误的理解其实并不是没有道理,现在版本的hadoop支持进行HA的实时备份。后面的章节后说。

  (2) fsImage和edits: 虽然说不希望在这讲一些概念,但是该说的还是得说。简单的解释: fsimage包含Hadoop文件系统中的所有目录和文件idnode的序列化信息,其中对于文件包含了文件的修改时间、访问时间、块大小和组成一个文件块信息等。对于文件夹而言包含的信息主要有修改时间、访问控制权限等信息。而Edits文件主要是进行客户端对文件操作的记录,比如上传新文件等。并且edits文件会定期与fsimage文件进行合并操作。

  宏观的写入过程:

  具体的流程如下:

  1.首先是客户端将文件进行分块,分块的大小标准按照配置文件中给定的大小。

  2.然后客户端通知namenode即将上传文件,namenode创建制定目录,并根据配置文件中指定的备份数量及机架感知原理进行文件分配,比如备份数量3由机架感知将3分文件分别存储在机架1的host2,机架2的host1和host3中。

  3. 客户端与指定的datanode建立流传输通道,并向机架1中的host2进行文件传输,传输完成之后host2向机架2中的host1进行文件备份。host2备份完成之后将数据块拷贝到同一个机架的host3中。

  4.3台机器都完成这个过程之后host2,host1,host3分别向namenode发起通知说文件已经存储完成。同时host2向客户端发起通知。

  5.客户端收到host2返回的请求之后向namenode发起通知---已经完成数据写入。则整个流程运行完成。

最新文章

  1. NSURLSession详解
  2. Linux-学习前言
  3. MVC中关于Membership类跟数据库的问题
  4. 用WinRAR进行安装包的制作
  5. hihocode ---1032
  6. js构造函数,索引数组和属性的属性
  7. ZOJ 3490 String Successor
  8. 福建省队集训被虐记——DAY4
  9. Java三大特征之多态(三)
  10. JS之脚本延迟
  11. python_如何在一个for循环中迭代多个可迭代对象?
  12. mysql 不同索引的区别和适用情况总结
  13. 《SpringMVC从入门到放肆》十三、SpringMVC数据校验
  14. 洛谷P4307 球队收益
  15. MyBatis中的if写法
  16. 实用ExtJS教程100例-003:进度条对话框Ext.MessageBox.progress
  17. 从 falcon api 中获取数据
  18. Windows Phone 性能优化(一)
  19. PHP中strlen和mb_strlen函数的区别
  20. Java设计模式之模板方法模式(Template Method)

热门文章

  1. 使用POI导出excel进阶篇
  2. 洛谷【P2024】[NOI2001]食物链
  3. CentOS7.2 GitLab部署
  4. 蓝桥杯 基础训练 BASIC-27 2n皇后问题
  5. df 命令-显示目前磁盘剩余的磁盘空间
  6. Spring Boot整合Rabbitmq
  7. Java-API:java.util.UUID
  8. c# 窗口API,以及全屏锁定一些tips
  9. 在IIS下配置自定义的报错页面
  10. HTML5的local storage