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

新技术_新技术层出不穷,HDFS还是存储的王者吗?

篇首语:本文由编程笔记#小编为大家整理,主要介绍了新技术层出不穷,HDFS还是存储的王者吗?相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了新技术层出不穷,HDFS还是存储的王者吗?相关的知识,希望对你有一定的参考价值。





Google大数据“三驾马车”的第一驾是GFS(Google 文件系统),而Hadoop的第一个产品是HDFS(Hadoop分布式文件系统),可以说分布式文件存储是分布式计算的基础,由此可见分布式文件存储的重要性。如果我们将大数据计算比作烹饪,那么数据就是食材,而Hadoop分布式文件系统HDFS就是烧菜的那口大锅。


厨师来来往往,食材进进出出,各种菜肴层出不穷,而不变的则是那口大锅,大数据也是如此。这些年来,各种计算框架、各种算法、各种应用场景不断推陈出新,让人眼花缭乱,但是大数据存储的王者依然是HDFS。


为什么HDFS的地位如此稳固呢?在整个大数据体系中,最宝贵、最难以代替的资产就是数据,大数据技术所有的一切都要围绕数据展开。HDFS作为最早的大数据存储系统,存储着宝贵的数据资产,各种新的算法、框架要想得到广泛使用,必须首先支持HDFS,这样才能获取已经存储在里面的数据。所以大数据技术越发展,新技术越多,HDFS得到的支持就越多,人们就越离不开HDFS。HDFS也许不是最好的大数据存储技术,但依然是最重要的大数据存储技术。


我们从HDFS的原理开始,看看HDFS是如何实现大数据高速、可靠的存储和访问的。


HDFS的设计目标是管理数以千计的服务器、数以万计的磁盘,将如此大规模的服务器计算资源当成一个单一的存储系统进行管理,并给应用程序提供PB级的存储容量,让应用程序像使用普通文件系统一样存储大规模的文件数据。


如何设计一个这样的分布式文件系统?其实思路很简单。


前面讨论过RAID磁盘阵列存储,RAID将数据分片后在多块磁盘上进行并发读写访问,从而提高了存储容量、加快了访问速度,并通过数据的冗余校验提高了数据的可靠性,即使某块磁盘损坏也不会丢失数据。将RAID的设计理念扩大到整个分布式服务器集群,就产生了分布式文件系统,Hadoop分布式文件系统的核心原理就是如此。


和RAID在多个磁盘上进行文件存储及并行读写的思路一样,HDFS是在一个大规模分布式服务器集群上,对数据分片后进行并行读写及冗余存储。因为HDFS可以部署在一个比较大的服务器集群上,集群中所有服务器的磁盘都可供HDFS使用,所以整个HDFS的存储空间可以达到PB级的容量。



图2.3是HDFS的架构图,从中可以看到HDFS的关键组件有两个,一个是DataNode,一个是NameNode。


DataNode负责文件数据的存储和读写操作,HDFS将文件数据分割成若干数据块(Block),每个DataNode存储一部分数据块,这样文件就分布存储在整个HDFS服务器集群中。应用程序客户端(Client)可以并行对这些数据块进行访问,从而使得HDFS可以在服务器集群规模上实现数据并行访问,极大地提高访问速度。


在实践中,HDFS集群的DataNode服务器会有很多台(规模一般在几百台到几千台),每台服务器都配有数块磁盘,整个集群的存储容量从几PB到数百PB不等。


NameNode负责整个分布式文件系统的元数据(MetaData)(也就是文件路径名、数据块的ID以及存储位置等信息)管理,相当于操作系统中文件分配表(FAT)的角色。HDFS为了保证数据的高可用,会将一个数据块复制为多份(默认情况为3份),并将多份相同的数据块存储在不同的服务器、甚至不同的机架上。这样当有磁盘损坏,或者某个DataNode服务器宕机、甚至某个交换机宕机,导致其存储的数据块不能访问时,客户端会查找备份的数据块进行访问。

新技术层出不穷,HDFS还是存储的王者吗?



图2.4是HDFS数据分块存储示意图。对于文件/users/sameerp/data/part-0,复制备份数设置为2,存储的Block ID分别为1、3。Block 1的两个备份存储在DataNode 0和DataNode 2两个服务器上,Block 3的两个备份存储在DataNode 4和DataNode 6两个服务器上,上述任何一台服务器宕机后,每个数据块都至少还有一个备份,不会影响对文件/users/sameerp/data/part-0的访问。


和RAID一样,将数据分成若干数据块后存储到不同服务器上,可以实现数据大容量存储,并且不同分片的数据可以并行读/写操作,实现数据的高速访问。HDFS的大容量存储和高速访问相对比较容易实现,但是HDFS如何保证存储的高可用性呢?


我们尝试从不同层面来讨论一下HDFS的高可用性设计。


1.数据存储故障容错


磁盘介质在存储过程中受环境或者老化影响,其存储的数据可能会出现错乱。HDFS的应对措施是,对于存储在DataNode上的数据块,计算并存储校验和(CheckSum)。在读取数据的时候,重新计算读取出来的数据的校验和,如果校验和不正确就输出异常信息,应用程序捕获异常信息后就到其他DataNode上读取备份数据。


2.磁盘故障容错


如果DataNode监测到本机的某块磁盘损坏,就将该块磁盘上存储的所有Block ID报告给NameNode,NameNode检查这些数据块在哪些DataNode上有备份,并通知相应的DataNode服务器将对应的数据块复制到其他服务器上,以保证数据块的备份数满足要求。


3.DataNode故障容错


DataNode会通过心跳消息和NameNode保持通信,如果DataNode超时未发送心跳消息,NameNode就会认为这个DataNode已经宕机失效,并立即查找该DataNode上存储了哪些数据块以及这些数据块还存储在哪些服务器上,随后通知这些服务器再复制一份数据块到其他服务器上,保证HDFS存储的数据块备份数符合用户设置的数目,这样即使再出现服务器宕机,也不会丢失数据。


4.NameNode故障容错


NameNode是整个HDFS的核心,记录着HDFS文件分配表信息,所有的文件路径和数据块存储信息都保存在NameNode上,如果NameNode发生故障,将导致整个HDFS系统集群都无法使用;如果NameNode上记录的数据丢失,则整个集群中所有DataNode存储的数据也就没用了。所以,NameNode具备高可用的容错能力非常重要。NameNode采用主从热备的方式提供高可用服务,如图2.5所示。

新技术层出不穷,HDFS还是存储的王者吗?



集群部署两台NameNode服务器,一台作为主服务器提供服务,一台作为从服务器进行热备份,两台服务器通过ZooKeeper选举,决定谁是主服务器。


正常运行期间,主从两台NameNode服务器之间通过一个共享存储系统Shared Edits来同步文件系统的元数据信息。当主NameNode服务器宕机时,从NameNode会通过ZooKeeper升级成为主服务器,并保证HDFS集群的元数据信息,也就是文件分配表信息完整一致。


对于一个软件系统而言,性能差一点,用户也许可以接受;使用体验差,也许也能忍受;但是如果可用性差,经常出故障导致不可用,那就比较麻烦了;如果丢失重要数据,那么开发工程师绝对是摊上大事了。


而分布式系统可能出故障的地方又非常多,内存、CPU、主板、磁盘会损坏,服务器会宕机,网络会中断,机房会停电……所有这些都可能会导致软件系统的不可用、甚至数据永久丢失。


所以在设计分布式系统的时候,软件工程师一定要绷紧可用性这根弦,思考在各种可能故障的情况下,如何保证整个软件系统依然是可用的。


一般说来,常用的保证系统可用性的策略有冗余备份、失效转移、限流和降级。


(1)冗余备份。任何程序、任何数据,都至少要有一个备份,也就是说程序至少要部署到两台服务器,数据至少要备份到另一台服务器上。此外,稍有规模的互联网企业都会建设多个数据中心,数据中心之间互相备份,用户请求可能会被分发到任何一个数据中心,即所谓的异地多活,在遭遇地域性的重大故障和自然灾害的时候,依然保证应用的高可用性。


(2)失效转移。当要访问的程序或者数据无法访问时,需要将访问请求转移到备份的程序或者数据所在的服务器上,即失效转移。失效转移需要注意的是失效的鉴定,像NameNode这样主从服务器管理同一份数据的场景,如果从服务器错误地以为主服务器宕机而接管集群管理,会出现主从服务器一起对DataNode发送指令的情况,进而导致集群混乱,也就是所谓的“脑裂”。这也是这类场景选举主服务器时,引入ZooKeeper的原因(ZooKeeper的工作原理将在后面专门分析)。


(3)限流和降级。当大量的用户请求或者数据处理请求到达的时候,由于计算资源有限,可能无法处理如此大量的请求,进而导致资源耗尽、系统崩溃。这种情况下,可以拒绝部分请求,即限流;也可以关闭部分功能,降低资源消耗,即降级。限流是互联网应用的常备功能,因为根本无法预料超出负载能力的访问流量在何时会突然到来,所以必须提前做好准备,当遇到突发高峰流量时,就可以立即启动限流。降级通常是为可预知的场景准备的,比如电商的“双十一”促销,为了保障促销活动期间应用的核心功能能够正常运行,比如下单功能,可以对系统进行降级处理,关闭部分非重要功能,比如商品评价功能等。


下面我们总结HDFS是如何通过大规模分布式服务器集群实现数据的大容量、高速、可靠存储、访问的。


(1)将文件数据以数据块的方式进行切分,数据块可以存储在集群任意DataNode服务器上,所以HDFS存储的文件可以非常大,一个文件理论上可以占据整个HDFS服务器集群上的所有磁盘,实现大容量存储。


(2)HDFS一般的访问模式是通过MapReduce程序在计算时读取,MapReduce对输入数据进行分片读取,通常一个分片就是一个数据块,给每个数据块分配一个计算进程,这样就可以同时启动很多进程对一个HDFS文件的多个数据块进行并发访问,从而实现数据的高速访问。


(3)DataNode存储的数据块会进行复制,使每个数据块在集群里有多个备份,保证了数据的可靠性,并通过一系列的故障容错手段实现HDFS系统中主要组件的高可用性,进而保证数据和整个系统的高可用性。


本文节选自《大数据技术架构:核心原理与应用实践》,想了解更多大数据技术架构的内容,推荐阅读此书。
























    



    



    



    



    



    



    



    



    



    



    



    



    



    



    








你好,我是王知无,一个大数据领域的硬核原创作者。


做过后端架构、数据中间件、数据平台&架构&、算法工程化。


专注大数据领域实时动态&技术提升&个人成长&职场进阶,欢迎关注。


















推荐阅读
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • 本文总结了初学者在使用dubbo设计架构过程中遇到的问题,并提供了相应的解决方法。问题包括传输字节流限制、分布式事务、序列化、多点部署、zk端口冲突、服务失败请求3次机制以及启动时检查。通过解决这些问题,初学者能够更好地理解和应用dubbo设计架构。 ... [详细]
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
  • Hadoop源码解析1Hadoop工程包架构解析
    1 Hadoop中各工程包依赖简述   Google的核心竞争技术是它的计算平台。Google的大牛们用了下面5篇文章,介绍了它们的计算设施。   GoogleCluster:ht ... [详细]
  • mapreduce源码分析总结
    这篇文章总结的非常到位,故而转之一MapReduce概述MapReduce是一个用于大规模数据处理的分布式计算模型,它最初是由Google工程师设计并实现的ÿ ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
author-avatar
-1的人生
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有