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. 启动和启动和停止MySQL服务停止MySQL服务

    1.  启动MySQL服务 启动MySQL服务的命令为: /etc/init.d/mysqld start 命令执行后如图7-5所示,表示启动MySQL服务成功.   (点击查看大图)图7-5  启动 ...

  2. php正则测试demo、动态函数

    <?php error_reporting (E_ALL); ini_set ('display_errors', 'on');?><meta http-equiv="Co ...

  3. 【转】在XCode工程中创建bundle包

    http://www.giser.net/?p=859 Bundle Programming Guide: https://developer.apple.com/library/ios/docume ...

  4. php验证码制作

    目标: 使用php生成验证码 成品: 逻辑代码: authcode.php <?php header("Content-type:image/png"); session_s ...

  5. 使用angular的ng-repeat遇到的一个问题

    问题描述:ng-repeat绑定的数据集动态更新之后其包裹的子元素所绑定的事件全部丢失:问题详述:问题代码如下: <style> img{width:100px;height:100px; ...

  6. 深入理解计算机系统第二版习题解答CSAPP 2.12

    对于下面的值,写出变量x的C语言表达式.代码应该对任何字长w≥8都能工作.我们给出当x=0x87654321以及w=32时表达式的结果,仅供参考. A.x的最低有效字节,其他位均为0.[0x00000 ...

  7. Android 自学之基本界面组件(下)

    按钮(Button)与图片按钮(ImageButton)组件的功能和用法 Button继承了TextView,ImageButton继承了Button.不管是Button还是ImageButton,他 ...

  8. iptables配置说明

    1.iptables的发展:  对于TCP/IP的七层模型来讲,我们知道第三层是网络层,三层的防火墙会在这层对源地址和目标地址进行检测.iptables是网络层的防火墙.   iptables的前身叫 ...

  9. java集合总结

    java中集合是很重要的一点,巩固这边学习的知识,把知识理一下 按马士兵的视频,总结的也很好,集合就是一个“1136” 1个图,1个类Collections,3个知识点:增强for循环,泛型,打包和解 ...

  10. 读jQuery官方文档:数据方法与辅助方法

    数据方法 有时候你可能想要在元素上面储存数据.由于浏览器兼容性问题,用原生JavaScript处理元素上的数据可能会造成内存溢出,jQuery可以帮你自动处理这些问题: //储存和取出元素数据 $(' ...