Hadoop分布式文件系统即Hadoop Distributed FileSystem。
        当数据集的大小超过一台独立的物理计算机的存储能力时,就有必要对它进行分区(Partition)并存储到若干台单独的计算机上,管理网络中跨越多台计算机存储的文件系统成为分布式文件系统(Distributed FileSystem)。
    该系统架构与网络之上,势必引入网络编程的复杂性,因此分布式文件系统比普通磁盘文件系统更为复杂。例如:使文件系统能够容忍节点故障且不丢数据便是一个极大的挑战。
        Hadoop有一个成为HDFS的分布式文件系统,即Hadoop Distributed FileSystem。在非正式的文档或旧的文档中也叫着做DFS。HDFS是Hadoop的旗舰级文件系统,它实际上是一个综合性的文件系统的抽象。例如还可以集成其他文
    件系统如Amazon S3或本地文件系统。
        
        HDFS以流式数据访问模式来存储超大文件,运行在商用硬件集群上,特点如下:
            1、超大文件存储
                “超大文件”在这里指具有即便MB、几百GB、几百TB大小的文件,目前已经有了存储PB级别数据的Hadoop集群。(全球最大的Hadoop集群在雅虎,有大约25,000个节点,主要用于支持广告系统与网页搜索。)
            2、流式数据访问
                HDFS的构建思路是一次写入,多次读取是最高效的访问模式。数据集通常由数据源生成或从数据源复制而来,接着长时间在此数据集上进行各种分析。每次分析都将涉及该数据集的大部分或全部,因此读取整个数据集
                的时间延迟比读取第一条记录的时间延迟更重要。
            3、商用硬件
                Hadoop并不需要运行在昂贵且高可靠的硬件上。它是设计在普通硬件的集群上的,因此至少对于庞大的集群来说,节点故障的几率还是非常高的。HDFS在遇到上述故障时,被设计成能够继续运行且不让用户察觉到明显
                的中断。同样那些不适合在HDFS上运行的应用也值得研究。目前对实时性要求较高的应用不适合在HDFS上运行。
            4、低时间延迟的数据访问
                要求低时间延迟数据访问的应用,例如及时毫秒范围不适合在HDFS上运行。因为HDFS是为高吞吐量应用优化的,这可能会以提高时间延迟为代价。目前对于低延迟时间的访问需求,HBase是更好的选择。
            5、大量的小文件
                由于NameNode将文件系统的元数据存储在内存中,因此该文件系统所能存储的文件总数受限于NameNode的内存容量。根据经验,每个文件、目录和数据块的存储信息大约占150字节,因此举例如果有一百万个文件,且每
                个文件占一个数据块,那至少需要300MB内存。尽管存储上百万个文件是可行的的,但是存储数十亿个文件就超出了当前硬件的能力。
            6、多用户写入、任意修改文件
                HDFS中的文件只能有一个写入,且目前(Hadoop-0.x~Hadoop-2.6.0)只能追加到文件的末尾。不支持多个写入操作,也不支持在文件的任意位置修改操作。
        
        HDFS数据块
            每个磁盘都有默认的数据块大小,这是磁盘进行数据读/写的最小单位。构建于单个磁盘之上的文件系统通过磁盘块来管理该文件系统中的块,该文件系统块的大小可以是磁盘块的整倍数。文件系统文件系统块一般为几千字
            节,而磁盘块一般为521字节。例如Windos上文件系统的磁盘单位为簇,Linux上文件系统的磁盘单位为block。
            HDFS同样有块的概念,但是比较大。在Hadoop-0.x和Hadoop-1.x中默认的块大小为64MB,在Hadoop-2.0及以后的版本中默认的块大小是128MB。与单一磁盘上的文件系统相似,HDFS上的文件也被划分为块大小的多个分块
            (chunk),作为独立的存储单元。其他文件系统不同的是,HDFS中小于一个块大小的文件不会占据整个块的空间。HDFS的分块我的理解是逻辑分块,而并非是物理切块。HDFS的块之所以大是为了最小化寻址开销。如果块设
            置的足够大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。如果使用更多的时间来传输数据显然比寻址更高效。但是块也不会太大,MapReduce中的map任务通常一次只处理一个块中的数据,如果任务
            数太少(少于集群中的节点数量),作业的运行速度就会比较慢。分块非常适合用于数据备份进而提供数据容错的能力和提高可用性。在分布式集群的默认情况下HDFS的块副本数为3个,且每个块分布在不同的节点上。这样
            的好处是在磁盘或机器发生故障后数据不会丢失,如果一个块不可用时则去其他节点上读取另一个副本,而这个过程对用户是透明的。一个因为损坏或机器故障而丢失的块可以从其他节点上复制到另一台正常运行的机器上,
            以保障副本的数量回到正常水平。同样有些应用程序可能选择为一些常用的文件块设置更高的副本数进而分散集群中的读取负载。

Hadoop分布式文件系统HDFS详解的更多相关文章

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

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

  2. Hadoop分布式文件系统HDFS的工作原理

    Hadoop分布式文件系统(HDFS)是一种被设计成适合运行在通用硬件上的分布式文件系统.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.它能提供高吞吐量的数据访问,非常适合大规模数据集上的应 ...

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

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

  4. 对Hadoop分布式文件系统HDFS的操作实践

    原文地址:https://dblab.xmu.edu.cn/blog/290-2/ Hadoop分布式文件系统(Hadoop Distributed File System,HDFS)是Hadoop核 ...

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

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

  6. Hadoop分布式文件系统HDFS

    HDFS的探究: HDFS HDFS是 Hadoop Distribute File System的缩写,是谷歌GFS分布式文件系统的开源实现,Apache Hadoop的一个子项目,HDFS基于流数 ...

  7. 分布式文件系统FastDFS详解

    上一篇文章<一次FastDFS并发问题的排查经历>介绍了一次生产排查并发问题的经历,可能有些人对FastDFS不是特别的了解,因此计划写几篇文章完整的介绍一下这个软件. 为什么要使用分布式 ...

  8. FastDFS分布式文件系统配置文件详解

    一.tracker配置文件详解: # is this config file disabled# false for enabled# true for disableddisabled=false# ...

  9. CM记录-Hadoop 分布式文件系统HDFS(登录、配置、监控)

    1.登录(浏览器输入ip地址:7180,登录用户名和登录密码即可) 2.CM主界面(各个组件,监控图表,绿色代表运行正常.黄色代表运行不良,需要关注根据实际情况调整,红色代表故障,需要排查问题) 3. ...

随机推荐

  1. Java多线程——ThreadLocal类

    一.概述   ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是threadlocalvariable(线程局部变量).也许把它命名 ...

  2. 《photoshop cc 新功能 生成图像资源》智能切图逆天啦!

    作为一个前端工程师切图这个步骤是必不可少的,方式多种多样,有和切图工具的,也有是把要切的图层元素或者组直接新建保存成文件的,现在photoshop cc2015,可以让你轻松切图,摆脱繁琐的切图步骤. ...

  3. Config配置文件读写

    config文件读写操作(文字说明附加在程序中) App.config文件 <?xml version="1.0" encoding="utf-8" ?& ...

  4. C#获取磁盘列表与信息

    方法1:使用Environment //获取当前计算机逻辑磁盘名称列表 String[] drives = Environment.GetLogicalDrives(); Console.WriteL ...

  5. pointer-events属性

    pointer-events的风格更像JavaScript,它能够: 1.阻止用户的点击动作产生任何效果.阻止缺省鼠标指针的显示3.阻止CSS里的hover和active状态的变化触发事件4.阻止Ja ...

  6. request.ServerVariables获取环境变量

    Request.ServerVariables("HTTP_X_FORWARDED_FOR")  透过代理服务器取得客户端的真实IP地址,有些用此方法读取到的仍然是代理服务器的IP ...

  7. ASP.NET获取根目录的方法集合

    编写程序的时候,经常需要用的项目根目录,自己总结如下: 1.取得控制台应用程序的根目录方法 方法1.Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径 方法 ...

  8. gitHub项目框架使用排名

    项目名称 项目简介                                  使用心得                1. react-native 这 个是 Facebook 在 React ...

  9. 传输层-UDP

    传输层构建在网络层之上,传输层提供端口到端口之间的通讯. 传输层通过端口号来标识一个端口,不同于网卡,端口是逻辑上的概念.传输层的端口为16个比特(bit)长度,即最多能表示65 536个端口,端口号 ...

  10. Python----定义

    变量的定义: 变量第一次出现不是声明类型就是赋初值,才能后续使用. 函数的定义: ''' 函数的返回值不用声明类型 函数参数值最好赋一个类型值,例如整型赋值0,列表[] 函数名后面必须跟: ''' d ...