MapReduce
一个master节点,一部分worker处理Map,一部分处理Reduce任务
master节点给worker节点分配任务,周期性监督是否存活,如果遇到异常,会自动将任务重新分配
对于(k,v)数据,先到达处理Map的worker,Map将其转化为新的(k,v)数据,并且将其分区存储,如果设置了Combine,会进行合并,然后将其存储到本地磁盘,根据分区传递给不同的Reduce节点,节点会进行排序,把相同的k进行Reduce任务
对于Map节点失败,无论执行与否都会重新执行,而Reduce节点中执行成功的不再重新执行
对于处理master失败,会定期将master上的数据结构存储到磁盘中
为了防止worker失败,会将数据存储到3个不同的机器上,可以把传输数据的带宽节省下来
为了防止最后几个任务由于某种原因耽误时间,通常会有多个同时执行最后几个任务,取第一个执行成功的
GFS
client-master-chunkserver
chunkserver保存多个chunk(每个文件以chunk形式存储,至少占有一个chunk,并且被唯一标识,通常会存储3个副本)
master 保存元数据(命名空间,文件对应的chunk,每个chunk副本的位置),租约管理,chunk迁移,无用chunk回收,控制各个节点的分配,以及周期性监督各节点是否存活
client为客户端,从master只获取元数据,其余直接与chunkserver进行交互
当客户端要存入数据时,master会找到对应的chunk的位置信息,交给客户端,客户端可以与对应的chunkserver进行交互
租约机制,可以选一个chunk副本作为主chunk来代替master进行更新chunk副本的操作
快照,可以保存某一个状态方便以后回滚,但不会立即备份,只有当chunk被改变时,才会进行备份,而且会备份在本地
BigTable
可以根据行,列,时间戳 查找到一个value,其中多个列可以构成一个列簇
连接到客户端的库,master,许多tablet服务器
客户端不经过master直接与tablet服务器进行读写
master负责讲tablet分配到tablet服务器,并且负载均衡
一个BigTable存在大量的表,一个表会被逐渐分配到多个tablet服务器
Tablet存储信息:用三层类似B+树的结构
对于写操作,会把数据先放入MemTable,当数据量到达一个阀值以后创建会将其转为SST,并创建新的MemTable
HDFS
Client-NameNode-DataNode
准备写数据的时候,首先会把文件分成若干相同大小的数据块,接下来Client会向NameNode申请存储位置,一般来说数据会被备份3个位置,NameNode会将位置按距离排序以后发送给Client,Client会先把数据存储到最近的DataNode,DataNode会主动讲数据发送给下一个,当这个块的数据被保存好,将会给NameNode发送完成信号。当准备读数据,Client只需要向NameNode查询,数据所在的位置即可。DataNode会定期发送心跳给NameNode,若一段时间没有接收到,NameNode会认定DataNode已经挂了,同时也会定期发送数据块给NameNode,同时会检查校验和是否正确,这样下来NameNode就会知道DataNode是否存活,以及有哪些数据块,同时还会存储数据块都存储在哪些DataNode