zoukankan      html  css  js  c++  java
  • MapReduce/GFS/BigTable/HDFS

     
    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
  • 相关阅读:
    JS 保存表单默认值 为空时自动填充默认值
    .net 防盗链
    Subversion安装和使用
    (转) MFC的入口点与消息循环,消息映射
    ASP.NET树形控件TreeView的递归绑定
    SQL Server中的分页
    C# 调用WebService的方法
    从零开始定义自己的JavaScript框架(一)
    JS中的call和apply
    JS中的自执行函数
  • 原文地址:https://www.cnblogs.com/lmhyhblog/p/10552560.html
Copyright © 2011-2022 走看看