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. jstree使用小结(三)

    操作节点的这几个事件都比较简单: 如下 var $tree=$('#tree1'); $tree.jstree({...}); //选中节点 $tree.on('select_node.jstree' ...

  2. 数字规律:Pascal‘s triangle

    Given an integer n, return the number of trailing zeroes in n!. Note: Your solution should be in pol ...

  3. TFS2013 升级至TFS2015及项目的创建

    TFS2015已发布想体验下新特性 由于现有数据库已经是SQLSERVER2012 SP1 开发工具VS2013 都符合升级要求 现在体验下吧 1.先下载TFS2015 运行安装向导一路NEXT 直至 ...

  4. linux 套接字编程入门--Hello World

    下述代码是linux套接字编程的入门代码.分为服务端和客户端源码. 服务端代码的主要流程是绑定ip地址和端口号建立套接字,等待客户端发起访问.接受客户端请求之后,向客户端发送字符串"hell ...

  5. jquery textarea输入字符字数提示

    效果: html代码: <textarea id="assayInfo" name="assayInfo" rows="3" cols ...

  6. 配置Log4J(转载)

    Log4J的配置文件(Configuration File)就是用来设置记录器的级别.存放器和布局的,它可接key=value格式的设置或xml格式的设置信息.通过配置,可以创建出Log4J的运行环境 ...

  7. --@angularJS--$scope.watch监听模型变化

    $watch简单使用 $watch是一个scope函数,用于监听模型变化,当你的模型部分发生变化时它会通知你. $watch(watchExpression, listener, objectEqua ...

  8. RMAN-06217: not connected to auxiliary database with a net service name

    RMAN> duplicate target database to clonedb from active database; Starting Duplicate Db at 28-JAN- ...

  9. shell 命令合并文本

    之前想把代码打印出来看来着,后来合并完之后放在word里发现有2000多页,然后放弃了~anyway,这个命令还是挺有用的. 比如我有文本a001.dat, a002.dat, a003.dat .. ...

  10. spring的value,null标签

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://ww ...