前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hadoop 之 HDFS

Hadoop 之 HDFS

作者头像
搬砖俱乐部
发布2019-10-17 17:25:55
6680
发布2019-10-17 17:25:55
举报
文章被收录于专栏:BanzClubBanzClub

Hadoop 可以看成是 HDFS + MapReduce + Yarn组成,其中HDFS作为分布式文件系统被用到了很多其他系统,本文将简要介绍HDFS的概念和架构

01—Hadoop 简介

Hadoop 狭义上可以看成是 HDFS + MapReduce + Yarn,即分布式存储 + 作业 + 调度,是处理海量数据的整体解决方案,HDFS为海量数据提供存储,MapReduce为海量数据提供计算框架,Yarn负责集群资源的管理和调度,其中,本文主要内容是HDFS。

02—HDFS 概念

之前已经介绍过《关系型数据库-MySQL》和《操作系统的文件系统》,实际上与分布式文件系统功能类似,他们都是负责存储文件的,不过,他们的使用场景是不一样的:关系型数据库主要为Web应用的结构化数据提供持久化和CURD操作等;文件系统是操作系统为用户读写文件等操作提供的软件,主要是面向单机系统的;而HDFS是分布式文件系统,主要建立在分布式系统上,用于存储海量数据,并提供读写操作等。

03—HDFS 架构

HDFS 全称 Hadoop Distributed Filesystem,HDFS可以建立在廉价的商用服务器集群上,节点故障是HDFS需要重点考虑的。因此概括来说,HDFS是具有高容错性、高可用性、高吞吐量访问,支持文件系统数据的流式处理,并适用于存储海量文件的分布式文件系统。

磁盘结构

block块,用于存储文件的基本单位,默认128M,适合存储比较大的文件,便于文件系统组织、管理。上传的文件,会被切分成一个个的block,分别存储在不同DN上。 默认每个block有三份,当一个block失效,则可以从副本中拿到数据。

Client

  • 与NN交互,完成对分布式文件的读写等HDFS操作

NN-namenode

  • 在NN内存中,存储HDFS元数据
  • 每个文件、目录、block的元数据,大约占150Byte字节
  • 元数据信息包括
    • 文件属性-时间、大小、所属组、权限
    • block及副本位置
  • 元数据两种形式
    • edits log:记录客户端对HDFS的所有更改记录,内容包括,事务ID、编辑动作
    • fsimage:元数据的镜像文件,

DN-datanode

  • 存储block及block元数据
  • 元数据信息,包括数据库长度、校验和、时间戳

SNN-SeconddaryNameNode

  • 合并编辑日志和fsimage
  • 每次合并是checkpoint(检查点)操作
  • 检查点触发可以是时间、或事务数量

心跳机制

  • NN启动时候,开启ipc server
  • DN向NN发送心跳(3秒钟一次心跳)
  • NN向DN发送指令
  • NN长时间没收到DN的心跳,则认为该节点不可用(10分钟)
  • DN周期性向NN上报当前DN的块状态报告(block report),块状态包含DN的数据块列表(6小时)

心跳作用

  • 通过心跳,NN向DN发送指令
  • 可以判断DN是否在线
  • HDFS集群启动时,NN会等待DN进行block上报,block上报时,如果99.9%的block满足最小副本上报数,则进群退出安全模式
  • 通过block report,NN可以知道DN的存储状况,包括磁盘利用率、块列表
  • 当集群扩容时,根据DN上报的存储状况,进行重新分配块存储,使各个DN更加均衡
  • 手动负载均衡?下边命令无需重启hadoop
  • 停止负载均衡

机架感知

Hadoop在设计时考虑到数据的安全与高效,数据文件默认在HDFS上存放三份,存储策略为:

  • 第一个block副本放在客户端所在的数据节点里(如果客户端不在集群范围内,则从整个集群中随机选择一个合适的数据节点来存放);
  • 第二个副本放置在与第一个副本所在节点相同机架内的其它数据节点上;
  • 第三个副本放置在不同机架的节点上;

而Hadoop是根据机架感知来完成这种存储策略的,机架感知默认是不开启的,并且通过配置将正确的IP地址和机器映射到对应机架上,来完成HDFS按照正确的存储策略进行存储数据,以节省网络传输。

04—HDFS读写流程

  • 客户端 与 NN 交互
  • NN 将 block1 返回 要写到的DN返回给客户端
  • 客户端根据DN列表创建管道
  • 先写chunk(512b) 再写校验和(4b) 写到 packet(64kb)中,将packet写满,组成data queue
  • 从队列中依次去packet,发送到数据传输管道之后,在放到ack queue
  • 在管道内依次 packet形式
  • DN节点依次校验校验和是否正确,最后到ack queue 最后验证校验和,成功删除ack queue;失败通过ack queue回填,重新发送
  • 全部发送完,管道关闭
  • 客户端 所有 block 发送完毕, 发送空 packet
  • 流关闭

  • 客户端 调用 open
  • get block local 返回InputStream (包含所有block DN位置)
  • 就近原则建立连接,读文件,读完之后关闭
  • 都完成之后,关闭流

HDFS集群在读写数据时,有可能会发送DN异常,HDFS会拥有一种容错机制,来保证流程继续进行下去:

写异常,也就是管道中有某个DN异常,会将所有写的数据重新加入到data queue,重新向NN申请新的Block位置,重新构建管道,进行重传。

读异常,可能是连接异常,由于NN返回的是DN列表,将会使用副本重新建立连接,读取数据;也可能是读取数据异常,仍然是读取副本数据。而发生读异常时,客户端会将问题反馈给NN,以便NN做协调和恢复。

05—HDFS的高可用与联邦

HA

HDFS的HA(High Availability)架构,设置两个NN(一主一备),一个状态是Active(活跃),另一个状态是Standby(待命),当Active节点发生故障时,Standby节点会立即切换成Active状态。为了解决Active与Standby的元数据保持一致,通常设置一个共享存储系统,用来实现状态一致,即Standby会实时同步Active发生变化时,写到QJM的更新数据。为了解决Standby可以快速切换成Active,HA架构要求所有DN需要同时配置Active和Standby两个NN地址,所以每次都会同时和两个NN进行心跳和数据上报。

联邦

虽然HDFS-HA保证了NN的故障恢复,避免了NN的单点问题,但集群中单个活动的NN也会成为集群瓶颈,所以需要对NN进行横向扩展以支撑更大的集群容量。联邦机制允许添加NN节点,每个NN单独负责一部分命名空间,每个NN仍然保持了HA结构(一主一从),每组NN之间相互独立,DN集群作为所有NN的公共存储,所以需要DN向所有的NN进行心跳和数据上报。

快照

  • 原理
    • 快照用于HDFS集群的数据备份,可以在用户误删除或故障时进行数据恢复;
    • 可对整个集群或某个目录进行拍摄快照;
    • 快照文件中只是记录了block列表和文件大小,不会做任何数据拷贝;
  • 操作:
    • 设置允许\禁用快照
    • 创建快照
    • 查看快照
    • 重命名、删除快照
    • 用快照恢复误删除数据

文件压缩

文件压缩有两个好处:减少存储文件所需要的存储空间;加速数据在网络和磁盘中的传输速度。

小文件处理

HDFS不适合存储小文件,不过HDFS针对小文件提供了相应的解决方案,其中比较重要的是Sequence Files方案

  • 采用key-value形式,文件名称为key,内容为value;
  • 然后,以Record记录形式存在,将所有小文件存储起来;
  • 支持压缩
    • 压缩Record的Value
    • 将多个Record压缩成一个Block

1、https://hadoop.apache.org/docs/r2.7.7/hadoop-project-dist/hadoop-hdfs/HdfsUserGuide.html

2、https://hadoop.apache.org/docs/r2.7.7/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html

3、https://blog.csdn.net/qq_38262266/article/details/79171524

4、《Hadoop权威指南》

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 BanzClub 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档