HDFS基础入门

Posted 脚丫先生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDFS基础入门相关的知识,希望对你有一定的参考价值。

大家好,我是脚丫先生 (o^^o)
废话不多说,我们开始今天的正文。



一、HDFS的介绍

1.1 HDFS分布式文件系统

随着数据量越来越大,在一个操作系统管辖的范围内存不下了,那么就分配到更多的操 作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS只是分布式文件管理系统中的一种。
官网介绍:

The Hadoop Distributed File System (HDFS) is a distributed file system designed 
to run on commodity hardware. It has many similarities with existing distributed 
file systems. However, the differences from other distributed file systems are 
significant. HDFS is highly fault-tolerant and is designed to be deployed on 
low-cost hardware. HDFS provides high throughput access to application data and 
is suitable for applications that have large data sets. HDFS relaxes a few POSIX 
requirements to enable streaming access to file system data. HDFS was originally 
built as infrastructure for the Apache Nutch web search engine project. HDFS is 
part of the Apache Hadoop Core project. 

翻译: Hadoop 分布式文件系统 (HDFS) 是一种分布式文件系统,旨在运行在商品硬件上。 它与现有的分布式文件系统有很多相似之处。 但是,与其他分布式文件系统的区别是显着的。 HDFS 具有高度容错性,部署在低成本硬件上。 HDFS 提供对应用程序数据的高吞吐量访问,适用于具有大型数据集的应用程序。 HDFS 放宽了一些 POSIX 要求,以启用对文件系统数据的流式访问。 HDFS 最初是作为 Apache Nutch 网络搜索引擎项目的基础设施而构建的。 HDFS 是 Apache Hadoop Core 项目的一部分。

总之:HDFS是Hadoop中的一个分布式文件系统,其核心设计思想-> 分而治之:将海量大文件,大批量文件,分布式的存放于大量服务器上。以便于采取分而治之的方式对海量数据进行存储,并为之后的运算分析提供数据存储支撑。

1.2 HDFS设计思路

HDFS被设计成用来使用低廉的服务器来进行海量数据的存储,其设计思想:

  • 1、分块存储(把一个大文件切分成多个小文件,每一个节点存储一部分小文件,相当于使用一个集群来联合存储这个文件)
  • 2、冗余存储
    一个数据块存储多个副本。多个副本分散存储在多个不同的节点上。提高副本数,有助于提高数据安全性
    设计:
    HDFS解决海量数据的存储,那么难度在于 怎么存,怎么保证安全。采用一个服务器节点存储一个大文件存不下,那么磁盘不够,则加磁盘(纵向扩展),但是磁盘不是可以无限制增加的。因此,使用更多的服务器来存储(横向扩展),既然需要很多服务器去存储数据,那么企业就应该考虑是否有足够的资金去购买这么多服务器呢。所以最后选择在廉价的商用机器上进行海量数据存。 保证数据安全:HDFS的设计者采取了一种最简单也是方式:存一份不够,存多份。
    那么怎么保证高效呢?
    1、机架感知,保证数据块的存放有一个最高效的策略
    2、负载均衡 (每个节点所以承担的数据一样,也就是所存储的副本数据一样多。但是总是会发生数据倾斜)
    3、安全模式
    4、Trash机制
    5、Archeive归档解决海量小文件存储问题
    6、执行流时数据访问
    7、执行自动副本维护

1.3 HDFS架构


架构主要由四个部分组成,分别为HDFS Client、NameNode、DataNode和Secondary NameNode。
(1) Client:就是客户端。文件上传HDFS的时候,Client将文件切分成一个一个的Block,然后进行存储。
(2) NameNode:就是Master,它是一个主管、管理者。负责管理整个文件系统的元数据,以及每一个路径(文件)所对应的数据块信息。HDFS 中的元数据分别在内存和磁盘中都存储了一份完整的,保证了安全性同时提高了效率,因为磁盘:读写慢,数据安全。内存:读写快,但是掉电丢失数据。
(3) DataNode:就是Slave。NameNode下达命令,DataNode执行实际的操作。存储文件块数据(也就是存储文件的数据),以及块数据的校验和。
(4)Secondary NameNode:辅助NameNode,分担其工作量。定期合并Fsimage和Edits,并推送给NameNode; 在紧急情况下,可辅助恢复NameNode。

1.4 特性

  • 1、HDFS 中的文件在物理上是分块存储(block),块的大小可以通过配置参数 dfs.blocksize 来规定,默认大小在 hadoop-2.x 版本中是128M,老版本 hadoop-1.x 中是64M,但是可以在使用的时候由客户端自由指定。
  • 2、HDFS文件系统会给客户端提供一个统一的抽象目录树,客户端通过路径来访问文件,形如:
hdfs://namenode:port/dir-a/dir-b/dir-c/file.data
  • 3、HDFS的副本机制,通过对数据进行多个副本,存储在不同的节点来保证数据的安全性。
dfs.replication = 3

如果副本数比较大,那么这个HDFS集群是比较消耗磁盘空间的!

二 HDFS优缺点

2.1 优点

  • 1、可构建在廉价机器上
  • 2、高容错性
  • 3、适合批处理
  • 4、适合大数据处理
  • 5、流式文件访问

2.2 缺点

  • 1、低延迟数据访问: 比如毫秒级,低延迟与高吞吐率
  • 2、小文件存取:占用 NameNode大量内存
  • 3、并发写入、文件随机修改

三、HDFS不适合存储小文件

元信息存储在NameNode内存中,一个节点的内存是有限的存取大量小文件消耗大量的寻道时间,类比拷贝大量小文件与拷贝同等大小的一个大文件。NameNode存储block数目是有限的,一个block元信息消耗大约150 byte内存,存储1亿个block,大约需要20GB内存,如果一个文件大小为10K,则1亿个文件大小仅为1TB(但要消耗掉NameNode 20GB内存)
HDFS关于小文件的解决:
1、同种类型的小文件可以考虑合并
2、建立成归档文件
3、如果涉及到计算问题,一定要要进行自定义,让mapreduce的程序按照我们的自定义逻辑是先默认情况下:一个HDFS的文件的数据块,就会针对性的启动一个小任务。

以上是关于HDFS基础入门的主要内容,如果未能解决你的问题,请参考以下文章

云小课 | MRS基础入门之HDFS组件介绍

云小课 | MRS基础入门之HDFS组件介绍

大数据零基础学习hadoop入门教程

HDFS 入门和基本操作

HDFS 入门和基本操作

技术分享丨HDFS 入门