HDFS——Hadoop内置分布式文件系统

前言

Hadoop有一个被称为HDFS的分布式系统,全称为Hadoop Distributed FileSystem。

在这里插入图片描述

HDFS的概念

磁盘有块的大小,代表着能够读写的最小数据量,文件系统通过处理大小为磁盘块大小证书背的数据块来运作磁盘。文件系统块大小一般为几千字节,而磁盘块大小为512字节。

HDFS也有块的概念,默认为64MB,作为单独的单元存储,其中小于一个块大小的文件不会占据整个块空间。

HDFS块大的原因

为了减小寻址开销,通过让一个块足够大,从磁盘转移数据的时间能够远远大于定位这个块开始端的时间。所以,传送一个由多个块组成的文件的时间就取决于磁盘传输速率。

分布式文件系统使用抽象块带来的好处

  • 一个文件可以大于网络中任意一个磁盘的容量;
  • 使用块抽象单元而不是文件会简化存储子系统;
  • 很适合于为提供容错和实用性而做的复制操作;

列出文件系统中组成各个文件的块
hadoop fsck / -files -blocks

名称节点与数据节点

HDFS集群有两种节点,以管理者-工作者模式运行,即名称节点(管理者)数据节点(工作者)

名称节点管理文件系统命名空间,维护着这个文件系统树及这个树内所有文件和索引目录。这些信息已命令空间镜像或编辑日志的形式永久保存在本地磁盘上。同时名称节点也记录着每个文件的每个块所在的数据节点,但是并不永久保存块的位置,因为这些信息会在系统启东时有数据节点重建。

数据节点是文件系统的工作者,它们存储并提供定位块的服务,并且定时的向名称节点发送它们存储的块的列表。

两种保护机制用来确保名称节点能够经受故障:

  • 复制那些组成文件系统元数据持久状态的文件,Hadoop可以通过配置使名称节点在多个文件系统上写入其持久化状态。这些写操作具有同步性和原子性。
  • 运行一个二级名称节点,虽然它不能作为名称节点使用,这个二级名称节点的重要作用就是定期通过编辑日志合并命名空间镜像,以防止编辑日志过大。二级名称节点比主节点之后,所以存在损失在所难免。

命令行接口

设置伪分布式配置

fs.default.name设置为 h d f s : / / l o c a l h o s t / hdfs://localhost/ hdfs://localhost/,用来为Hadoop设置默认文件系统。默认端口为8020,HDFS用户将通过这个属性的知名称节点在哪里运行以便连接。

dfs.replication设置为1,这样HDFS就不会按默认设置将文件系统复制3份。

基本文件系统操作

将本地文件系统的一个文件复制到HDFS:

hadoopfs -copyFromLocal 本地文件 HDFS路径

创建目录

hadoop fs -mkdir 目录名

显示目录列表

hadoop fs -ls .

Hadoop文件系统

Hadoop提供了许多文件系统的接口,一般使用URI方案来选取合适的文件系统实例交互。

列出本地系统系统根目录下的文件:

hadoop fs -ls file:///
接口

Hadoop是用Java编写的,所有Hadoop文件系统间的相互作用都是由Java API调解得。

数据流

文件读取剖析

客户端从HDFS中读取数据

  • 客户端通过调用FileSystem对象的open()来读取希望打开的文件;
  • DistributedFileSystem通过使用RPC来调用名称节点,获取文件开头部分块的位置,名称节点会根据文件存储位置与客户端的距离排序,返回一个FSData InputStream对象。
  • 客户端对这个输入流调用read(),存储着文件开头部分块的数据节点地址的数据流与这些块最近的数据节点相连接;
  • 通过重复调用read(),数据从数据节点返回客户端。
  • 到达块的末端时,数据流会关闭与数据节点间的联系,然后为下一个块找到最佳的数据节点。
  • 数据传输完成调用close()。
文件写入剖析

客户端对HDFS写入数据

  • 客户端通过在DistributedFileSystem中调用create()来创建文件;
  • DistributedFileSystem一个RPC取调用名称节点,在文件系统的命名空间中创建一个新的文件。名称节点会执行各种不同的检查以确保这个文件不会已经存在,并且客户端有可以创建文件的适当许可。如果检查通过名称节点就生成一个新文件记录,否则,文件失败并向客户端抛出一个IO异常。分布式文件系统返回一个文件系统数据输出流,让客户端开始写入数据,文件系统数据输出流控制一个DFSoutPutStream,负责处理数据节点和名称节点之间的通信。
  • 在客户端写入数据时,DFSoutPutStream将它分成一个个包,写入内部的队列,称为数据队列。数据队列随数据流流动,数据流的责任是根据适合的数据节点列表来要求这些节点为副本分配新的块。这些数据节点的列表形成一个管线,数据流将包分流给管线中第一个的数据节点,这个节点会存储包并且发送给管线中的第二个数据节点,同样的第二个数据节点存储包并且传给管线中第三个数据节点。
  • DFSoutPutStream也有一个内部的包队列来等待数据节点收到确认,称为确认队列,当一个包在管线中所有节点确认后才会移除确认队列。
  • 客户端完成数据写入后就会在流中国调用close,在向名称节点发送完信息之前,此方法会将余下的所有包放入数据节点管线并等待确认。

名称节点如何选择哪个数据节点来保存副本?

Hadoop的策略是在与客户端相同的节点上放置第一个副本,第二个副本被放置在与第一个不通的随机选择的机架上,第三个副本被放置在与第二个相同的机架上,但在不同节点。

冗余副本策略
  • 可以在hdfs-site.xml中设置复制因子,指定副本数量;
  • 所有数据块都有副本;
    -DataNode启动时,遍历本地文件系统,产生一份hdfs数据块和本地文件的对应关系列表汇报给namenode。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Hadoop一个开源的分布式计算框架,其中包括分布式文件系统HDFSHadoop Distributed File System)。HDFS旨在处理大量数据并支持高容错性。它使用多个节点构成的集群来存储和处理数据,这些节点之间可以进行数据交换和通信。HDFS可以存储非常大的数据集,并且具有高可靠性,因为它将数据复制到不同的节点上,以防止数据丢失。由于它的可靠性和可扩展性,HDFS已经成为大数据处理的主要工具之一。 ### 回答2: Hadoop一个开源的分布式计算系统,其中分布式文件系统HDFS是其核心组件之一。它是为了存储和处理大量的数据而设计的。HDFS的设计目标是针对非常大的数据集进行可靠且高效的数据存储,而这些数据可能分布在成百上千的机器上。 HDFS的核心思想是将大文件划分为小块,然后将这些小块分布式地存储在同一个集群中不同的机器上。每个数据块都被复制存储在多个机器上,以保证高可靠性和容错性。如果机器出现故障,系统可以自动地将它们从数据复制中删除,以确保数据的持久性和不间断的可用性。 除了高可靠性和容错性,HDFS还具有高吞吐量和低延迟的优点。由于文件被拆分成小数据块并分布在不同的机器上,HDFS可以通过并行处理来实现快速的数据读取和写入操作。这使得HDFS成为大数据处理中使用的理想存储系统。 HDFS还提供了一些方便的操作界面,例如通过命令行或Web界面来访问和管理文件,并提供了Java API来支持开发人员对文件进行编程式操作。除此之外,HDFS还支持与其他分布式计算系统(例如MapReduce和Spark)的紧密集成,并可以通过这些系统对存储在HDFS中的数据进行处理。 综上所述,HDFS作为Hadoop的核心组件,为大数据处理提供了可靠、高效、可扩展的分布式文件系统服务。它已经成为大数据领域的重要工具之一,并且是许多大型数据处理应用程序的首选存储系统之一。 ### 回答3: Hadoop是由Apache基金会开发的一款开源分布式计算框架,在大数据处理中有着非常广泛的应用。其中的分布式文件系统HDFS可以说是Hadoop框架的核心部分,它是一个高度可靠、可扩展、具备高可用性的分布式文件系统HDFS的特点主要有以下几个方面: 1.可靠性: HDFS是通过数据冗余的方式,将数据分布到集群中各个节点进行存储,数据被分为若干块,每个块会复制多份存储在不同的节点上,以保证数据不会丢失。 2.可扩展性: HDFS支持集群的扩展,可以通过向集群添加节点来增加存储容量和处理能力,以应对数据量急剧增长的场景。 3.高可用性: HDFS采用了主节点和从节点的架构,主节点负责管理整个文件系统的元数据,而从节点负责存储数据,这样在主节点出现故障时可以通过选举新的主节点继续工作,保证系统的高可用性。 4.适合大文件的处理: HDFS适合存储大量的大文件,因为它针对大文件进行了优化,在大文件处理的场景下能够保证高效的性能。 5.数据共享: HDFS支持不同的用户或应用程序之间的数据共享,不同用户或应用之间可以存取相同的数据,并且可以同时读写相同的数据文件。 总的来说,HDFS一个高度可靠、可扩展、高性能、适合大文件存储和数据共享的分布式文件系统,在大数据处理中有着广泛的应用,并且随着大数据技术的不断发展,它的重要性也将越来越凸显。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值