【大数据】GFS,大数据技术的基石,分布式文件系统的鼻祖

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 【大数据】GFS,大数据技术的基石,分布式文件系统的鼻祖

1.概述

1.1.分布式文件系统在大数据中的基石地位

分布式文件系统是整个大数据技术的基础,是大数据技术栈的核心组件,其解决了海量数据的管理问题,可以说没有分布式文件系统就没有大数据技术。其中作为GFS,google file system,是一个大型的分布式存储系统,GFS的架构是分布式文件系统最经典的架构,目前市面上很多分布式存储系统都是参照的GFS来实现的,比如:HDFS。万变不离其宗,可以说弄懂GFS,体会其思想,就掌握了当前市面上的所有的分布式文件系统。


GFS最先出现在03年谷歌发表的论文中,该论文很短,很像一篇设计文档,其中详细论述了谷歌如何设计以及落地实现自己的分布式文件系统的。该论文直接在网上搜索就能搜到。

1.1.谷歌当初面对的问题

GFS之所以出现是因为Google当时的业务确实碰见了需要进行海量数据存储的需求,当时谷歌设计GFS时面对的需求可以概括为:

  1. 数据量大,数据格式复杂,有大文件也有小文件。
  1. 运行在普通机器上,失效是常态。
  2. 对吞吐量要求很高,实时性要求不高。

针对以上需求,GFS给出的一整套解决办法合起来就是GFS。

1.2.谷歌如何解决这些问题的

1.数据量大,数据格式复杂,有大文件也有小文件

数据量大,一台机器装不下,必须用,布式集群来装,集群中每台机器上存放的数据量都很大。这就意味着什么?


首先一份文件最好是被分成几部分放在不同节点上的,这样可以并发的去读,能拉高吞吐量。


其次单节点上属于同一份文件的数据最好是连续存放的,这样不用不需要在进行IO的时候需要跳几下才能拼凑齐数据。


也就是说用来存储大数据的分布式文件系统最好是顺序读写的,而不是随机读写的。


这里扩展的聊一下随机读写和顺序读写的概念:


顺序读写 (Sequential Read/Write): 顺序写,是指数据连续地写入到文件中,通常是在磁盘上相邻的存储区域,形成连续的数据块。顺序读,是指按照文件内数据存储的物理顺序连续地读取数据块。 顺序读写模式下,磁头不需要频繁移动,减少了寻道时间,比起随机读写来说速度要快。


随机读写 (Random Read/Write): 随机写,是指数据以非连续的方式写入文件的不同位置,每次写入操作可能涉及到磁头在磁盘上的大幅度跳跃。随机读:是指不连续地从文件的不同位置读取数据块,每个读取请求可能会跳转到文件内的任意位置。随机读写速度要远低于顺序读写。


最后谷歌总结之后在文件读写上给出了最后的答案是:


为了保证性能,只支持顺序读写,也就是说在数据操作上最多就支持读写操作以及追加操作,不支持修改数据这一类随机读写操作。


GFS是如何实现顺序读写的?


答:分片


将存储空间分为一个个大小固定的片,一个文件会被分为一个或者多个片,在逻辑上HDFS中一个块中存放的一定是一个文件,不可能一个片中存放着来自两个文件的内容。这样在块中文件数据一定是顺序读写的。当要访问一个完整的文件的时候,我们只需要去各个节点上将属于它的块全部找出来即可。集群中会有地方统一记录哪个文件分为了哪些片存在哪些节点上。

2.运行在普通机器上,失效是常态

这其实就是容错问题,由于运行在普通机器上,机器的数量也多,因此结点失效是常态,所以将分片再进行复制,存储到不同的结点上去。也就是一个分片会存在多个副本存在不同的节点上。


当然分片会带来一致性问题:


一致性问题是复制引出的问题,要进行切片的复制就会牵扯到一致性问题,如何保证分布式存储的所有切片副本是一致的这是个问题。但是“强一致性”过于拉低集群整体性能影响吞吐量,因此GFS采用了“弱一致性”。也是由GFS第一次提出了“弱一致性”是可以接受的,这有悖于当初学术界的主流观点,当时学术界的主流观点是系统必须呈现出良好的状态,即具有“强一致性”。


GFS,google file system,是一个大型的分布式存储系统,GFS的架构是分布式文件系统最经典的架构,目前市面上很多分布式存储系统都是参照的GFS来实现的,比如:HDFS。

总结一下,GFS在数据读写上采用的机制:

一个文件分为多个片,为了容错一个片被分为多个副本,读写中采用最终一致性。

以上其实就是整个GFS设计的理论核心,接下来就来看一下落地的实现是什么样子的。

2.系统架构


一个GFS集群包含一个Master节点、多个Chunk Server服务器,多个Client。


Chunk Server:


存储文件时,GFS将文件分割成固定大小(64MB)的Chunk,在Chunk创建时,Master服务器会给每个Chunk分配一个不变的、全球唯一的64位标识——Handle句柄,Chunk Server把Chunk以普通Linux文件的形式保存在本地硬盘上,并且根据指定的Handle句柄和字节范围来读写数据。为了避免节点异常带来的数据损坏,GFS把每个Chunk以副本Replica的方式冗余备份到不同的Chunk Server服务器上。默认使用3副本策略。


Master负责维护整个集群的元数据,Master节点通过心跳信息周期性地跟每一个Chunk Server服务器通信,发送指令到各个Chunk Server服务器,并接收各个Chunk Server服务器的状态信息。


Master


master上有两张重要的表:


文件名到存储该文件的所有chunk handle(单个chunk)之间的映射。


存放每个chunk handle(由于复制的关系同一个chunk handle存在多份,存在不同的服务器上)的chunk server之间的列表,以及chunk server的优先级(从哪个里面优先读)、chunk handle的版本号、chunk handle的过期时间。


master上的这些数据都存放在内存中,为了方式宕机丢失数据,master上会有log,log存放在磁盘中,log种详细记录了数据操作,master重启时会加载磁盘中的log,通过重写一遍日志中的操作来加载数据。


Client


Client客户端代码以库的形式被链接到客户程序中,客户端代码实现了GFS文件系统的API接口函数、应用程序与Master节点和Chunk Server服务器通信、以及对数据进行读写操作。Client客户端与Master节点的通信只是获取元数据,所有的数据操作都是Client客户端直接跟Chunk Server服务器进行交互的,如上图所示,数据流和控制流是分开的,这样就避免了Master节点成为性能瓶颈

3.读操作

1.客户端将文件名和offset(偏移量)发给master

2.偏移量/64MB就可以知道是在哪个chunk里面,然后找到该chunk handle对应的chunk server列表

3.去primary chunk server读数据。读数据的时候会验证primary chunk server和master上存储的该chunk handle的版本号是否一致,如果不一致则去其余备份中进行读,如果所有备份中的版本号都和master上该chunk handle的版本号不一致,说明全局数据都不是正确的,直接返回读取失败。当然这里还有一个短期的cache策略,会将读到的数据短期缓存在cache中以应对短时间内多次读重复数据的情况。

4.写操作

  1. 客户端向 Master 询问目前哪个Chunk Server持有该Chunk的Lease
  2. Master 向客户端返回Primary Replica和其他Replica的位置
  3. 客户端将数据推送到所有的Replica上。Chunk Server会把这些数据保存在缓冲区中,等待所有 Replica 都接收到数据。
  1. 客户端发送写请求给 Primary,Primary 为来自各个客户端的修改操作选定执行序列号,并按顺序地应用于其本地存储的数据。
  2. Primary 将写请求转发给其他 Secondary Replica,Replica 们按照相同的顺序应用这些修改
  3. Secondary Replica 响应 Primary,示意自己已经完成操作。
  1. Primary 响应客户端,并返回该过程中发生的错误

为什么需要primary来通知其它结点一起写:

由于是在并发的工作环境下,会有多个client向各个chunk server发起写请求,请求到达各个chunk server的顺序不一定是相同的,如果直接由client通知让各个chunk server写,容易出现乱序。


chunk server A上的写入顺序是client A 、client B,chunk server B上写入的顺序是client B、client A。


通过primary来通知各个chunk server写,可以控制全局顺序都是一致的。


5.追加操作

说起追加操作就要先说一下GFS的顺序写问题:


GFS中所谓的顺序写是指一个chunk中的数据是顺序写的,但是chunk不一定是顺序的,比如一个视频它就可能被分成几个chunk来存储,这几个chunk不一定是连续存储的。当一个文件要多个chunk才能装下,那么这些chunk的顺序是由master来进行登记维护的。这样追加写操作就比较容易实现了,只要在存原有文件结尾的chunk中进行追加就行了,如果追加的内容还需要增加chunk才能装下,那么直接增加chunk然后将顺序关系上报给master即可。


下面是追加的具体过程:


追加是写操作里面的一种特殊情况,和新写不同的点在于,追加需要先定位到起始位置。


追加写分两种情况:


无primary


找master获取文件的最后一个chunk,继续在master去查找该chunk handle的chunk server列表,然后根据列表去所有chunk server里随机拿一个version和master上记录的最新version是一致的chunk server将其选为primary chunk server,更新version,再更新primary chunk server上的数据。


如果找不到version对的chunk server只能说明所有chunk server都和master失联已久或者除了其他状况,没有一个chunk server上的数据是对的,这时候拒绝写入即可。


有primary


找master获取文件的最后一个chunk,继续在master查找primary chunk server,比对primary chunk server上的version,一致则更新version,更新primary chunk server上的数据。不一致则接着向下找一个version一致的chunk server将其重新选举为primary chunk server,然后更新version、写数据。


如果一直找不到version匹配的chunk server,这时候拒绝写入即可。


6.数据一致性

由于GFS是分布式的原因,在文件的某一部分被修改后,它可能进入以下三种状态的其中之一:


客户端读取不同的 Replica 时可能会读取到不同的内容,那这部分文件是不一致的(Inconsistent)。


所有客户端无论读取哪个 Replica 都会读取到相同的内容,那这部分文件就是一致的(Consistent)。


所有客户端都能看到上一次修改的所有完整内容,且这部分文件是一致的,那么我们说这部分文件是确定的(Defined)。


也就是说,在一致性和强度上,Defined>Consistent>Inconsistent。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
打赏
0
0
0
0
22
分享
相关文章
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
从“笨重大象”到“敏捷火花”:Hadoop与Spark的大数据技术进化之路
117 79
随着云计算和大数据技术的发展,Hyper-V在虚拟化领域的地位日益凸显
随着云计算和大数据技术的发展,Hyper-V在虚拟化领域的地位日益凸显。作为Windows Server的核心组件,Hyper-V具备卓越的技术性能,支持高可用性、动态迁移等功能,确保虚拟机稳定高效运行。它与Windows深度集成,管理便捷,支持远程管理和自动化部署,降低管理成本。内置防火墙、RBAC等安全功能,提供全方位安全保障。作为内置组件,Hyper-V无需额外购买软件,降低成本。其广泛的生态系统支持和持续增长的市场需求,使其成为企业虚拟化解决方案的首选。
大数据基础工程技术团队4篇论文入选ICLR,ICDE,WWW
大数据基础工程技术团队4篇论文入选ICLR,ICDE,WWW
DeepSeek进阶开发与应用4:DeepSeek中的分布式训练技术
随着深度学习模型和数据集规模的扩大,单机训练已无法满足需求,分布式训练技术应运而生。DeepSeek框架支持数据并行和模型并行两种模式,通过将计算任务分配到多个节点上并行执行,显著提高训练效率。本文介绍DeepSeek中的分布式训练技术,包括配置与启动方法,帮助用户轻松实现大规模模型训练。数据并行通过`MirroredStrategy`同步梯度,适用于大多数模型;模型并行则通过`ParameterServerStrategy`异步处理大模型。DeepSeek简化了分布式环境配置,支持单机多卡和多机多卡等场景。
MaxFrame:链接大数据与AI的高效分布式计算框架深度评测与实践!
阿里云推出的MaxFrame是链接大数据与AI的分布式Python计算框架,提供类似Pandas的操作接口和分布式处理能力。本文从部署、功能验证到实际场景全面评测MaxFrame,涵盖分布式Pandas操作、大语言模型数据预处理及企业级应用。结果显示,MaxFrame在处理大规模数据时性能显著提升,代码兼容性强,适合从数据清洗到训练数据生成的全链路场景...
120 5
MaxFrame:链接大数据与AI的高效分布式计算框架深度评测与实践!
MaxFrame 产品评测:大数据与AI融合的Python分布式计算框架
MaxFrame是阿里云MaxCompute推出的自研Python分布式计算框架,支持大规模数据处理与AI应用。它提供类似Pandas的API,简化开发流程,并兼容多种机器学习库,加速模型训练前的数据准备。MaxFrame融合大数据和AI,提升效率、促进协作、增强创新能力。尽管初次配置稍显复杂,但其强大的功能集、性能优化及开放性使其成为现代企业与研究机构的理想选择。未来有望进一步简化使用门槛并加强社区建设。
194 7
MaxCompute MaxFrame评测 | 分布式Python计算服务MaxFrame(完整操作版)
在当今数字化迅猛发展的时代,数据信息的保存与分析对企业决策至关重要。MaxCompute MaxFrame是阿里云自研的分布式计算框架,支持Python编程接口、兼容Pandas接口并自动进行分布式计算。通过MaxCompute的海量计算资源,企业可以进行大规模数据处理、可视化数据分析及科学计算等任务。本文将详细介绍如何开通MaxCompute和DataWorks服务,并使用MaxFrame进行数据操作。包括创建项目、绑定数据源、编写PyODPS 3节点代码以及执行SQL查询等内容。最后,针对使用过程中遇到的问题提出反馈建议,帮助用户更好地理解和使用MaxFrame。
MaxFrame 性能评测:阿里云MaxCompute上的分布式Pandas引擎
MaxFrame是一款兼容Pandas API的分布式数据分析工具,基于MaxCompute平台,极大提升了大规模数据处理效率。其核心优势在于结合了Pandas的易用性和MaxCompute的分布式计算能力,无需学习新编程模型即可处理海量数据。性能测试显示,在涉及`groupby`和`merge`等复杂操作时,MaxFrame相比本地Pandas有显著性能提升,最高可达9倍。适用于大规模数据分析、数据清洗、预处理及机器学习特征工程等场景。尽管存在网络延迟和资源消耗等问题,MaxFrame仍是处理TB级甚至PB级数据的理想选择。
88 4
从零到一:分布式缓存技术初探
分布式缓存通过将数据存储在多个节点上,利用负载均衡算法提高访问速度、降低数据库负载并增强系统可用性。常见产品有Redis、Memcached等。其优势包括性能扩展、高可用性、负载均衡和容错性,适用于页面缓存、应用对象缓存、状态缓存、并行处理、事件处理及极限事务处理等多种场景。
288 1
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
143 2