Hadoop --- HDFS介绍

这篇具有很好参考价值的文章主要介绍了Hadoop --- HDFS介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

HDFS 全称是Hadoop Distributed File System hadoop分布式(cluser)文件存储系统。适合一次写入,多次读出的场景。

HDFS不需要单独安装,安装Hadoop的时候带了HDFS系统。

Hadoop安装可以参考: 

  1. 有基础的,已经安装了虚拟机的 : Hadoop安装
  2. 没有基础, 也没有安装虚拟机的: Hadoop集群安装

HDFS的优缺点:

  • 优点:高容错性,适合处理大数据,可构建在廉价机器上
  • 缺点:不适合低延时数据访问;无法高效对大量小文件进行存储,不支持并发写入、数据修改。

HDFS文件块大小:

HDFS中的文件再物理上是分块存储,块的大小可以通过配置参数(dfs.blocksize)来规定,默认大小在Hadoop2.x/3.x版本中是128M,1.x版本中是64M

注:寻址时间为传输时间的1%时,为最佳状态

思考:为什么块的大小不能设置太小,也不能设置太大?
(1)HDFS的块设置太小,会增加寻址时间
(2)块太大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。导致程序处理块数据时,会非常慢。
总结:HDFS块的大小设置主要取决于磁盘的传输速率。

HDFS结构: 

HDFS是一个主/从体系结构(经典的Master和Slave架构)。

HDFS由四部分组成,HDFS Client,NameNode,DataNode和Secondary NameNode。

每一个HDFS集群包括一个NameNode和多个DataNode

hadoop hdfs,大数据,hadoop,hdfs,大数据

1、Client客户端 

通过Client来访问文件系统,然后由Client与NameNode和DataNode进行通信。Client对外作为文件系统的接口

  • 文件切分,文件上传HDFS的时候,将文件切分成一个一个的数据块(Block)进行存储
  • 与NameNode交互,获取文件位置
  • 与DataNode交互,读取或写入数据。存储实际的数据块,执行数据库的读写操作
  • Client提供一些命令来管理HDFS,比如NameNode格式化
  • Client可以通过一些命令来访问HDFS,比如对HDFS增删改查操作

2、NameNode ( nn ) 

相当于一个Master,管理者。 用于存储和管理文件元数据、维护文件系统的目录结构树,记录写入的每个数据块(Block)与其归属文件的对应关系。

  • 管理HDFS的名称空间
  • 配置副本策略
  • 管理数据块的映射信息
  • 处理客户端的读写请求

3.dataNode 

DataNode会通过心跳和NameNode保持通信。DataNode负责存储文件的数据(block块),并提供block的读写,并且定期的向NameNode汇报该DataNode存储的数据块信息

4、Secondary NameNode

Secondary NameNode的作用是消费EditsLog,定期地合并FsImage和EditsLog,生成新的FsImage文件,并推送给NameNode,降低了NameNode的压力。 在紧急情况下,可辅助恢复NameNode。

SecondaryNameNode机制:

  1. SecondaryNameNode不是NameNode挂了的备用节点
  2. 他的主要功能只是定期合并日志, 防止日志文件变得过大
  3. 合并过后的镜像文件在NameNode上也会保存一份

SecondaryNameNode工作过程:

  1. SecondaryNameNode向NameNode发起同步请求, 此时NameNode会将日志都写到新的日志当中
  2. SecondaryNameNode向NameNode下载镜像文件+日志文件
  3. SecondaryNameNode开始Merge这两份文件并生成新的镜像文件
  4. SecondaryNameNode向NameNode传回新的镜像文件
  5. NameNode文件将新的镜像文件和日志文件替换成当前正在使用的文件

注: 

1、FsImage(文件系统镜像二进制)
  存储某一个时间点(checkPoint)的NameNode镜像数据
  默认存储位置 : /opt/install/hadoop-2.5.2/data/tmp/dfs/name
  dfs.namenode.name.dir
   
 2、EditsLog 
   可编辑日志二进制 记录(检查点以后的所有写操作)
   默认存储位置 :dfs.namenode.edits.dir 

HDFS高可用设计: 

数据存储故障容错: 

磁盘在存储数据可能会出现错乱。HDFS对于存储在DataNode上的数据块,计算并存储校验和(CkeckSum)。在读取数据的时候,重新计算读取出来的数据的校验和,如果校验不正确就抛出异常,应用程序捕获异常后就到其他DataNode上读取备份数据。

磁盘故障容错:

如果DataNode检测到本机的磁盘损坏,就将磁盘上存储的BlockID报告给NameNode, NameNode检查这些数据块的备份,通知相应的DataNode服务,将对应的数据恢复到其他服务器上,以保证数据块备份数满足要求。

DataNode故障容错:

DataNode会通过心跳和NameNode保持通信,偌DataNode超时未发送心跳,NameNode就认为该DataNode已经宕机,并立即查找DataNode上的数据块,以及这些数据块所在的服务器,随后通知这些服务器再复制一份数据到其他服务器上,以保证HDFS存储的数据块备份数符合要求。

NameNode故障容错: 

NameNode是整个HDFS的核心, 记录这所有文件的分配信息,以及所有文件路径和数据块存储信息。如果NameNode故障, 整个HDFS系统集群都无法使用,如果NameNode的数据丢失,整个集群的所有DataNode数据也就无用了。所以NameNode采用主从热备的方式提供高可用服务。如下图: 

hadoop hdfs,大数据,hadoop,hdfs,大数据

HDFS读写过程:

写流程: 

hadoop hdfs,大数据,hadoop,hdfs,大数据

  1. 请求上传:client向namenode通信,请求上传文件
  2. namenode判断是否可上传: namenode检查用户是否有上传的权限、目标文件是否已存在、父目录是否存在 
  3. 文件切分:client将文件切分成0~128M大小的block块(逻辑切分)
  4. client请求block块的存储位置
  5. namenode返回datanode地址dn1、dn2、dn3
  6. client通过FSDataOutputStream模块请求dn1上传数据,建立连接管道(本质上是一个 RPC 调用,建立 pipeline)
  7. 当dn1收到请求后会继续调用dn2, dn2调用dn3,将整个通信管道建立完成,然后逐级返回client,即图中的ack校验
  8. client开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位(默认64k),dn1收到一个Packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答
  9. 当一个Block传输完成之后,client再次请求NameNode上传第二个Block的服务器(重复执行4-8步)
  10. 传输完毕之后,客户端关闭流资源,并且会告诉hdfs数据传输完毕,然后hdfs收到传输完毕就恢复元数据

读流程: 

hadoop hdfs,大数据,hadoop,hdfs,大数据

  1. Client 向 NameNode 发起 RPC 请求,来确定请求文件 block 所在的位置;
  2. NameNode 会视情况返回文件的部分或者全部 block 列表,对于每个 block,NameNode 都会返回含有该 block 副本的 DataNode 地址;
  3. 这些返回的 DataNode 地址,会按照集群拓扑结构得出 DataNode 与客户端的距离,然后进行排序,排序两个规则:网络拓扑结构中距离Client近的排靠前;心跳机制中超时汇报的 DataNode 状态为 STALE,这样的排靠后;
  4. Client 选取排序靠前的 DataNode 来读取 block,如果客户端本身就是 DataNode,那么将从本地直接获取数据;底层上本质是建立 Socket Stream(FSDataInputStream),重复的调用父类 DataInputStream 的 read 方法,直到这个块上的数据读取完毕;
  5. 当读完列表的 block 后,若文件读取还没有结束,客户端会继续向 NameNode 获取下一批的 block 列表;
  6. 读取完一个 block 都会进行 checksum 验证,如果读取 DataNode 时出现错误,客户端会通知 NameNode,然后再从下一个拥有该 block 副本的 DataNode 继续读。
  7. read 方法是并行的读取 block 信息,不是一块一块的读取;NameNode 只是返回 Client 请求包含块的 DataNode 地址,并不是返回请求块的数据;
  8. 最终读取来所有的 block 会合并成一个完整的最终文件。 

 HDFS存储模型: 

  1. 文件按字节线性切割成block块, 具有offset、id

  2. 一个文件除了最后一个block, 其它block大小一致

  3. block大小依据硬件的I/O 特性调整

  4. block被分散在集群的节点中,具有location

  5. block具有副本(replication), 没有主从概念,副本不能出现在同一个节点

  6. 副本是满足可靠性和性能的关键

  7. 文件上传可以指定block大小和副本数,上传后只能修改副本数

  8. 一次写入多次读取,不支持修改,只支持追加数据 文章来源地址https://www.toymoban.com/news/detail-693202.html

到了这里,关于Hadoop --- HDFS介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大数据开发之Hadoop(HDFS)

    1、HDFS产生背景 随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS只是分布式文件管理系统中的一种。 2、HDFS定义 H

    2024年01月20日
    浏览(56)
  • Hadoop理论及实践-HDFS读写数据流程(参考Hadoop官网)

    主节点和副本节点通常指的是Hadoop分布式文件系统(HDFS)中的NameNode和DataNode。 NameNode(主节点):NameNode是Hadoop集群中的一个核心组件,它负责管理文件系统的命名空间和元数据。它记录了文件的目录结构、文件的块分配信息以及每个文件块所在的DataNode等关键信息。NameNo

    2024年02月14日
    浏览(45)
  • 尚硅谷大数据技术Hadoop教程-笔记03【Hadoop-HDFS】

    视频地址: 尚硅谷大数据Hadoop教程(Hadoop 3.x安装搭建到集群调优) 尚硅谷大数据技术Hadoop教程-笔记01【大数据概论】 尚硅谷大数据技术Hadoop教程-笔记02【Hadoop-入门】 尚硅谷大数据技术Hadoop教程-笔记03【Hadoop-HDFS】 尚硅谷大数据技术Hadoop教程-笔记04【Hadoop-MapReduce】 尚硅谷

    2023年04月08日
    浏览(93)
  • HDFS 跨集群数据同步(hive,hadoop)

    两个不同的HDFS 集群数据迁移( A集群的数据 - B 集群) 采用的是 SHELL 脚本  按表进行; 日期分区进行; #!/bin/bash ##################### #创建人:DZH #创建日期: 2020-04 #内容: 数据迁移 ##################### ##################################### [ \\\"$#\\\" -ne 0 ] FILE=$1 path=$(cd `dirname $0`; pwd) ############## 获取执

    2024年04月27日
    浏览(56)
  • 0201hdfs集群部署-hadoop-大数据学习

    下面我们配置下单namenode节点hadoop集群,使用vmware虚拟机环境搭建。vmware虚拟机的配置,在下面链接2有,或者自行查阅文档。hadoop安装包可到官网下载,当前相关软件环境如下: 软件 版本 说明 hadoop 3.3.4 jar包 vmware 15.5 虚拟机 centos 7.6 服务器操作系统 xshell 6 远程连接 jdk 1.8

    2024年02月11日
    浏览(45)
  • 大数据技术之Hadoop(HDFS)——超详细

    1.1 HDFS产出背景及定义 1)HDFS产生背景 先给大家介绍一下什么叫HDFS,我们生活在信息爆炸的时代,随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这

    2024年02月03日
    浏览(53)
  • Hadoop HDFS:海量数据的存储解决方案

    在大数据时代,数据的存储与处理成为了业界面临的一大挑战。Hadoop的分布式文件系统(Hadoop Distributed File System,简称HDFS)作为一个高可靠性、高扩展性的文件系统,提供了处理海量数据的有效解决方案。本文将深入探讨HDFS的设计原理、架构组成、核心功能以及实际应用场

    2024年04月23日
    浏览(41)
  • hadoop之hdfs生产数据块损坏修复方法

    1、手动修复 检查数据块丢失情况 hdfs fsck / 修复指定路径的hdfs文件,尝试多次 hdfs debug recoverLease -path 文件位置 -retries 重复次数 删除所有损坏的块的数据文件 hdfs fsck / -delete 2、自动修复 hdfs会自动修复损坏的数据块,当数据块损坏后, DN节点执行directoryscan(datanode进行内村和

    2023年04月11日
    浏览(61)
  • 0202hdfs的shell操作-hadoop-大数据学习

    以下命令执行默认配置了hadoop的环境变量,且使用新命令。 一键启停脚本 独立进程启停 2.1 HDFS文件系统基本信息 HDFS作为分布式存储的文件系统,有其对数据的路径表达式。如果熟悉Linux文件系统,可以对比学习。 HDFS同Linux系统一样,均是以/作为根目录的组织形式 如何区分

    2024年02月10日
    浏览(51)
  • 大数据技术之Hadoop:使用命令操作HDFS(四)

    目录 一、创建文件夹 二、查看指定目录下的内容 三、上传文件到HDFS指定目录下 四、查看HDFS文件内容 五、下载HDFS文件 六、拷贝HDFS文件 七、HDFS数据移动操作 八、HDFS数据删除操作 九、HDFS的其他命令 十、hdfs web查看目录 十一、HDFS客户端工具 11.1 下载插件 11.2 本地安装Had

    2024年02月09日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包