热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HDFS的文件上传下载的核心原理

1,什么是大数据?什么是大数

1,什么是大数据?


什么是大数据?先来一组直观的数据感受下什么是大数据:    

    

1)纽约证交所每天产生的交易数据大约是4TB到5TB之间;

2)截止到2015年7月,微信朋友圈每天的发表量(包括赞和评论)超过10亿,浏览量超过100亿;

3)微博每天7500万条微博发布,每条可输入140字,总共105亿字,1G可存储5亿字,每天就需21G的空间;

4)百度网盘网盘用户数量达到2亿,每个人可有2TB的存储空间,可见存储数据量之大。


可见,大数据就是数据量非常大,大到一台计算机的容量无法存储。那么,这么大的数据量该如何存储呢?


2,大数据如何存储?


举个例子,假如我们用水桶盛水,当你不断往水桶注水,那么水满了自然就会溢出。此时为了不让水溢出,那么你自然会添加水桶来盛水。你会根据水量大小来计算需要多少水桶来盛水,当不够水桶了,你会添加水桶。同理,当数据量非常大时,大到一台计算机无法存储时,此时可以用两台计算机来存储,两台不计算机不够存储,扩展至三台计算机来存储。。。于是,这就涉及分布式存储了。


分布式存储中最有名且目前用的最多的当属Hadoop的HDFS(Hadoop Distributed File System),思想起源于谷歌的三篇论文之一的GFS(The Google File System)。


3,什么是Hadoop?


Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。Hadoop核心组件主要包括HDFS,YARN和MapReduce,而Hadoop的框架最核心的设计就是HDFS和MapReduce,其中HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。另外YARN是 Hadoop 的资源调度管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度。


4,Hadoop生态系统相关组件


图1

图1是Hadoop生态系统相关组件即目前大数据用到的相关技术,从中可以看到HDFS处于Hadoop生态系统最底层,即为大数据相关组件提供存储。其中Hive的数据是存储在HDFS上的,因为Hive的表是一张逻辑表,这张表的定义的描述了表数据与HDFS之间的映射关系;Hbase的底层存储机制也是HDFS,一些流计算框架比如Spark Streaming,Storm和FLink的经过流式计算后也可以将数据输出到HDFS上存储。


5,什么是HDFS?


既然HDFS能提供如此强大的存储能力,那么HDFS究竟是何方神圣?


当数据量非常大,大到一台电脑无法存储时,此时就得把数据拆分成几部分,然后分别存储在不同的计算机上,管理网络中跨多台计算机存储的文件系统即为分布式文件系统(HDFS)。


HDFS可以存储各种各样的文件,比如text文本文件,csv文件,二进制文件等等。


6,HDFS的核心概念


学习HDFS的核心原理,那么必须从其的核心组件学起,HDFS涉及的核心概念主要包含了数据块,NameNode和DataNode。


数据块:平时我们用的磁盘一般都有数据块的大小,数据块一般是文件读写的基本单位,同样,HDFS也有默认的数据块,HDFS的数据块大小是128M.


NameNode:HDFS一般是一个由NameNode和DataNode组成的主从架构分布式集群,其中NameNode就相当于主节点,管理文件系统名称空间,元数据和控制客户端文件的访问。


DataNode:DataNode就是存储数据的节点,一个文件可以拆分成几份分别存储在不同的DataNode上。


7,我们如何将文件上传至HDFS上呢?


既然明白了HDFS是这么一个好东西,当数据量非常大时,我们可以通过扩展机器的方式来提高存储量。那么,此时我们将如何把文件上传至HDFS上呢?

请看下图,感受下HDFS上传文件的核心流程。


图2

根据上图,我给大家梳理一些核心流程:


1,请求上传300M的xxx.mp4文件,即hdfs控制台上敲入hdfs dfs -put xxx.mp4 filedir命令即可上传xxx.mp4文件。


2,随后HDFS客户端创建DistrubutedFileSystem对象。


3,然后DistrubutedFileSystem对象与NameNode节点建立RPC通信,并生成一个NameNode代理对象NameNodeProxy。


4,NameNode创建文件相关的元数据信息并保存在内存中,保存的元数据说白了就是xxx.mp4这个文件分为几个数据块来存储,每隔数据块存储在哪个DataNode上。如下图:

这里的元数据表示xxx.mp4文件大小是300M,而HDFS的DataNode的数据块大小默认是128M,因此xxx.mp4无法存储到一个DataNode上。因此就需要将xxx.mp4文件分割成三部分:part-0(128M),part-1(128M)和part-3(44M)。为了保证某个DataNode节点宕机数据不丢失,于是采用冗余的策略,即一份文件在三个DataNode中存储。以拆分的part-0文件为例,part-0文件最终会写入DataNode1,DataNode2DataNode3。


5,因为元数据是保存在内存中的,当元数据满了则写入磁盘。


6,NameNode写完元数据后,此时会将元数据相关信息返回给HDFS客户端。


7,HDFS客户端获取NameNode返回的元数据后,创建FSDataOutputStream对象。


8,然后HDFS客户端打开OutputStream,根据元数据信息开始写数据。这里的元数据即xxx.mp4这个文件分为几个数据块来存储,每隔数据块存储在哪个DataNode上,前面说过。


9,因此,有了元数据的指引,FSDataOutputStream对象将所有数据对象写入DataNode中。以写拆分的part-0文件为例,FSDataOutputStream对象首先会将part-0文件写入DataNode1中


10,为了保证数据高可用,然后DataNode1会将part-0文件水平复制到DataNode2,再然后DataNode2再将part-0文件复制到DataNode5中,见下图红框部分:



11,最后一个节点DataNode5接收完毕part-0文件后,那么就会返回ACK应答给DataNode2,同样的DataNode2会返回应答给DataNode1,最终给你DataNode1会将应答返回给HDFS客户端,见下图红框部分:




12,根据上面9,10,11步骤的写part-0文件过程,同理FSDataOutputStream对象将part-1,part-2对象写入datanode,直到写完数据为止。


因此经过上面的几个步骤,HDFS文件上传的原理就给大家说明白了。


8,明白了HDFS的文件上传过程,那么我们如何将文件从HDFS上下载下来呢?


既然你已经明白了HDFS文件的上传过程,那么HDFS文件的下载过程其实就是HDFS文件上传过程的逆过程而已,不过有一点需要注意的是,下载的过程HDFS会比较智能,会选择文件存储最近的DataNode节点来下载文件,这是因为网络传输是需要成本的。详细步骤这里不再累述,详情请见下图:


好了,HDFS的来源,文件上传及下载过程就给大家说明白了。


最后留两道思考题请大家思考:


1,在生产部署中,高可用非常最重要。那么HDFS集群如何保证高可用呢?万一NameNode节点挂了怎么办?

2,HDFS在文件下载过程中,若存储文件的某个DataNode节点挂了怎么办?此时还能下载完整的文件吗?还有,下次下载文件时,HDFS客户端还会访问出故障的DataNode节点吗?


答案将在下期为大家揭晓,敬请关注。


由于作者水平有限,若文中有错误还请提出,最后表示感谢。





推荐阅读
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • 本文旨在解决 MySQL 无法连接到 localhost 的常见问题,并提供详细的步骤来确保 MySQL 服务正确启动和配置。 ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • Framework7:构建跨平台移动应用的高效框架
    Framework7 是一个开源免费的框架,适用于开发混合移动应用(原生与HTML混合)或iOS&Android风格的Web应用。此外,它还可以作为原型开发工具,帮助开发者快速创建应用原型。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 类加载机制是Java虚拟机运行时的重要组成部分。本文深入解析了类加载过程的第二阶段,详细阐述了从类被加载到虚拟机内存开始,直至其从内存中卸载的整个生命周期。这一过程中,类经历了加载(Loading)、验证(Verification)等多个关键步骤。通过具体的实例和代码示例,本文探讨了每个阶段的具体操作和潜在问题,帮助读者全面理解类加载机制的内部运作。 ... [详细]
  • 通过优化动态网络Cookies的全网互通机制,实现了用户在任意子站点的登录和注销操作均能同步至整个网络。具体实现涉及对三个关键文件的修改:首先,在`incDv_ClsMain.asp`中定位并调整`Response.Cookies`的相关设置;其次,更新`global.asa`以确保会话状态的一致性;最后,修改`login.asp`以支持跨域认证。这一改进不仅提升了用户体验,还增强了系统的安全性和可靠性。 ... [详细]
  • 本文详细解析了 Android 系统启动过程中的核心文件 `init.c`,探讨了其在系统初始化阶段的关键作用。通过对 `init.c` 的源代码进行深入分析,揭示了其如何管理进程、解析配置文件以及执行系统启动脚本。此外,文章还介绍了 `init` 进程的生命周期及其与内核的交互方式,为开发者提供了深入了解 Android 启动机制的宝贵资料。 ... [详细]
  • 技术日志:深入探讨Spark Streaming与Spark SQL的融合应用
    技术日志:深入探讨Spark Streaming与Spark SQL的融合应用 ... [详细]
  • HTML5大文件传输技术深度解析与实践分享
    本文深入探讨了HTML5在Web前端开发中实现大文件上传的技术细节与实践方法。通过实例分析,详细讲解了如何利用HTML5的相关特性高效、稳定地处理大文件传输问题,并提供了可供参考的代码示例和解决方案。此外,文章还讨论了常见的技术挑战及优化策略,旨在帮助开发者更好地理解和应用HTML5大文件上传技术。 ... [详细]
  • 本书《.NET Core 2.* 开发者指南》是面向开发者的全面学习与实践手册,涵盖了从基础到高级的各个层面。书中详细解析了 .NET Core 的核心概念,包括如何创建 .NET Core 网站,并通过视频教程直观展示操作过程。此外,还深入探讨了 Startup 类的作用、项目目录结构的组织方式以及如何在应用中使用静态文件等内容。对于希望深入了解 .NET Core 架构和开发技巧的开发者来说,本书提供了丰富的实践案例和详尽的技术指导。 ... [详细]
author-avatar
阿什顿安抚_343
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有