1、HDFS设计前提与目标

(1)硬件错误是常态而不是异常。  错误检测并快速自动恢复是HDFS最核心设计目标

(2)流式数据访问。运行在HDFS上的应用主要是以流式数据读取为主,做批量处理而不是用户交互处理,所以HDFS更关注数据访问的高吞吐量。

(3)大规模数据集。HDFS支持大文件存储,并能提供整体上高的数据传输宽带,能在一个集群里扩展到数百个节点。

(4)简单一致性模型。HDFS的应用程序需要对文件实行一次性写、多次读的访问模式。文件一经创建、写入和关闭之后就不需要再更改了。

(5)移动计算比移动数据更划算。在数据旁边执行操作效率会比较高,可以减少网络的拥塞和提高系统的吞吐量。HDFS提供了接口,以便让程序将自己移动到数据存储的地方执行。

2、HDFS体系结构

HDFS是一个主/从(Master/Slave)体系结构,如下图所示。HDFS集群拥有一个NameNode和一些DataNode。

NameNode:管理文件系统的元数据。负责管理文件系统的命名空间,记录文件数据块在每个DataNode上的位置和副本信息,协调客户端对文件的访问,以及记录命名空间内的改动或命名空间本身属性的改动。

DataNode:存储实际的数据。负责他们所在的物理节点上的存储管理。

HDFS开放文件系统的命名空间以便让用户以文件的形式存储数据。HDFS的数据都是“一次写入,多次读取”,典型的块大小是64M.HDFS的文件通常按照64MB呗分割成不同的数据块,每个数据块尽可能地分散存储于不同的DataNode中。

NameNode执行文件系统的命名空间操作,比如打开、关闭、重命名文件或目录,还决定数据块到DataNode的映射。

DataNode负责处理客户的读写请求,依照NameNode的命令,执行数据块的创建、复制、删除等工作。

客户端要访问一个文件,首先客户端从NameNode中获得组成该文件的数据块位置列表,即知道数据块被存储到哪些DataNode上,然后客户端直接从DataNode上读取文件数据,NameNode不参与文件的传输。(客户端联系NameNode以获取文件的元数据,而真正的文件I/O操作是直接与DataNode进行交互的)

NameNode使用事务日志(EditLog)来记录HDFS元数据的变化,使用影像文件(FsImage)存储文件系统的命名空间,包含文件的映射、文件的属性信息等。事务日志和映像文件都存储在NameNode的本地文件系统中。

NameNode启动时,从磁盘中读取映像文件和事务日志,把事务日志的事务都应用到内存中的映像文件上,然后新的元数据刷新到本地磁盘的新的映像文件中,这样可以截去旧的事务日志,这个过程称为检查点(Checkpoint)。

Secondary NameNode节点赋值NameNode处理映像文件和事务日志。NameNode启动的时候合并映像文件和事务日志,而Secondary NameNode会周期地从NameNode上复制映像文件和事务日志到临时目录,合并生成新的映像文件后再重新上传到NameNode,NameNode更新映像文件并清理事务日志,使得事务日志的大小始终控制在可配置的限度下。

3、HDFS可靠性措施

1)、冗余备份:DataNode使用本地文件系统来存储HDFS的数据,但他对HDFS的文件一无所知,只是用一个个文件存储HDFS的每个数据块。当DataNode启动时,他会遍历本地文件系统,产生一份HDFS数据块和本地文件对应关系列表,并把这个报告发给NameNode,这就是块报告(Blockreport)。块报告包括了DataNode上所有块的列表。

2)、副本存放:HDFS采用机架感知(Rack-aware)的策略来改进数据的可靠性、可用性和网络带宽的利用率。机架内节点间的带宽比跨机架节点直接的带宽大。

3)、心跳检测:NameNode周期性地从集群中的每个DataNode接受心跳包和块报告,NameNode可以根据这个报告验证映射和其他文件系统元数据。如果DataNode不能发送心跳消息,NameNode会标记最近没有心跳的DataNode宕机,不会发给它们任何新的I/O请求。DataNode的宕机会造成一些数据块的副本数下降并低于指定值,NameNode会不断检测需要复制的数据块,并在需要的时候重新复制。

引发重新复制的原因:DataNode不可用、数据副本的损坏、DataNode上的磁盘错误、复制因子增大等

4)、安全模式:系统启动时,NameNode会进入一个安全模式,此时不会出现数据块的写操作,文件系统不允许有任何修改。当NameNode获得的数据块达到最小副本数时,该数据块被认为是安全的。在一定比例(可配置)的数据块被NameNode检测确认安全后,再等待若干时间会自动退出安全模式。

5)、数据完整性检测:HDFS客户端软件实现了对HDFS文件内容的校验和检查,在HDFS文件创建时,会结算数据块的校验和,并将校验和作为一个单独的隐藏文件保存在命名空间下。当客户端获取文件后,他会检查从DataNode获得的数据块对应的校验和是否和隐藏文件中的相同,若不同,客户端就会认为数据块有损坏,将从其他DataNode获取该数据块的副本。

6)、空间回收:文件被删除后,并不是立即就从HDFS中移走,而是先把它移动到/trash目录里,可以恢复。

7)、元数据磁盘实效:NameNode可以配置为支持维护映像文件和事务日志的多个副本,任何对映像文件和事务日志的修改都将同步到他们的副本上。不过这会降低NameNode处理命名空间事务的速度。

8)、快照:快照支持存储某个时间的数据复制

4、HDFS常用操作

1)列出HDFS文件:$bin/hadoop dfs -ls  默认返回HDFS的‘home’目录下内容。在HDFS中没有当前工作目录概念。

2)上传文件到HDFS:$bin/hadoop dfs -put  input in

3)将HDFS中文件复制到本地文件系统:$bin/hadoop dfs -get in getin

4)删除HDFS下的文档:$bin/hadoop dfs -rmr in

5)查看HDFS下某个文件:$bin/hadoop dfs -cat in/*

6)报告HDFS的基本统计信息:$bin/hadoop dfsadmin -report

7)退出安全模式:$bin/hadoop dfsadmin -safemode leave

8)进入安全模式:$bin/hadoop dfsadmin -safemode enter

9)负载均衡:$bin/start-balancer.sh

2、分布式文件系统---HDFS的更多相关文章

  1. 大数据 --> 分布式文件系统HDFS的工作原理

    分布式文件系统HDFS的工作原理 Hadoop分布式文件系统(HDFS)是一种被设计成适合运行在通用硬件上的分布式文件系统.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.它能提供高吞吐量的数 ...

  2. 大数据技术原理与应用——分布式文件系统HDFS

    分布式文件系统概述 相对于传统的本地文件系统而言,分布式文件系统(Distribute File System)是一种通过网络实现文件在多台主机上进行分布式存储的文件系统.分布式文件系统的设计一般采用 ...

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

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

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

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

  5. 你想了解的分布式文件系统HDFS,看这一篇就够了

    1.分布式文件系统 计算机集群结构 分布式文件系统把文件分布存储到多个节点(计算机)上,成千上万的计算机节点构成计算机集群. 分布式文件系统使用的计算机集群,其配置都是由普通硬件构成的,与用多个处理器 ...

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

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

  7. 分布式文件系统HDFS体系

    系列文件列表: http://os.51cto.com/art/201306/399379.htm 1.介绍 hadoop文件系统(HDFS)是一个运行在普通的硬件之上的分布式文件系统,它和现有的分布 ...

  8. 分布式文件系统-HDFS

    HDFS Hadoop的核心就是HDFS与MapReduce.那么HDFS又是基于GFS的设计理念搞出来的. HDFS全称是Hadoop Distributed System.HDFS是为以流的方式存 ...

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

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

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

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

随机推荐

  1. 导入MyEclipse项目乱码

    1.右键项目属性→text file encoding →修改为UTF-8,即可自动变成正常的.

  2. android平台获取手机IMSI,IMEI ,序列号,和 手机号的方法

    1)获取运营商sim卡imsi号, String IMSI =android.os.SystemProperties.get( android.telephony.TelephonyPropertie ...

  3. Java基础知识强化之多线程笔记04:并行和并发 区别

    1. 并发 和 并行区别 (1)并发:(单核) 并发,是在同一个cpu上同时(不是真正的同时,而是看来是同时,因为cpu要在多个程序间切换)运行多个程序. 并发是指两个任务都请求运行,而处理器只能按受 ...

  4. spark1.1.0下使用SparkSQL

    spark1.1.0的安装参见http://blog.csdn.net/bluejoe2000/article/details/41391407 安装了spark之后,可以在 shell中执行Spar ...

  5. SqLite 框架 GreenDAO

    GreenDAO: 会生成一个数据访问,不用我们书写访问数据库的代码: 核心原理图 生成代码 就是用生成器生成一个对应的java类的生成工厂 public static void main(Strin ...

  6. PowerDesigner使用教程 —— 概念数据模型 (转)

    一.概念数据模型概述    概念数据模型也称信息模型,它以实体-联系(Entity-RelationShip,简称E-R)理论为基础,并对这一理论进行了扩充.它从用户的观点出发对信息进行建模,主要用于 ...

  7. windows下go开发环境部署 (sublime+gosublime+geocode)

    1.下载git.go和sublime免安装版 go下载地址:http://pan.baidu.com/s/1hq1mrDM#path=%252Fgo%252F1.5.2sublime下载地址:http ...

  8. JavaScript高级程序设计(六):关键字 void 和 delete 使用

    一.void 1.概述:JavaScript中void是一个操作符,该操作符指定要计算一个表达式但是不返回值. 2.语法:JavaScript void (express)   或则 JavaScri ...

  9. android开发 锁屏 真正的锁屏,是go锁屏那种。

    想做个锁屏界面很久了,最近一周,历经千辛万苦,越过种种挫折,终于完美实现了这一要求,在此将锁屏思路分享出来. 注意:这不是什么一键锁屏,是类似“go锁屏”那样的锁屏界面. 准备:本程序共需要 两个ac ...

  10. Appium Python Driver Api