1. HDFS是Hadoop集群的文件系统,这是一种分布(distributed)、容错(fault tolerant)的文件系统
  2. 所谓分布,是说整个文件系统的内容并非集中存储在一台或几台“文件服务器上”,而是分散在集群的不同节点上
  3. 对于大数据文件系统,文件之所以应该是分布式的,不再仅仅是容量和容错的问题,还有计算的问题。
  4. 大数据处理有个原则,就是数据在哪里,计算就在哪里。
  5. 分布的计算必然要求分布的数据存储,最好就是每个机诶但都存储数据,每个节点也都承担计算。
  6. 按什么方式把整个文件系统的内容分布存储在集群中呢
    1. 远程挂在(mount):这只是目录(文件子系统)层面的分布
    2. 粒度更细化一点,改成文件层面的分布:也就是说不是以目录为单位,而是以文件为单位的分布,并建立重要文件查名服务器
    3. 粒度更细化,改成文件块层面的分布:在存储的时候把文件拆散,HDFS的分布,是“块”这个层次的分布.
  7. HDFS文件块是虚拟的,默认64MB,128MB也是很常用的
  8. 集中的目录和查明服务,则不是告诉你这些文件在哪里,而是告诉你具体的块在哪里,然后你自己去访问
  9. HDFS的查明服务都集中在一个节点上,成为nameNode;担负文件内容存储的节点则成为DataNode。
  10. 在DataNode上,不管是1MB、64MB、一个(HDFS的)块对于宿主主机而言就是一个文件,其块号就编码在文件名中。从一个DataNode中读出一个块,实际上是读出一个文件。而在NameNode中,则存储的是HDFS“文件系统”,实际上存储整个目录树,或称“namespace”的映像。可想而知,这个映像也是作为宿主系统的文件而存储的。
  11. 解决了怎么分布的问题,随之而来的是容错的问题。HDFS采用了“狡兔三窟”的策略,每个块都是一式几份。响应地,查明服务要提供的就不只是一个块在什么地方,而是这个块的几个副本分别在什么地方。这样,你就可以自己决定从哪个节点上读取这个块的副本,万一失败就换一个节点再去读取另一个副本。
  12. 为NameNode提供热备的节点,则称为“Standby NameNode“。ActiveNN和StandbyNN之间的有同步才能保持一致。然而如果每一次有一点改变时就得同步一次,系统的开销太大,所以HDFS采用一个变通的方法。(类似Oracle的archive log、ADG)
  13. 这个EditLog可以(但不是必须)既不是在NameNode节点上,也不是在Secondary NameNode节点上,而是在某个双方都能访问的第三方那里,而且一般要求这第三方具有更高的可靠性。比方说,如果集群中机器是普通的PC机,则EditLog就应该放在具有更可高、质量更好的服务器上。这样如果ActiveNN出了问题,StandbyNN出来接管,这是它手头的文件系统映像很可能是老的,已经远远落后于形势。而手头有着文件系统最新映像的原NameNode,则此时已经访问不到了。这时原StandbyNN就把EditLog中记录逐条”重演“一遍。
  14. 可想而知,这种同步也不一定非要到NameNode出问题时候才做,StandbyNN完全可以没过一段时间就做一下。
  15. EditLog信息的接收者可以不止一家。
  16. 在Hadoop中,NameNode表现为一个独立的JVM进程。同样,SNN、DataNode也是这样的JVM。
  17. NameNode    
    1. JvmPauseMonitor,看起其类名可知是用来监视JVM运行是否停滞。其实原理挺简单,这是一个线程,这个线程基本上老是睡眠,只是周期性的醒来一下,一醒来就从系统获取当时的实际时间,开刚才实际睡眠时间是否比自己指定要睡眠的时间长出很多,如果是,就说明本线程被调度运行的机会大大减少,系统已经太忙,因而就在运行日志中发出一条警告信息。
    2. Format:就只是HDFS文件系统的格式化,实际上就是其目录系统的格式化,那就是在宿主文件系统中创建一套目录,用来存放HDFS的元数据文件。而且,一旦完成格式化,程序就terminate(),这个命令的意图其实并非启动NameNode,而仅仅是格式化。当然在完成格式化之前,NameNode是无法正常运行的。
    3. 为什么格式化要和NameNode放在一起呢,这是因为HDFS的格式化只需在NameNode上进行,也只应在NameNode上进行。
    4. NameNode实际上并不需要知道具体的块在哪个数据节点的什么位置上,而只要知道哪些节点存储着哪些块,以及节点上还有多少容量可供使用。进一步,什么块在什么节点上这个信息其实不必固定记载在NameNode的文件系统映像中,而是可以在运行的时候让数据节点自行报告。在集群环境中,NameNode对于数据节点的控制不想单机对于磁盘那样严密,加之每个块都有多个副本保存在不同节点上,这样比把这些信息固定记载在NameNode上更合适,因为保不住哪个节点突然就离线了,过一会又回来了,甚至保不住哪个节点上的磁盘被拆装到了另一个节点上。
    5. NameNode的作用,简单地说:是给定一个文件路名名,就告诉你这个文件有哪些块,以及每个块都有几个副本、分别存储在什么节点上。
    6. 这里有两个环节。1、从一个文件的路径名到它的块表;2、再从具体块号到其副本所在的数据节点。这两个环节性质是有区别的。
    7. 其中的第一个环节,说明每个具体的文件名包含了哪些块,即从文件名到块表的映射,就是HDFS的目录系统,也跟单机的目录系统相似,是必须持久存储的,要不然断电之后就什么也没有了。集群中只有NameNode才有这方面的信息,DataNode根本就不知道还有HDFS这一层目录和文件。
    8. 但是第二个环节,即从块号到存储地点的映射,就不一定了。当然也可以把这个映射持久存储在NameNode上,但是这样也是有问题的,因为NameNode对于数据节点其实没有很强的控制,比如说,可能NameNode记载表明某个数据节点上有某个块号的一个副本,但是那个副本实际上却因为某种原因而不存在了,例如因本地的某种不当操作被删掉了,于是两边就不一致了。在比方说,NameNode可能记载着某个副本所在节点的节点名和IP地址,但实际使用中个别节点的名称和IP地址却可能变了。所以把第二层映射持久存储下来可能是靠不住的。那么怎么办呢?HDFS采用的办法就是干脆就不持久存储,而让各数据节点定期向NameNode报告:我这里有你的这么一些块,你可以让大家需要的时候上我这来读取;而NameNode则在运行时动态汇集和维持第二层映射所需的信息。集群中数据节点定时向NameNode发送心跳(Heartbeat)报告,上面就打搭载着这样的信息。
    9. 所以,NameNode至少要经历一轮Heartbeat之后才能真正完成其初始化。

Hadoop源代码点滴-文件系统HDFS的更多相关文章

  1. Hadoop源代码点滴-系统结构(HDFS+YARN)

    Hadoop建立起HDFS和YARN两个字系统,前者是文件系统,管数据存储:后者是计算框架,管数据处理. 如果只有HDFS而没有YARN,那么Hadoop集群可以被用作容错哦的文件服务器,别的就没有什 ...

  2. Hadoop源代码分析:HDFS读取和写入数据流控制(DataTransferThrottler类别)

    DataTransferThrottler类别Datanode读取和写入数据时控制传输数据速率.这个类是线程安全的,它可以由多个线程共享. 用途是构建DataTransferThrottler对象,并 ...

  3. Hadoop源代码点滴-基础概念

    大数据特征:volume(数量).variety(多样性).velocity(产生的速度) 大数据特征:多.乱.快.杂 数据的来源:业务数据.日志.管理文档(OCR).互联网.物联网.外购

  4. Hadoop源代码点滴-自然常数e

    数学里的 e 为什么叫做自然底数?是不是自然界里什么东西恰好是 e? https://www.zhihu.com/question/20296247

  5. hadoop系列二:HDFS文件系统的命令及JAVA客户端API

    转载请在页首明显处注明作者与出处 一:说明 此为大数据系列的一些博文,有空的话会陆续更新,包含大数据的一些内容,如hadoop,spark,storm,机器学习等. 当前使用的hadoop版本为2.6 ...

  6. Hadoop 分布式文件系统 - HDFS

    当数据集超过一个单独的物理计算机的存储能力时,便有必要将它分不到多个独立的计算机上.管理着跨计算机网络存储的文件系统称为分布式文件系统.Hadoop 的分布式文件系统称为 HDFS,它 是为 以流式数 ...

  7. Hadoop分布式文件系统HDFS详解

    Hadoop分布式文件系统即Hadoop Distributed FileSystem.        当数据集的大小超过一台独立的物理计算机的存储能力时,就有必要对它进行分区(Partition)并 ...

  8. Hadoop分布式文件系统--HDFS结构分析

    转自:http://blog.csdn.net/androidlushangderen/article/details/47377543 HDFS系列:http://blog.csdn.net/And ...

  9. 【转载】Hadoop分布式文件系统HDFS的工作原理详述

    转载请注明来自36大数据(36dsj.com):36大数据 » Hadoop分布式文件系统HDFS的工作原理详述 转注:读了这篇文章以后,觉得内容比较易懂,所以分享过来支持一下. Hadoop分布式文 ...

随机推荐

  1. MSIL实用指南-Action的生成和调用

    MSIL实用指南-Action的生成和调用 System.Action用于封装一个没有参数没有返回值的方法.这里生成需要Ldftn指令. 下面讲解怎生成如下的程序. class ActionTest ...

  2. CSS 之Grid 网格知识梳理2

    继上篇的CSS 之Grid下半部分   14.将单元格划分到一个区域,使用grid-template-areas属性: ag: grid-template-areas: "header  h ...

  3. JSON转换方法解析

    JSON.parse() 与 JSON.stringify() 的区别 JSON.parse() :是从一个字符串中解析出 json 对象 JSON.stringify():是从一个对象中解析出字符串 ...

  4. Keras(四)CNN 卷积神经网络 RNN 循环神经网络 原理及实例

    CNN 卷积神经网络 卷积 池化 https://www.cnblogs.com/peng8098/p/nlp_16.html 中有介绍 以数据集MNIST构建一个卷积神经网路 from keras. ...

  5. 学习笔记(一)-PyTorch在Windows环境搭建

    一.安装Anaconda 3.5 Anaconda是一个用于科学计算的Python发行版,支持Linux.Mac和Window系统,提供了包管理与环境管理的功能,可以很方便地解决Python并存.切换 ...

  6. andriod开发--使用Http的Get和Post方式与网络交互通信

    package com.example.a350773523.myapplication; import android.os.AsyncTask; import android.support.v7 ...

  7. Java服务器-Disruptor使用注意

    最近看了一下部署游戏后台的服务器状况,发现我的一个Java程序其占用的CPU时长超过100%,排查后发现竟是Disruptor引起的,让我们来看看究竟为什么Disruptor会有这样的表现. 发现占用 ...

  8. AOE工程实践-银行卡OCR里的图像处理

    作者:杨科 近期我们开发了一个银行卡 OCR 项目.需求是用手机对着银行卡拍摄以后,通过推理,可以识别出卡片上的卡号. 工程开发过程中,我们发现手机拍摄以后的图像,并不能满足模型的输入要求.以 And ...

  9. 【Ehcache】基础知识学习

    一.Ehcache概述 1.1 简介 1.2 Ehcache的主要特性 二.Ehcache使用介绍 2.1 Ehcache缓存过期策略 2.2 如何解决缓存与db不同步的问题. 三.Ehcache 基 ...

  10. Ansible实现批量管理服务器

    Ansible介绍: a. ansible是一个基于Python开发的自动化运维工具b. ansible是一个基于ssh协议实现远程管理的工具c. ansible软件可以实现多种批量管理操作(批量系统 ...