HDFS 核心原理

2016-01-11 杜亦舒

HDFS(Hadoop Distribute File System)是一个分布式文件系统

文件系统是操作系统提供的磁盘空间管理服务,只需要我们指定把文件放到哪儿,从哪个路径读取文件句可以了,不用关心文件在磁盘上是如何存放的

当文件所需空间大于本机磁盘空间时,如何处理呢?

一是加磁盘,但加到一定程度就有限制了

二是加机器,用远程共享目录的方式提供网络化的存储,这种方式可以理解为分布式文件系统的雏形,可以把不同文件放入不同的机器中,空间不足了可以继续加机器,突破了存储空间的限制

但这个方式有多个问题

(1)单机负载可能极高

例如某个文件是热门,很多用户经常读取这个文件,就使此文件所在机器的访问压力极高

(2)数据不安全

如果某个文件所在的机器出现故障,这个文件就不能访问了,可靠性很差

(3)文件整理困难

例如想把一些文件的存储位置进行调整,就需要看目标机器的空间是否够用,并且需要自己维护文件位置,如果机器非常多,操作就极为复杂

HDFS的解决思路

HDFS是个抽象层,底层依赖很多独立的服务器,对外提供统一的文件管理功能,对于用户来讲,感觉就想在操作一台机器,感受不到HDFS下面的多台服务器

例如用户访问HDFS中的 /a/b/c.mpg 这个文件,HDFS负责从底层相应服务器中读取,然后返回给用户,这样用户只需和HDFS打交道,不关心这个文件是怎么存储的


写文件示例

例如用户需要保存一个文件 /a/b/xxx.avi 

HDFS首先会把这个文件进行分割,例如分为4块,然后分别放到不同服务器上

这样做有个好处,不怕文件太大,并且读文件的压力不会全都集中在一台服务器上

但如果某台服务器坏了,文件就读不全了

HDFS为保证文件可靠性,会把每个文件块进行多个备份

块1 : A B C 
块2 : A B D
块3 : B C D

块4 : A C D


这样文件的可靠性就大大增强了,即使某个服务器坏了,也可以完整读取文件

同时还带来一个很大的好处,就是增加了文件的并发访问能力,比如多个用户读取这个文件时,都要读块1,HDFS可以根据服务器的繁忙程度,选择从哪台服务器读块1

元数据的管理

HDFS中存了哪些文件?

文件被分成了哪些块?

每个块被放在哪台服务器上?

……

这些都叫做元数据,这些元数据被抽象为一个目录树,记录了这些复杂的对应关系

这些元数据由一个单独的模块进行管理,这个模块叫做 NameNode

存放文件块的真实服务器叫做 DataNode

所以用户访问HDFS的过程可以理解为:

用户 -> HDFS -> NameNode -> DataNode

HDFS 优点

(1)容量可以线性扩展

(2)有副本机制,存储可靠性高,吞吐量增大

(3)有了NameNode后,用户访问文件只需指定HDFS上的路径

HDFS 核心原理的更多相关文章

  1. HDFS核心原理

    HDFS 读写解析 HDFS 读数据流程 客户端通过 FileSystem 向 NameNode 发起请求下载文件,NameNode 通过查询元数据找到文件所在的 DataNode 地址 挑选一台 D ...

  2. 《大型网站技术架构:核心原理与案例分析》【PDF】下载

    <大型网站技术架构:核心原理与案例分析>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230062557 内容简介 本书通过梳理大型网站 ...

  3. 大数据体系概览Spark、Spark核心原理、架构原理、Spark特点

    大数据体系概览Spark.Spark核心原理.架构原理.Spark特点 大数据体系概览(Spark的地位) 什么是Spark? Spark整体架构 Spark的特点 Spark核心原理 Spark架构 ...

  4. 【算法】(查找你附近的人) GeoHash核心原理解析及代码实现

    本文地址 原文地址 分享提纲: 0. 引子 1. 感性认识GeoHash 2. GeoHash算法的步骤 3. GeoHash Base32编码长度与精度 4. GeoHash算法 5. 使用注意点( ...

  5. docker核心原理

    容器概念. docker是一种容器,应用沙箱机制实现虚拟化.能在一台宿主机里面独立多个虚拟环境,互不影响.在这个容器里面可以运行着我饿们的业务,输入输出.可以和宿主机交互. 使用方法. 拉取镜像 do ...

  6. 剖析SSH核心原理(一)

      在我前面的文章中,也试图总结过SSH,见 http://blog.csdn.net/shan9liang/article/details/8803989 ,随着知识的积累,总感觉以前说得比较笼统, ...

  7. 关于Ajax的技术组成与核心原理

    1.Ajax 特点: 局部刷新.提高用户的体验度,数据从服务器商加载 2.AJax的技术组成 不是新技术,而是之前技术的整合 Ajax: Asynchronous Javascript And Xml ...

  8. Libevent核心原理

    Libevent 是一个事件驱动框架, 不能仅说他是一个网络库. notejs就是采用与libevent类似的libev来做核心驱动的.   Libevent支持三种事件:io事件.信号事件.时间事件 ...

  9. 高性能消息队列 CKafka 核心原理介绍(上)

    欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:闫燕飞 1.背景 Ckafka是基础架构部开发的高性能.高可用消息中间件,其主要用于消息传输.网站活动追踪.运营监控.日志聚合.流式 ...

随机推荐

  1. centos查看实时网络带宽占用情况方法

    Linux中查看网卡流量工具有iptraf.iftop以及nethogs等,iftop可以用来监控网卡的实时流量(可以指定网段).反向解析IP.显示端口信息等. centos安装iftop的命令如下: ...

  2. Coursera台大机器学习课程笔记6 -- The VC Dimension

    本章的思路在于揭示VC Dimension的意义,简单来说就是假设的自由度,或者假设包含的feature vector的个数(一般情况下),同时进一步说明了Dvc和,Eout,Ein以及Model C ...

  3. 查看SQL语句在SQL Server上的执行时间

    set statistics profile onset statistics io onset statistics time ongo--begin <这里写上你的语句...>  se ...

  4. Install Jenkins Slave as Windows Service

    https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+as+a+Windows+service SC 直接创建windows s ...

  5. jquery阻止冒泡事件行为发生

    <div onclick="a()"> <p onclick="b()"></p> </div> div和p元素 ...

  6. Bash:-:-定义空变量作为输出结合换行符\n和column输出

    RET="" declare -a HOST=() declare -a ALL_SVR=() declare -a FREESVR=() ;i<${#_ALL_AGENT_ ...

  7. 【python】如何在某.py文件中调用其他.py内的函数

    假设名为A.py的文件需要调用B.py文件内的C(x,y)函数 假如在同一目录下,则只需 import B if __name__ == "__main__": B.C(x,y) ...

  8. nil、Nil、NULL、NSNull的区别

    nil:指向一个对象的空指针,对objective c id 对象赋空值. Nil:指向一个类的空指针,表示对类进行赋空值. NULL:指向其他类型(如:基本类型.C类型)的空指针, 用于对非对象指针 ...

  9. [Dynamic Language] 用Sphinx自动生成python代码注释文档

    用Sphinx自动生成python代码注释文档 pip install -U sphinx 安装好了之后,对Python代码的文档,一般使用sphinx-apidoc来自动生成:查看帮助mac-abe ...

  10. mybais整合的框架没有sql-debug输出

    将ibatis log4j运行级别调到DEBUG可以在控制台打印出ibatis运行的sql语句,方便调试: ### 设置Logger输出级别和输出目的地 ###log4j.rootLogger=deb ...