Hadoop-HDFS分布式文件系统基础

分布式存储的核心属性和功能作用

为什么使用分布式文件系统?

当存储海量数据时,当磁盘空间不够时,往往是通过扩容来解决,但是升级扩容的成本高。

单节点不能完成高并发,需要支撑海量数据的计算。

分布式存储能无线拓展,不像单机主板有限,连接的磁盘有限。

元数据记录

分布式文件系统如何快速定位文件?通过元数据去记录,元数据相当于书的目录,是记录数据的数据,记录文件名,大小,存储机器IP这些信息。

NameNode记录的元数据类型有两种:

  • 文件自身的属性信息

文件名称,权限,修改时间,大小等

  • 文件块位置映射信息

记录文件块和DataNode之间的映射信息,即哪个块位于哪个结点上

Hadoop-HDFS分布式文件系统基础_第1张图片

分块存储

文件过大,导致单机装不下,将文件分块存储,对每个块进行并行操作,能提高操作效率,但记录时也要记录每个块的存储信息,也就是元数据。当文件大小超过128M就分块,所以一个块的大小小于等于128M。

副本机制

不同机器设置备份,冗余存储,保障数据安全,比如node1存储第一个文件块和第二个文件块的备份,node2存储第二个文件块和第一个文件块的备份。文件的所有block都有副本,副本系数可以在文件创建时指定,也可以在之后改变,副本系数由dfs.replication控制,默认值是3,也就是会算复制两份,连同本身共三份。

主从架构

提供给用户统一个接口去访问,一个HDFS集群由一个NameNode和一定数量的DataNode组成,各司其职,主角色来维护元数据和目录树结构,DataNode需要去管理具体的数据块,将存储信息反馈给主角色NameNode,例如要删除一个文件,用户去操作NameNode,而真正干活的是DataNode,NameNode去指挥DataNode删除文件。

namespace

HDFS支持传统的层次型文件组织结构,用户可以创建删除目录文件,NameNode负责维护文件系统的namespace名称空间,任何对文件系统名称或属性的修改都将被NameNode记录下来,HDFS给客户端提供一个统一的抽象目录树,客户端通过路径(url)来访问资源,如hdfs://192.168.88.151:9870/dir-a/file.data

HDFS简介

HDFS(Hadoop Distributed File System)Hadoop分布式文件系统

HDFS的架构图 

Hadoop-HDFS分布式文件系统基础_第2张图片

HDFS使用多台计算机存储文件,并提供一个统一的访问接口

HDFS的设计目标

Hadoop-HDFS分布式文件系统基础_第3张图片

HDFS适合大文件处理,并不适合小文件的处理

HDFS更注重数据的吞吐,不注重数据的交互式访问,所以处理延迟较高

Hadoop-HDFS分布式文件系统基础_第4张图片

HDFS不能编辑修改

HDFS Shell命令行

介绍

通过Shell命令行来操作文件系统

HDFS Shell CLI(command-line interface 命令行界面)支持多种文件系统,包括本地文件系统和分布式文件系统,具体操作什么文件系统取决于命令行中的文件路径URL的前缀协议。

 可以在/export/server/hadoop-3.3.0/etc/hadoop/core-site.xml中设置默认访问的文件系统

Hadoop-HDFS分布式文件系统基础_第5张图片

 hdfs dfs也可以访问文件系统,只不过只能访问HDFS文件系统。

可以通过hadoop fs -help来查看每个命令的用法

创建文件夹

Hadoop-HDFS分布式文件系统基础_第6张图片

 查看指定目录内容

Hadoop-HDFS分布式文件系统基础_第7张图片

上传文件到HDFS指定目录下

localsrc的标准格式是  file:///

dst的标准格式是 hdfs://node1:8020/

Hadoop-HDFS分布式文件系统基础_第8张图片

 查看HDFS文件内容

Hadoop-HDFS分布式文件系统基础_第9张图片

 下载HDFS文件

Hadoop-HDFS分布式文件系统基础_第10张图片

 指定到本地目录的具体某个文件名(这个文件可有可无),就等于给下载的文件改名。

拷贝HDFS文件

Hadoop-HDFS分布式文件系统基础_第11张图片

追加数据到HDFS文件中

将本地文件追加到HDFS文件里

Hadoop-HDFS分布式文件系统基础_第12张图片

HDFS的各角色职责

主角色:NameNode

是分布式文件系统的核心,架构中的主角色,维护和管理文件系统的元数据,包括名称空间目录树结构,文件块的位置信息,访问权限,它是访问HDFS的唯一入口

Hadoop-HDFS分布式文件系统基础_第13张图片

NameNode元数据的存储

内存读写速度快,但断电丢失数据,所以还要硬盘定时的进行持久化。

Hadoop-HDFS分布式文件系统基础_第14张图片

NameNode的数据保存在内存中,当系统重启时,需要DataNode向NameNode重新汇报信息。

单点故障:一个地方出现了问题,导致整体不能工作

主角色需要大内存

从角色:DataNode

负责具体数据块的存储,扩容集群指的是增加DataNode节点.

Hadoop-HDFS分布式文件系统基础_第15张图片

从角色需要大磁盘

主角色辅助角色:secondarynamenode

是NameNode的辅助节点,但不能替代NameNode,主要是帮助主角色进行元数据文件的合并动作。

HDFS的写数据流程(上传文件)

Hadoop-HDFS分布式文件系统基础_第16张图片

几个概念

Pipeline:管道,上传文件的一种传输方式。

Hadoop-HDFS分布式文件系统基础_第17张图片

客户端上传到node1的HDFS文件系统(即保存到DataNode中),node1保存数据后再复制到第二个节点依此类推。

线性传输沿着一个方向传输,充分利用每台机器的带宽,能够减少延迟,而不是采用拓扑式传输,让客户端发给node1-node3。

ACK应答响应

  • ACK(AcKnowledeg character)即确认字符,在数据通信中,接收方发给发送方的一种传输类控制字符,表示发送的数据已经确认接收无误。比如node1给node2发送数据abc,那么node2按字符给node1发送确认。
  • 在HDFS的pipeline管道传输数据的过程中,传输的反方向会进行ACK校验,确保传输安全

Hadoop-HDFS分布式文件系统基础_第18张图片

默认三副本存储策略

  • 第一块副本:看用户客户端本地有没有DataNode,也就是客户端这台机器是否在集群中,否则就近随机。
  • 第二块副本:不同于第一块副本的不同机架。
  • 第三块副本:第二块副本相同机架的不同机器。

 流程

Hadoop-HDFS分布式文件系统基础_第19张图片

  • 1.HDFS客户端创建对象实例DistributeFileSystem,该对象封装了与HDFS文件系统操作的相关方法。
  • 2.调用DistributedFileSystem对象的create()方法,通过RPC请求NameNode创建文件。

NameNode执行各种检查判断:目标文件是否存在,父目录是否存在,客户端是否具有创建权限。

检查通过后,NameNode为本次请求记下一条记录,返回FSDataOutputStream输出流对象给客户端用于写数据。

  • 3.客户端通过FSDataOutputStream输出流开始写入数据。
  • 4.写入数据时,将数据分成一个个数据包(packet 默认64k),内部组件DataStreamer请求NameNode挑选出适合存储数据副本的一组DataNode地址,默认是3副本存储。

  • 5.传输的反方向上,通过ACK机制校验数据包传输是否成功。
  • 6.客户端完成数据写入后,在FSDataOutputStream输出流上调用close()方法关闭
  • 7.DistributedFileSystem联系NameNode告知其文件写入完成,等待NameNode确认。

 如果有至少一个上传成功,客户端通知NameNode,如果有缺失的副本(即复制传输失败),NameNode会找其他的机器进行复制。

你可能感兴趣的:(大数据,hadoop,hdfs,大数据)