本节并不大算为大家讲接什么是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发起通知---已经完成数据写入。则整个流程运行完成。

hadoop学习记录--hdfs文件上传过程源码解析的更多相关文章

  1. Hadoop之HDFS原理及文件上传下载源码分析(下)

    上篇Hadoop之HDFS原理及文件上传下载源码分析(上)楼主主要介绍了hdfs原理及FileSystem的初始化源码解析, Client如何与NameNode建立RPC通信.本篇将继续介绍hdfs文 ...

  2. Hadoop之HDFS原理及文件上传下载源码分析(上)

    HDFS原理 首先说明下,hadoop的各种搭建方式不再介绍,相信各位玩hadoop的同学随便都能搭出来. 楼主的环境: 操作系统:Ubuntu 15.10 hadoop版本:2.7.3 HA:否(随 ...

  3. Hadoop生态圈-Azkaban实现文件上传到hdfs并执行MR数据清洗

    Hadoop生态圈-Azkaban实现文件上传到hdfs并执行MR数据清洗 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果你没有Hadoop集群的话也没有关系,我这里给出当时我 ...

  4. hdfs文件上传机制与namenode元数据管理机制

    1.hdfs文件上传机制 文件上传过程:   1.客户端想NameNode申请上传文件, 2.NameNode返回此次上传的分配DataNode情况给客户端 3.客户端开始依向dataName上传对应 ...

  5. SpringMVC:学习笔记(8)——文件上传

    SpringMVC--文件上传 说明: 文件上传的途径 文件上传主要有两种方式: 1.使用Apache Commons FileUpload元件. 2.利用Servlet3.0及其更高版本的内置支持. ...

  6. Django:学习笔记(8)——文件上传

    Django:学习笔记(8)——文件上传 文件上传前端处理 本模块使用到的前端Ajax库为Axio,其地址为GitHub官网. 关于文件上传 上传文件就是把客户端的文件发送给服务器端. 在常见情况(不 ...

  7. Java进阶学习:将文件上传到七牛云中

    Java进阶学习:将文件上传到七牛云中 通过本文,我们将讲述如何利用七牛云官方SDK,将我们的本地文件传输到其存储空间中去. JavaSDK:https://developer.qiniu.com/k ...

  8. php实现文件上传的源码

    php实现文件上传的源码,更多php技术开发就去php教程网,http://php.662p.com <?php ##author :Androidyue ##sina @androidyue ...

  9. JavaWeb实现文件上传下载功能实例解析

    转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能 ...

随机推荐

  1. zabbix3.2.1安装graphtrees插件

    https://blog.csdn.net/liang_baikai/article/details/53542317 graphtree介绍 由于zabbix的图像显示一块不太友好,图像没法集中显示 ...

  2. unix下网络编程之I/O复用(三)

    poll函数 在上文unix下网络编程之I/O复用(二)中已经介绍了select函数的相关使用,本文将介绍另一个常用的I/O复用函数poll.poll提供的功能与select类似,不过在处理流设备时, ...

  3. 对oracle中date/timestamp的操作

    设置oracle中date的会话格式为 'yyyy-mm-dd hh24:mi:ss' alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss ...

  4. DataGridview刷新异常的问题

    datsSet 绑定到dataGrieView,在刷新dataSet的数据时,常会bug:索引0没有值或索引(int)x没有值 昨天弄了一个下午,发现bug原因: dataGridView中有数据时, ...

  5. java基础练习。。replaceall

    总结:方法不是别人告诉你的.再与你的手 package com.bc; public class gdfk { public static void main(String[] args) { Str ...

  6. 数据库:ubantu下MySQL数据库备份方法

    1.编辑/etc/crontab文件设定定时任务,在制定时间执行backup_databases.sh vi /etc/crontab # /etc/crontab: system-wide cron ...

  7. redis使用测试

    import redis conn=redis.Redis(host='127.0.0.1',port=6379) conn.set('nn','morgana',10) #过期时间10s v=con ...

  8. java 多线程系列---JUC原子类(四)之AtomicReference原子类

    AtomicReference介绍和函数列表 AtomicReference是作用是对"对象"进行原子操作. AtomicReference函数列表   // 使用 null 初始 ...

  9. 问题:oracle case when;结果:Oracle CASE WHEN 用法介绍

    Oracle CASE WHEN 用法介绍 1. CASE WHEN 表达式有两种形式 --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ...

  10. LNMP 1.3 测试php解析

    测试解析LNMP的php解析 先打开nginx的配置文件 vim /usr/local/nginx/conf/nginx.conf location ~ \.php$ { root html; fas ...