HDFS作为Hadoop的核心技术之一,HDFS(Hadoop Distributed File System, Hadoop分布式文件系统)是分布式计算中数据存储管理的基础。具有高容错高可靠性、高可扩展性、高可获得性、高吞吐率等特性。为超大数据集的应用提供了便利。

一、设计的前提和目的

HDFS是Google的GFS(Google File System)的开源实现。具有以下五个基本目标:

  1. 硬件错误是常态而不是错误。HDFS一般运行在普通的硬件上,所以硬件错误是一种很正常的情况。所以在HDFS中,错误的检测并快速自动恢复是HDFS的最核心的设计目标。
  2. 流式数据访问。运行在HDFS上的应用主要是以批量处理为主,而不是用户交互式事务,以流式数据读取为多。
  3. 大规模数据集。HDFS中典型的文件大小要达到GB或者是TB级。
  4. 简单一致性原则。HDFS的应用程序一般对文件的操作时一次写入、多次读出的模式。文件一经创建、写入、关闭后,一般文件内容再发生改变。这种简单的一致性原则,使高吞吐量的数据访问成为可能。
  5. 数据就近原则。HDFS提供接口,以便应用程序将自身的执行代码移动到数据节点上来执行。采用这种方式的原因主要是:移动计算比移动数据更加划算。相比与HDFS中的大数据/大文件,移动计算的代码相比与移动数据更加划算,采用这种方式可以提供宽带的利用率,增加系统吞吐量,减少网络的堵塞程度。

二、HDFS体系结构

HDFS是一个主从结构(master/slave)。如图所示:

从这个图,我们可以看到HDFS中,主要由两类节点组成,一种是NameNode(NN),一种是DataNode(DN)。

NameNode是主控制服务器,负责管理HDFS文件系统的命名空间,记录文件数据库在每个DataNode节点上的位置和副本信息,协调客户端(Client)对文件的访问/操作,以及记录命名空间内的改动或命名空间本身属性的改变。

DataNode是数据存储节点,负责自身所在物理节点上的存储管理。HDFS中文件存储是按块(Block)存储的,默认大小是64MB。

客户端操作数据,只通过NameNode获取DataNode节点的物理位置,对于写/读数据的具体操作,NameNode是不会参与的,全部由DataNode负责。

由于HDFS中只有一个NameNode节点,所有存在单点问题,即如果改NameNode节点宕机,那么HDFS就会出现问题,数据可能丢失。解决办法是启动一个SecondaryNameNode或者将NameNode数据写出到其它远程文件系统中。

三、HDFS可靠性保障措施

HDFS的主要设计目标之一是在故障情况下,要保障数据存储的可靠性。HDFS具备了完善的冗余备份和故障恢复机制。一般通过dfs.replication设置备份份数,默认3。

  1. 冗余备份。将数据写入到多个DataNode节点上,当其中某些节点宕机后,还可以从其他节点获取数据并复制到其他节点,使备份数达到设置值。dfs.replication设置备份数。
  2. 副本存放。HDFS采用机架感知(Rack-aware)的策略来改进数据的可靠性、可用性和网络宽带的利用率。当复制因子为3时,HDFS的副本存放策略是:第一个副本放到同一机架的另一个节点(执行在集群中)/随机一个节点(执行在集群外)。第二个副本放到本地机架的其他任意节点。第三个副本放在其他机架的任意节点。这种策略可以防止整个机架失效时的数据丢失,也可以充分利用到机架内的高宽带特效。
  3. 心跳检测。NameNode会周期性的从集群中的每一个DataNode上接收心跳包和块报告,NameNode根据这些报告验证映射和其他文件系统元数据。当NameNode没法接收到DataNode节点的心跳报告后,NameNode会将该DataNode标记为宕机,NameNode不会再给该DataNode节点发送任何IO操作。同时DataNode的宕机也可能导致数据的复制。一般引发重新复制副本有多重原因:DataNode不可用、数据副本损坏、DataNode上的磁盘错误或者复制因子增大。
  4. 安全模式。在HDFS系统的时候,会先经过一个完全模式,在这个模式中,是不允许数据块的写操作。NameNode会检测DataNode上的数据块副本数没有达到最小副本数,那么就会进入完全模式,并开始副本的复制,只有当副本数大于最小副本数的时候,那么会自动的离开安全模式。DataNode节点有效比例:dfs.safemode.threshold.pct(默认0.999f),所以说当DataNode节点丢失达到1-0.999f后,会进入安全模式。
  5. 数据完整性检测。HDFS实现了对HDFS文件内容的校验和检测(CRC循环校验码),在写入数据文件的时候,也会将数据块的校验和写入到一个隐藏文件中()。当客户端获取文件后,它会检查从DataNode节点获取的数据库对应的校验和是否和隐藏文件中的校验和一致,如果不一致,那么客户端就会认为该数据库有损坏,将从其他DataNode节点上获取数据块,并报告NameNode节点该DataNode节点的数据块信息。
  6. 回收站。HDFS中删除的文件先会保存到一个文件夹中(/trash),方便数据的恢复。当删除的时间超过设置的时间阀后(默认6小时),HDFS会将数据块彻底删除。
  7. 映像文件和事务日志。这两种数据是HDFS中的核心数据结构。
  8. 快照。不太清楚。。。呵呵

四、HDFS命令

  1. bin/hadoop dfs -ls:命令和linux中的ls命令差不多,都是列出文件。
  2. bin/hadoop dfs -put src dest:上传文件到HDFS中。
  3. bin/hadoop dfs -get src dest:复制HDFS文件到本地系统中。
  4. bin/hadoop dfs -rmr path:删除文件。
  5. bin/hadoop dfs -cat in/*:查看文件内容。
  6. bin/hadoop dfsadmin -report:查看HDFS的基本统计信息,和访问http://fs4:50070一样。
  7. bin/hadoop dfsadmin -safemode  enter/leave/get/wait:操作安全模式。
  8. bin/start-dfs.sh:在新节点执行,可以添加hdfs新节点。
  9. bin/start-balancer.sh:负载均衡。

hadoop-hdfs体系结构的更多相关文章

  1. Hadoop的体系结构之HDFS的体系结构

    Hadoop的体系结构 Hadoop不仅是一个用于分布式存储的分布式文件系统,而是设计用来在由通用计算设备组成的大型集群上执行分布式应用的框架. HDFS和MapReduce是Hadoop中的两个最基 ...

  2. Hadoop的体系结构

    HDFS和MapReduce是Hadoop的两大核心.而整个Hadoop的体系结构主要是通过HDFS来实现对分布式存储的底层支持的,并且它会通过MapReduce来实现对分布式并行任务处理的程序支持. ...

  3. [HDFS Manual] CH1 HDFS体系结构

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  4. HDFS体系结构(NameNode、DataNode详解)

    hadoop项目地址:http://hadoop.apache.org/ NameNode.DataNode详解 (一)分布式文件系统概述 数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配 ...

  5. Hadoop HDFS 源码解析记录

    版权说明: 本文章版权归本人及博客园共同所有,转载请标明原文出处( https://www.cnblogs.com/mikevictor07/p/12047502.html ),以下内容为个人理解,仅 ...

  6. 第四次作业 描述HDFS体系结构、工作原理与流程

    1.用自己的图,描述HDFS体系结构.工作原理与流程. 读数据的流程 2.伪分布式安装Hadoop.

  7. Hadoop HDFS 用户指南

    This document is a starting point for users working with Hadoop Distributed File System (HDFS) eithe ...

  8. Hadoop HDFS负载均衡

    Hadoop HDFS负载均衡 转载请注明出处:http://www.cnblogs.com/BYRans/ Hadoop HDFS Hadoop 分布式文件系统(Hadoop Distributed ...

  9. Hive:org.apache.hadoop.hdfs.protocol.NSQuotaExceededException: The NameSpace quota (directories and files) of directory /mydir is exceeded: quota=100000 file count=100001

    集群中遇到了文件个数超出限制的错误: 0)昨天晚上spark 任务突然抛出了异常:org.apache.hadoop.hdfs.protocol.NSQuotaExceededException: T ...

  10. Hadoop程序运行中的Error(1)-Error: org.apache.hadoop.hdfs.BlockMissingException

    15/03/18 09:59:21 INFO mapreduce.Job: Task Id : attempt_1426641074924_0002_m_000000_2, Status : FAIL ...

随机推荐

  1. 【转】PHP生成随机密码的几种方法

    使用PHP开发应用程序,尤其是网站程序,常常需要生成随机密码,如用户注册生成随机密码,用户重置密码也需要生成一个随机的密码.随机密码也就是一串固定长度的字符串,这里我收集整理了几种生成随机字符串的方法 ...

  2. jstree使用小结(一)

    项目中用到tree结构,使用了jstree做个笔记如下: 1. 官网: http://www.jstree.com/    有时候打不开,那就只能等打得开的时候再看了...O(∩_∩)O [PS: 一 ...

  3. wordpress-标签

    来源1:http://www.graphicrating.com/2009/01/18/my-wordpress-cheat-sheet/ 来源2:http://www.cnblogs.com/asq ...

  4. Recovering a WiredTiger collection from a corrupt MongoDB installation

    Reference: http://www.alexbevi.com/blog/2016/02/10/recovering-a-wiredtiger-collection-from-a-corrupt ...

  5. 详解JavaScript中的事件处理

    在漫长的演变史,我们已经告别了内嵌式的事件处理方式(直接将事件处理器放在HTML元素之内来使用),今天的事件,它已是DOM的重要组成部分,遗憾的是,IE继续保留它最早在IE4.0中实现的事件模型,以后 ...

  6. spring框架学习(三)junit单元测试

    spring框架学习(三)junit单元测试 单元测试不是头一次听说了,但只是听说从来没有用过.一个模块怎么测试呢,是不是得专门为一单元写一个测试程序,然后将测试单元代码拿过来测试? 我是这么想的.学 ...

  7. 【转】 如何提高自己的acm个人能力

    2011-05-17 21:26 1429人阅读 评论(0) 收藏 举报 算法网络blog八卦游戏读书 转载自 简单de数字 最终编辑 fading_code by   zfy0701 本来以为HNU ...

  8. 部署statspack工具(一)

    禁用sga自动管理机制,分配比较小的数据缓冲区(30m)和共享池(70m)空间 1.1关闭SGA自动管理机制 查看是否开启了ASSM idle>show parameter sga; NAME  ...

  9. HTML 多媒体、Object 元素、音频、视频

    Web 上的多媒体指的是音效.音乐.视频和动画. 现代网络浏览器已支持很多多媒体格式. 什么是多媒体? 多媒体来自多种不同的格式.它可以是您听到或看到的任何内容,文字.图片.音乐.音效.录音.电影.动 ...

  10. java较全的面试题

    一.Java基础部分 1. JAVA的基本数据类型有哪些 ? String 是不是基本数据类型 ? 2. 一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? ...