大数据学习之hadoop——03HDFS文件系统概述

1、概念

HDFS是Hadoop Distribute File System 的简称,意为:Hadoop 分布式文件系统。是 Hadoop 核心组件之一,作为最底层的分布式存储服务而存在。它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。

2、优点

  • 适合大数据处理:能够处理百万规模以上的文件数量( GB、TB、PB级数据),能够处理10K节点的规模
  • 处理非结构化的数据:可处理结构化、半结构化、非结构化的数据(语音、视频、图片),80% 的数据都是非结构化的数据
  • 流式访问数据:一次写入,多次读取。文件一旦写入不能修改,只能追加。它能保证数据的一致性。
  • 运行于廉价的商用机器集群上: 它通过多副本机制,提高可靠性。一旦出现故障也不会影响正常的业务处理,可以通过其它副本来恢复。

3、缺点

  • 不适合处理低延迟的数据访问: HDFS是为了处理大型数据集分析任务的,主要是为了达到高的数据吞吐量而设计的, HBase适合做低延迟的数据访问BigTable

  • 无法高效的存储大量小文件:当文件以block块的形式进行存储时,block块的位置会存储在namenode节点的内存中不论存储大文件还是小文件,每个文件对应的单条block的块信息大小是一致的 而NameNode的内存总是有限的。小文件存储的寻道时间会超过读取时间,违反了HDFS的设计目标。(这里的小文件是指小于HDFS系统的Block大小的文件,默认是128M)

  • 不支持并发写入和任意的修改: 一个文件同时只能有一个写,不允许多个线程同时写。 仅支持数据append(追加),不支持文件的随机修改。以追加的形式达到修改的目的

4、功能

  • 分布式存储:在HDFS中NameNode负责管理HDFS文件系统的元数据,而实际的数据则是存储于该文件系统的DataNode节点中,具体位置由文件系统的机架感知功能分配,元数据则是记录文件具体内容。
  • 命名空间管理:HDFS的命名空间包含目录、文件和块的信息。命名空间支持对HDFS中的目录、文件和块做创建、修改、删除、列表文件和目录等基本操作。
  • 块/存储管理: 在块存储服务中包含两部分工作:块管理和物理存储。(这是一个更通用的存储服务。其他的应用可以直接建立在Block Storage上,如HBase,Foreign Namespaces等)
块管理:
    A) 处理DataNode向NameNode注册的请求,处理datanode的成员关系。
    B) 处理来自DataNode周期性的心跳报告,维护块的位置信息。
    C) 处理与块相关的操作:块的创建、删除、修改及获取块信息。
    D) 管理副本放置(replica placement)和块的复制及多余块的删除。
 
物理存储:
    Data Node把块存储到本地文件系统中,对本地文件系统的读写。

5、特性

  • 高容错:数据自动保存多个副本。它通过增加数据冗余来提高容错性。某一个副本丢失以后,它可以自动恢复

  • 可扩展:可以不断的添加新的datanode

  • 可配置性强:诸多集群属性可通过增加或者修改配置文件来更改

  • 跨平台:Java语言开发的,HDFS支持多个平台Windows

  • shell命令接口:例如
    hadoop fs -put 上传,把本地Linux文件系统的文件,上传到HDFS文件系统中
    hadoop fs -ls hdfs://master:9000/ 查看HDFS文件系统根目录(/)下的文件

  • 机架感知功能:副本的存放,第一个存到rack1,第二个就会选择不同于rack1的其他的rack上面存储 /etc/hosts

  • 负载均衡:理想状态下,集群中每个服务器上面存储数据都是均匀的。但在实际当中,经常会出现数据偏移

  • 提供Web界面
    http://master:8088 yarn
    http://master:50070 hdfs

6、结构

这种文件系统是由多台节点组合成集群来实现的,由三个角色组成分别为:NameNode、DataNode、SecondaryNameNode。

  • NameNode:负责管理整个文件系统的元数据,以及每个文件对应的数据块信息
  • DataNode:数据节点,用来存储文件的真实数据块
  • SecondaryNameNode:监控HDFS状态的后台程序,每隔一段时间自动获取HDFS元数据的快照

7、名词解释

  • 元数据:对于在HDFS上存储的文件都会有其对应的数据,包括文件的存储节点、文件分块状态、块id、等等
  • 数据块:对于HDFS上的所有文件在物理层面上都是分块存储的,默认块大小是128m ,默认备份为3份。
    对于实际大小不满足128m的文件按照一块存储,对于超过128m的文件进行以128m为单位切分多块存储,默认块大小可以在停了集群之后在hdfs-site.xml中进行配置再重启集群生效
<property>  
<name>dfs.blocksize</name>  
<value>256m</value>  
</property>  
<property>  
<name>dfs.namenode.fs-limits.min-block-size</name>  
<value>256m</value>  
</property>
  • 默认块大小
    在Hadoop1.x版本中,默认块大小为64m,在hadoop.x版本中默认块大小是128m。
    block块的大小主要取决于磁盘的传输速率,hdfs的平均寻址时间为10ms,普遍认为巡视时间为传输数据时间的1%时为最佳状态,即传输时间为1s,机械硬盘文件顺序读写的速度为100mb/s,普通固态的速度为500mb/s,pcie固态的最高速度可达2000mb/s,因为文件的大小是由二进制计算的,所以块的大小可计算出得128m,256m以及2048m
  • 块数据
    以上传的大小为176m的jdk为例。按照默认块大小为128m来讲,该文件应该被分为两块,大小分别为128m和48m,点开jdk-8uxxxxxx后就会显示出以下信息
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
结合dataNode数据存储位置查看实际的数据块信息,可以得出结论

  1. 通过BlockID:确定具体数据块
  2. 通过Block Pool ID:每个namenode都会有对应的一个Block Pool ID
  3. Generation Stamp:文件名+该文件的Generation Stamp即为校验文件,文件格式为xxx.meta
  4. Size:块大小,单位为byte
  5. Availability:该数据块所在的节点

部分内容转载自https://blog.csdn.net/superme_yong/article/details/86541299?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158442736019724847037575%2522%252C%2522scm%2522%253A%252220140713.130056874…%2522%257D&request_id=158442736019724847037575&biz_id=0&utm_source=distribute.pc_search_result.none-task

猜你喜欢

转载自blog.csdn.net/nothair/article/details/104921826