HDFS的那些事儿

前言

       学习呢要善于总结,善于发现问题,都知道大数据很火,但是大数据、分布式为什么火呢?很少数人能说出他的有点,大部分都是在因为在coding而coding,没有体会理解它真正的作用和价值,发这篇文章呢,就是为了让大家更加深刻的理解HDFS的优势及诞生的背景。

背景

       随着物联网、社交网络、云计算等技术不断融入我们的生活以及现有的计算能力、存储空间、网络带宽的高速发展,人类积累的数据在互联网、通信、金融、商业、医疗等诸多领域不断地增长和累积。互联网搜索引擎支持的数十亿次web搜索每天处理数万TB字节数据。全世界通信网的主干网上一天就有万TB字节数据在传输。现代医疗行业如医院、药店等也都每天产生庞大的数据量如医疗记录、病人资料、医疗图像等。数据的量级不断升级、应用的不断深入和大数据不可忽视的价值让我们不得不探索如何才能让我们更好的受益于这些数据。总结一句话,随着社会的发展,人类的进步,网络带来的数据剧增,普通的数据库已经无法满足其要求和存储,这个时候诞生了大数据。

      随着Google的三篇论文的诞生,从而诞生了Hadoop。hadoop主要分两块下面先来介绍一下HDFS,分布式文件存储系统。

HDFS分布式文件存储系统

HDFS即Hadoop分布式存储系统,是一个抽象层,底层依赖很多独立的服务器,对外提供统一的文件管理功能。

用户保存文件 /a/b/xxx.avi 时,HDFS 首先会把这个文件进行分割,如下图分为 4 块,然后分别存放到不同的服务器上。

为了保证文件的可靠性,HDFS 会把每个文件块进行多个备份,一般情况下是 3 个备份。

总接起来就是一句话

大数据量的数据怎么办?虽然一台服务器或者电脑达不到这种存储,但是可以把大数据集拆分为N个小数据集来进行操作存储,计算不就可以了吗?这就是HDFS的核心思想。

HDFS基础架构

HDFS 是一个主从 Master/Slave 架构。一个 HDFS 集群包含一个 NameNode和多个DataNode。

NameNode

文件的元数据采用集中式存储方案存放在 NameNode 当中。NameNode 负责执行文件系统命名空间的操作,也负责将数据块映射到对应的 DataNode 中。

DataNode

是文件系统的工作结点,它们根据需要存储据块,并且定期向 NameNode 发送他们所存储的块的列表。文件数据块本身存储在不同的 DataNode 当中,DataNode 可以分布在不同机架上。 DataNode 负责服务文件系统客户端发出的读/写请求。DataNode 同时也负责接收 NameNode 的指令来进行数据块的创建、删除和复制。

Client

HDFS 的 Client 会分别访问 NameNode 和 DataNode 以获取文件的元信息及内容。HDFS 集群的 Client 将直接访问 NameNode 和 DataNode,相关数据会直接从 DataNode 传送到客户端。

HDFS写数据过程

Client调用DistributedFileSystem对象的create方法,创建一个文件输出流(FSDataOutputStream)对象

通过DistributedFileSystem对象与Hadoop集群的NameNode进行一次RPC远程调用,在HDFS的Namespace中创建一个文件条目。

通过FSDataOutputStream对象,向DataNode写入数据,数据首先被写入FSDataOutputStream对象内部的Buffer中,然后数据被分割成一个个Packet数据包

以Packet最小单位,基于Socket连接发送到按特定算法选择的HDFS集群中一组DataNode(正常是3个)中的一个节点上,在这组DataNode组成的Pipeline上依次传输Packet

这组DataNode组成的Pipeline反方向上,发送ack,最终由Pipeline中第一个DataNode节点将Pipeline ack发送给Client

完成向文件写入数据,Client在文件输出流(FSDataOutputStream)对象上调用close方法,关闭流

调用DistributedFileSystem对象的complete方法,通知NameNode文件写入成功。

具体流程图如下所示:
   

HDFS高可用

Active 和 Standby NameNode
两台 NameNode 形成互备,一台处于 Active 状态,为主 NameNode,另外一台处于 Standby 状态,为备 NameNode,只有主 NameNode 才能对外提供读写服务。

主备切换控制器ZKFailoverController
对NameNode的主备切换进行总体控制,能及时检测到NameNode 的健康状况,在主NameNode故障时借助Zookeeper实现自动的主备选举和切换。

Zookeeper 集群
为上面的主备切换控制器提供主备选举支持。

共享存储系统(JN)
共享存储系统是实现NameNode 的高可用最为关键的部分,共享存储系统保存 HDFS 的元数据。通过一组称作JournalNodes的独立进程进行相互通信。当active状态的NameNode的命名空间有任何修改时,会告知大部分的JournalNodes进程。standby状态的NameNode有能力读取JN中的变更信息,并且一直监控Edit Log的变化,把变化应用于自己的命名空间。

DataNode 节点
除了通过共享存储系统共享 HDFS 的元数据信息之外,主 NameNode 和备 NameNode 还需要共享 HDFS 的数据块和 DataNode 之间的映射关系。DataNode 会同时向主 NameNode 和备 NameNode 上报数据块的位置信息。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MrZhangBaby

请博主喝杯奶茶

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值