在介绍HDFS读写流程时,先介绍下Block副本放置策略。

Block副本放置策略

  • 第一个副本:放置在上传文件的DataNode;如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点。
  • 第二个副本:放置在与第一个副本不同的机架的节点上。
  • 第三个副本:与第二个副本相同机架的节点。
  • 更多副本:随机节点。

HDFS写流程

  • 客户端发请求给NameNode,我想保存一个文件A,这时候在NameNode会有一个标识,标识为A_copy(文件不可用)。
  • 根据副本放置策略,返回三个副本的可放置位置列表,且默认为sort排好顺序的。
  • 客户端主动去和离自己最近的DataNode连接(暂且叫DN1),然后DN1后续的DN2进行连接,DN2在和DN3进行连接。(串联方式Pipeline)
  • 客户端读取源文件,对该Block进行更小的切割,
    • 第一次:传递第一个Block中的第一个小包给DN1。
    • 第二次:传递第一个Block中的第二个小包给DN1,与此同时,DN1中的第一个小包传递给DN2。
    • 第三次:传递第一个Block中的第三个小包给DN1,与此同时,DN1中的第二个小包传递给DN2,DN2传递第一个小包给DN3.
    • 依次类推

(Block切割更小的小包,这里这么设计的好处是时间不重叠。如果不切,一次性传递例如64M,当传递DN1时,等待,传递DN2时,继续等待,传递DN3时,还在等,造成时间浪费。另外的一个好处时,如果增加节点,时间影响不大)

  • 最后通过DataNode与NameNode心跳,通知是否文件彻底传递完毕,补全NameNode中元数据的位置信息。

HDFS读流程

  • 客户端发请求给NameNode,NameNode将这个文件的元数据找到,告知给客户端(例如文件A,被切割为5个Block,元文件会纪录Block1:DN1,DN2,DN3,Block2:DN1,DN4,DN5等等依次类推)
  • 客户端直接向DataNode请求Block数据(遵循距离优先)
  • 当把所有的Block下载回本地后,进行验证每个Block元信息的MD5。如果每个Block都是正确的,没有被破坏,开始进行拼接,最终文件就被还原回来了。

HDFS文件权限

  • 与Linux文件权限类似

    • r:read;w:write;x:execute
    • 权限x对应文件忽略,对于文件夹表示是否允许访问其内容
  • 如果Linux系统用户zhangyongli使用Hadoop命名创建一个文件,那么这个文件在HDFS中owner就是zhangyongli
  • HDFS的权限目的,阻止好人做错事,而不是阻止坏人做坏事。HDFS相信,你告诉我你是谁,我就认为你是谁。

解释:

  • 阻止好人做错事:例如AB两个用户,A用户创建了一个X文件,B用户创建了一个Y文件,B用户删除不了A用户的文件X。
  • 阻止坏人做坏事:如果AB两个用户中的某个坏人,装了一台全新的linux系统,也创建AB用户,补全Hadoop部署文件内容,客户端程序,然后用新系统的A向NameNode去删除X文件,由于NameNode是被动受信,所以未来需要集成kerberos来防止这种操作。
    (转发请注明出处:http://www.cnblogs.com/zhangyongli2011/ 如发现有错,请留言,谢谢)

大数据系列文章-Hadoop的HDFS读写流程(二)的更多相关文章

  1. 大数据系列文章-Hadoop基础介绍(一)

    Hadoop项目背景简介 2003-2004年,Google公开了部分GFS个Mapreduce思想的细节,以此为基础Doug Cutting等人用了2年的业余时间,实现了DFS和Mapreduce机 ...

  2. 大数据系列之Hadoop框架

    Hadoop框架中,有很多优秀的工具,帮助我们解决工作中的问题. Hadoop的位置 从上图可以看出,越往右,实时性越高,越往上,涉及到算法等越多. 越往上,越往右就越火…… Hadoop框架中一些简 ...

  3. 大数据技术之Hadoop(HDFS)

    第1章 HDFS概述 1.1 HDFS产出背景及定义 1.2 HDFS优缺点 1.3 HDFS组成架构 1.4 HDFS文件块大小(面试重点) 第2章 HDFS的Shell操作(开发重点) 1.基本语 ...

  4. 【大数据系列】hadoop集群设置官方文档翻译

    Hadoop Cluster Setup Purpose Prerequisites Installation Configuring Hadoop in Non-Secure Mode Config ...

  5. Hadoop之HDFS读写流程

    hadoophdfs 1. HDFS写流程 2. HDFS写流程 1. HDFS写流程 HDFS写流程 副本存放策略: 上传的数据块后,触发一个新的线程,进行存放. 第一个副本:与client最近的机 ...

  6. 【大数据系列】Hadoop DataNode读写流程

    DataNode的写操作流程 DataNode的写操作流程可以分为两部分,第一部分是写操作之前的准备工作,包括与NameNode的通信等:第二部分是真正的写操作. 一.准备工作 1.首先,HDFS c ...

  7. 【大数据系列】hadoop核心组件-MapReduce

    一.引入 hadoop的分布式计算框架(MapReduce是离线计算框架) 二.MapReduce设计理念 移动计算,而不是移动数据. Input HDFS先进行处理切成数据块(split)   ma ...

  8. 【大数据系列】hadoop集群的配置

    一.hadoop的配置文件分类 1.只读类型的默认文件 core-default.xml     hdfs-default.xml    mapred-default.xml   mapred-que ...

  9. 大数据系列之Hadoop分布式集群部署

    本节目的:搭建Hadoop分布式集群环境 环境准备 LZ用OS X系统 ,安装两台Linux虚拟机,Linux系统用的是CentOS6.5:Master Ip:10.211.55.3 ,Slave ...

随机推荐

  1. [unity3d]unity平台的预处理

    在开发中,特别是unity的跨平台中,我们常常会在各个平台游走,如安卓版,苹果版,PC版.......在此不同的平台上,有可能我们须要做不同的操作.然而我们就能够用unity的自带的平台宏定义方式来做 ...

  2. 【转载】TCP的三次握手(建立连接)和四次挥手(关闭连接)

    建立连接: 理解:窗口和滑动窗口TCP的流量控制 TCP使用窗口机制进行流量控制 什么是窗口? 连接建立时,各端分配一块缓冲区用来存储接收的数据,并将缓冲区的尺寸发送给另一端 接收方发送的确认信息中包 ...

  3. HashTable源代码剖析

    <span style="font-size:14px;font-weight: normal;">public class Hashtable<K,V> ...

  4. 基于bootstrap_博客页面

    <!DOCTYPE html> <!-- saved from url=(0036)http://v3.bootcss.com/examples/blog/ --> <h ...

  5. ID--HANDLE--HWND三者之间的互相转换

    利用PreTranslateMessage,响应按钮控件的按下(WM_LBUTTONDOWN)和松开(WM_LBUTTONUP)   VC的button控制只有两个事件,一个是单击事件,一个事双击事件 ...

  6. Java 内存区域与内存溢出异常

    一.Java虚拟机内存划分 1.程序计数器 线程私有 可以看做是当前线程所执行的字节码的行号指示器.字节码解释器工作时是通过改变这个计数器的值来选取下一条需要执行的字节码指令. Java虚拟机是通过多 ...

  7. UISegmentedControl方法与属性的总结

    SegmentedControl又被称作分段控制器,是IOS开发中经常用到的一个UI控件. 初始化方法:传入的数组可以是字符串也可以是UIImage对象的图片数组 - (instancetype)in ...

  8. (linux)初学者学linux块设备驱动

      面对不断升级的linux内核.GNU开发工具.linux环境下的各种图形库,很多linux应用程序开发人员和linux设备驱动开发人员即兴奋,又烦躁.兴奋的是新的软件软件.工具给我提供了更强大的功 ...

  9. jvm虚拟机配置 深度好文

    http://blog.csdn.net/kthq/article/details/8618052

  10. p1199八数码问题

    oj上简化的八数码问题,最强的数据仅仅是20步: 根据曼哈顿距离构造启发函数: 主算法:IDA*:(使用方法好像不太对......) 未用位运算优化: #include<iostream> ...