热门标签 | 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节点吗?


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


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





推荐阅读
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 从高级程序员到CTO的4次能力跃迁!如何选择适合的技术负责人?
    本文讲解了从高级程序员到CTO的4次能力跃迁,以及如何选择适合的技术负责人。在初创期、发展期、成熟期的每个阶段,创业公司需要不同级别的技术负责人来实现复杂功能、解决技术难题、提高交付效率和质量。高级程序员的职责是实现复杂功能、编写核心代码、处理线上bug、解决技术难题。而技术经理则需要提高交付效率和质量。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
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社区 版权所有