谷歌 MapReduce BigTable GFS 大数据 分布式 的三驾马车

特定问题的特定方案

搜索引擎的基础是什么?

架构的层次

应用1、应用2、应用3、应用4........
算法(MapRuduce)
数据模型(BigTable)
文件系统(GFS)

Google的三篇论文一直是分布式领域传阅的经典。

根据MapReduce,于是我们有了Hadoop;

根据BigTable,于是我们有了HBase。

根据GFS,于是我们有了HDFS;

而在这三篇论文里都提及Google的一个lock service---Chubby,于是我们有了Zookeeper

GFS:Google File System

如何保存一个文件?

元数据,索引,块存储

如何保存一个大文件?

1 chunk = 64MB=64*1024=65,536 blocks(小块变大块)

优点

减少元数据 减少流量

缺点

小文件会浪费空间

如何保存一个超大大文件

Master + many ChunkServers

缺点

ChunkServer数据的任何改变都需要通知Master

如何减少Master存储的数据和流量?

Master不记录每块数据的偏移量( diskOffset)

优点

减少Master的元数据信息

减少Master和Chunkserver之间的通信

如何发现数据损坏

多级校验

1 chunk = a list of blocks1 block = 64KB

Block保存检验和(checksum)1 checksum = 32bit

1T文件的检验和大小. 1T/64KB*32bit = 64MB

读取一块数据时对checksum进行验证

如何减少ChunkServer挂掉带来的损失?

复制Chunks

创建多少副本? 答案:3

如何选择一个副本的ChunkServer?

  • 硬盘利用率低
  • 限制最新数据块的写入数量·
  • 跨机架跨中心:2+1

如何恢复损坏的chunk?

向Master求助

发现ChunkServer挂掉?

心跳

ChunkServer挂掉后恢复数据?

基于存活副本数的恢复策略

怎么应对热点?

当副本过度繁忙,复制到更多ChunkServer

基于ChunkServer的硬盘和带宽利用率来选择

怎么读一个文件?

怎么写一个文件?

总结

GFS特定于大文件的场景

读写过程是核心

Bigtable: A Distributed Storage System for Structured Data

如何在文件内快速查询?

Table = a list of sorted <key, value>

怎么保持很大的表?

A table = a list of tablets(小表)

A tablet = a list of sorted <key value>

如何保存超大表?

A table = a list of tablets(小表)

A tablet = a list of SSTables(小小表)

A SSTable = a list of sorted <key, value>

如何写数据?

当内存中的数据到达一定数量时,就落盘。落盘时顺序写磁盘。

内存 | GFS/Disk

通过写入memTable(内存表)来加速

A tablet = memTable + a list of SSTables

内存表过大怎么办?

将memTable导入硬盘,成为一个新的SSTable

如何避免内存数据丢失?

A tablet = memTable + a list of SSTables + log

怎么读数据?

因为之前的写策略

SSTable内部的数据是有序的

SSTable之间的数据是无序的

需要查找所有的SSTable和memTable需要在硬盘中的SSTable查找该元素

怎么加速读数据?

加索引

ASSTable = a list of sorted <key, value>= a list of 64K blocks + index

Index会预加载到内存

通过index找到硬盘的位置

布隆过滤器(判断数据一定不在表中)

A SSTable = a list of sorted <key, value>= a list of 64K blocks + index + bloomfilter

Bloomfilters会预加载到内存

表的逻辑视图是什么?

big table不是关系型数据库,但是沿用了关系型的行列表的概念

将逻辑视图转换为物理存储

Nosql 天然不支持jion操作

Bigtable的架构是什么?

总结

Bigtable使用<key,value>的物理结构存储了超大表

吃内存的Bigtable和吃硬盘的GFS相互配合

MapReduce: Simplified Data Processing on Large Clusters

MapReduce

Input split Map Shuffle Reduce Finalize

总结

MapReduce就是分治法

来洋葱、拿洋葱、切洋葱、放洋葱、拼洋葱、送洋葱

posted @ 2022-07-22 18:00  飞飞很要强  阅读(382)  评论(0编辑  收藏  举报