江湖上流传的谷歌三宝是什么?GFS,MapReduce,还有一个很重要

大数据的三驾马车(一):GFS 在2003,2004,2006年谷歌发布的三篇论文奠定了大数据技术的核心理念,它们分别是:GFS、MapReduce、Bigtable。可以说,谷歌是大数据领域的普罗米修斯。经过10多年的蓬勃发展,大数据领域的技术在如今已经发展的比较成熟了,但随着生成式AI技术的火爆,大数据和AI的融合肯定也会继续加速发展。GFS、MapReduce、Bigtable又被称为“三驾马车”,是大数据之路的敲门砖,值得每个大数据从业人员了解和学习。 阅读详情

江湖传说永流传:谷歌技术有"三宝",GFS、MapReduce和大表(BigTable)!

谷歌在03到06年间连续发表了三篇很有影响力的文章,分别是03年SOSP的GFS,04年OSDI的MapReduce,和06年OSDI的BigTable。SOSP和OSDI都是操作系统领域的顶级会议,在计算机学会推荐会议里属于A类。SOSP在单数年举办,而OSDI在双数年举办。

那么这篇博客就来介绍一下GFS,MapReduce,BigTable。

谷歌技术"三宝"之谷歌文件系统

题记:初学分布式文件系统,写篇博客加深点印象。GFS的特点是使用一堆廉价的商用计算机支撑大规模数据处理。

虽然"The Google File System " 是03年发表的老文章了,但现在仍被广泛讨论,其对后来的分布式文件系统设计具有指导意义。然而,作者在设计GFS时,是基于过去很多实验观察的,并提出了很多假设作为前提,这等于给出了一个GFS的应用场景。所以我们自己在设计分布式系统时,一定要注意自己的应用场景是否和GFS相似,不能盲从GFS。

GFS的主要假设如下:

  1. GFS的服务器都是普通的商用计算机,并不那么可靠,集群出现结点故障是常态。因此必须时刻监控系统的结点状态,当结点失效时,必须能检测到,并恢复之。
  2. 系统存储适当数量的大文件。理想的负载是几百万个文件,文件一般都超过100MB,GB级别以上的文件是很常见的,必须进行有效管理。支持小文件,但不对其进行优化。
  3. 负载通常包含两种读:大型的流式读(顺序读),和小型的随机读。前者通常一次读数百KB以上,后者通常在随机位置读几个KB。
  4. 负载还包括很多连续的写操作,往文件追加数据(append)。文件很少会被修改,支持随机写操作,但不必进行优化。
  5. 系统必须实现良好定义的语义,用于多客户端并发写同一个文件。同步的开销必须保证最小。
  6. 高带宽比低延迟更重要,GFS的应用大多需要快速处理大量的数据,很少会严格要求单一操作的响应时间。

从这些假设基本可以看出GFS期望的应用场景应该是大文件,连续读,不修改,高并发。国内的淘宝文件系统(TFS)就不一样,专门为处理小文件进行了优化。

1 体系结构

GFS包括一个master结点(元数据服务器),多个chunkserver(数据服务器)和多个client(运行各种应用的客户端)。在可靠性要求不高的场景,client和chunkserver可以位于一个结点。图1是GFS的体系结构示意图,每一结点都是普通的Linux服务器,GFS的工作就是协调成百上千的服务器为各种应用提供服务。

江湖上流传的谷歌三宝是什么?GFS,MapReduce,还有一个很重要

 

  • chunkserver提供存储。GFS会将文件划分为定长数据块,每个数据块都有一个全局唯一不可变的id(chunk_handle),数据块以普通Linux文件的形式存储在chunkserver上,出于可靠性考虑,每个数据块会存储多个副本,分布在不同chunkserver。
  • GFS master就是GFS的元数据服务器,负责维护文件系统的元数据,包括命名空间、访问控制、文件-块映射、块地址等,以及控制系统级活动,如垃圾回收、负载均衡等。
  • 应用需要链接client的代码,然后client作为代理与master和chunkserver交互。master会定期与chunkserver交流(心跳),以获取chunkserver的状态并发送指令。

图1还描述了应用读取数据的流程。1.应用指定读取某个文件的某段数据,因为数据块是定长的,client可以计算出这段数据跨越了几个数据块,client将文件名和需要的数据块索引发送给master;2.master根据文件名查找命名空间和文件-块映射表,得到需要的数据块副本所在的地址,将数据块的id和其所有副本的地址反馈给client;3.client选择一个副本,联系chunkserver索取需要的数据;4.chunkserver返回数据给client。

2 数据的布局

GFS将文件条带化,按照类似RAID0的形式进行存储,可以提高聚合带宽。事实上,大多数分布式存储系统都会采取这种策略。GFS将文件按固定长度切分为数据块,master在创建一个新数据块时,会给每个数据块分配一个全局唯一且不可变的64位id。每个数据块以Linux文件的形式存储在chunkserver的本地文件系统里。

GFS为数据块设置了一个很大的长度,64MB,这比传统文件系统的块长要大多了。大块长会带来很多好处:1.减少client和master的交互次数,因为读写同一个块只需要一次交互,在GFS假设的顺序读写负载的场景下特别有用;2.同样也减少了client和chunkserver的交互次数,降低TCP/IP连接等网络开销;3.减少了元数据的规模,因此master可以将元数据完全放在内存,这对于集中式元数据模型的GFS尤为重要。

大数据块也有缺点。最大的缺点可能就是内部碎片了,不过考虑到文件一般都相当大,所以碎片也只存在于文件的最后一个数据块。还有一个缺点不是那么容易看出来,由于小文件可能只有少量数据块,极端情况只有一个,那么当这个小文件是热点文件时,存储该文件数据块的chunkserver可能会负载过重。不过正如前面所说,小文件不在GFS的优化范围。

为了提高数据的可靠性和并发性,每一个数据块都有多个副本。当客户端请求一个数据块时,master会将所有副本的地址都通知客户端,客户端再择优(距离最短等)选择一个副本。一个典型的GFS集群可能有数百台服务器,跨越多个子网,因此在考虑副本的放置时,不仅要考虑机器级别的错误,还要考虑整个子网瘫痪了该怎么办。将副本分布到多个子网去,还可以提高系统的聚合带宽。因此创建一个数据块时,主要考虑几个因素:1.优先考虑存储利用率低于平均水平的结点;2.限制单个节点同时创建副本的数量;3.副本尽量跨子网。

3 元数据服务

GFS是典型的集中式元数据服务,所有的元数据都存放在一个master结点内。元数据主要包括三种:文件和数据块的命名空间,文件-数据块映射表,数据块的副本位置。所有的元数据都是放在内存里的。

前两种元数据会被持久化到本地磁盘中,以操作日志的形式。操作日志会记录下这两种元数据的每一次关键变化,因此当master宕机,就可以根据日志恢复到某个时间点。日志的意义还在于,它提供了一个时间线,用于定义操作的先后顺序,文件、数据块的版本都依赖于这个时间顺序。

数据块的副本位置则没有持久化,因为动辄数以百计的chunkserver是很容易出错的,因此只有chunkserver对自己存储的数据块有绝对的话语权,而master上的位置信息很容易因为结点失效等原因而过时。取而代之的方法是,master启动时询问每个chunkserver的数据块情况,而且chunkserver在定期的心跳检查中也会汇报自己存储的部分数据块情况。

GFS物理上没有目录结构,也不支持链接操作,使用一张表来映射文件路径名和元数据。

4 缓存和预取

GFS的客户端和chunkserver都不会缓存任何数据,这是因为GFS的典型应用是顺序访问大文件,不存在时间局部性。空间局部性虽然存在,但是数据集一般很大,以致没有足够的空间缓存。

我们知道集中式元数据模型的元数据服务器容易成为瓶颈,应该尽量减少客户端与元数据服务器的交互。因此GFS设计了元数据缓存。client需要访问数据时,先询问master数据在哪儿,然后将这个数据地址信息缓存起来,之后client对该数据块的操作都只需直接与chunkserver联系了,当然缓存的时间是有限的,过期作废。

master还会元数据预取。因为空间局部性是存在,master可以将逻辑上连续的几个数据块的地址信息一并发给客户端,客户端缓存这些元数据,以后需要时就可以不用找master的麻烦了。

5 出错了肿么办

引用:“We treat component failures as the norm rather than the exception."

分布式系统整体的可靠性是至关重要的。GFS集群使用的都是普通的商用计算机,而且机器的数量众多,设备故障经常出现,如何处理结点失效的问题是GFS最大的挑战。

5.1 完整性

GFS使用数以千计的磁盘,磁盘出错导致数据被破坏时有发生,我们可以用其它副本来恢复数据,但首先必须能检测出错误。chunksever会使用校验和来检测错误数据。每一个块(chunk)都被划分为64KB的单元(block),每个block对应一个32位的校验和。校验和与数据分开存储,内存有一份,然后以日志的形式在此盘备一份。

chunkserver在发送数据之前会核对数据的校验和,防止错误的数据传播出去。如果校验和与数据不匹配,就返回错误,并且向master反映情况。master会开始克隆副本的操作,完成后就命令该chunkserver删除非法副本。

5.2 一致性

一致性指的是master的元数据和chunkserver的数据是否一致,多个数据块副本之间是否一致,多个客户端看到的数据是否一致。

先来看看元数据一致性。GFS的命名空间操作是原子性的,并且用日志记录下操作顺序。虽然GFS没有目录结构,但是仍然有一颗逻辑的目录树,树的每个结点都有自己的读写锁,每个元数据操作都需要获得一系列的锁,应该是写锁会阻塞其它的锁,而读锁只阻塞写锁而不阻塞读锁。比如/home/user "目录" 正在创建快照,需要获得/home的读锁和/home/user的写锁,这时如果想创建文件/home/user/foo会被阻塞,因为需要获得/home、/home/user的读锁以及/home/user/foo的写锁,快照会阻塞创建操作获取/home/user的读锁。如果是在一个有传统目录树结构的文件系统里,创建一个文件需要修改父目录的数据,因此需要获得父目录的写锁。这种锁机只允许在一个目录里并发修改数据(如并发创建文件等),这在传统文件系统里是不允许的。

深入理解Google分布式系统核心:GFS、Bigtable、MapReduce中文版 MapReduce是一种编程模型,用于处理和生成大数据集。它的概念框架包括两个主要操作:Map和Reduce。Map阶段将输入数据转化为一系列中间键值对,而Reduce阶段则合并所有具有相同键的所有中间值。在MapReduce框架中,Map函数接受一组键值对作为输入,并输出一组中间键值对。框架会自动处理对这些中间键值对的排序,使得相同键的所有值都聚集在一起。然后,每个键都会传递给Reduce函数,Reduce函数处理这些值,并输出最终结果。 阅读详情

相关推荐

谷歌技术三宝之谷歌文件系统1

1. GFS的服务器都是普通的商用计算机,并不那么可靠,集群出现结点故障是常态 2. 系统存储适当数量的大文件 3. 负载通常包含两种读:大型的流式读(顺序读)

说说通用报表控件

我们已经开发有2款WINCC报表控件,一种是固定模板,一种是自定义模板。但是它们有个共同特点,就是数据都是来自WINCC的归档数据库。使用WINCC归档数据库的好处是不需要自己写脚本保存数据。但是有些情况下,我们需要自己保存数据,或者第三方系统通过数据表的方式给我们提供数据。那这样的话,我们之前的两款控件就不支持了。正好有个客户有类似需要,于是加了一天班写了个通用报表控件。之所以说是通用,是因为它可以插入任何支持.NET控件的组态软件中,比如WINCC、IFIX等。并且它不依赖于组态软件自己...

HwLib_的博客 3549

HFSS与AI融合:智能算法如何重塑天线设计流程

本文探讨了HFSS与AI融合如何通过智能算法革新天线设计流程。在5G/6G通信时代,AI技术如机器学习和遗传算法显著提升了高频电磁场仿真效率,将传统设计周期从数周缩短至数小时,并优化了天线性能。文章详细介绍了AI与HFSS的集成策略、关键技术突破及典型应用案例,展示了智能算法在天线设计中的巨大潜力。

weixin_29035147的博客 774

基于STM32的HC-SR04超声波模块测距(新手级)

本人是嵌入式新手,学习了STM32的部分内容,最近想找些项目做,然后顺便学习了一下HC-SR04超声波模块,学习过程中也参考了一些大佬的文章。本文记录了自己的学习方法和学习过程,同时也希望能和各位大佬交流讨论。

weixin_63758495的博客 2202

AI赋能传染病建模:从数据到动力学模型的本地实践指南

这次我们来看一个将 AI 与传染病动力学建模结合的前沿方向。想象一下,你手头有一份流感爆发的病例数据,传统的建模方法可能需要复杂的微分方程和大量的手动调参,而 AI 模型能否直接从数据中“学习”出传播规律,甚至自动跑通整个建模流程?这正是当前研究的热点。根据《Nature》的最新综述,人工智能正在重塑传染病流行病学建模,从参数推断、趋势预测到多源数据融合,AI 技术为解决传统建模中的计算瓶颈和数据难题提供了全新路径。 对于开发者、数据科学家或公共卫生领域的研究者而言,最关心的是:这套方法能不能在本地跑起来?

weixin_29051811的博客 297

GB 44497-2024《智能网联汽车 自动驾驶数据记录系统》标准解读

GB 44497-2024《智能网联汽车 自动驾驶数据记录系统》针对智能网联汽车的自动驾驶数据记录系统进行了全面规范。标准要求我们记录车辆在自动驾驶模式下的所有关键操作数据,如:1. 车辆状态数据,如速度、加速度、转向角度、制动状态等;2. 环境感知数据,如周围物体的位置、速度、类型等;3. 驾驶决策数据,如路径规划、避障决策、紧急制动指令等;4. 系统状态数据,如软件版本、硬件状态、系统警告信息等。在数据存储方面,标准强调了数据的安全性和可靠性。

daopuyun的博客 2665

VASP+Multiwfn+VMD静电势计算与可视化全流程解析

静电势是表征分子与材料表面电荷分布的关键物理量,它通过求解泊松方程,将电子密度与原子核电荷在空间中的贡献结合起来,直观揭示体系的电子富集与缺失区域。这一性质在理解化学反应活性、分子间相互作用(如氢键、卤键)以及材料表面性质方面具有重要价值。在计算材料科学与量子化学领域,基于第一性原理计算获得高精度电子结构数据后,如何将其转化为可直观分析的静电势图,是连接理论计算与物理解释的关键技术环节。本文聚焦于构建一条高效、可控的端到端工作流,详细解析如何利用VASP进行高精度电子密度计算,通过专业波函数分析软件Mult

weixin_33733810的博客 425

BOSS直聘数据采集实战:八爪鱼工具高效爬取职位信息的完整指南

本文提供了一份使用八爪鱼采集器高效爬取BOSS直聘职位信息的完整实战指南。针对非技术用户,详细讲解了从软件安装、网址规律分析到流程配置、数据导出的每一步操作,并分享了提升采集稳定性的高级设置与避坑技巧,帮助用户轻松实现数据采集自动化。

weixin_29061509的博客 1472

42、使用mmrotate中k3det进行旋转目标检测,并进行mnn部署和ncnn部署

基本思想:仍然是身份证分割,并进行ncnn和mnn的c++的部署开发

sxj731533730 5704

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: 阿里24岁P7大牛,熬夜整理的Linux115道面试题,学会了吊打面试官
下一篇: 马上618大促,前五十秒杀抢不到?利用python 淘宝秒杀宝贝都是你的
爱玛士
博客等级 码龄7年 719粉丝 253原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值