架构师训练营第 1 期 week12 总结
1、大数据平台与系统架构
2、HDFS
2.1 数据存储:nameNode 负责存储元数据信息,dataNode 以块的形式对数据进行存储,当客户端需要读数据时,先从 nameNode 查询数据的存储位置,再去 dataNode 中读取相应的数据。写数据时,需要先通过 nameNode 申请数据块,由 nameNode 分配具体的数据块,然后拿分配好的信息去跟 dataNode 通信,将数据写入。可以设置数据块的备份数量,自动将写入的数据在不同的机器上生成数据块的备份,防止数据丢失。
nameNode 周期性从 dateNode 中接收心跳信息和块状态报告,接收到心跳信息说明该节点正常,块状态报告包含该节点上所有数据块的列表。
2.2 高可用
DataNode 部分磁盘损坏:DataNode 正常服务,坏掉的磁盘上的数据尽快通知 NameNode;
DataNode 节点宕机:DataNode 节点每 3 秒向 NameNode 节点发送心跳信息,10 分钟收不到信息则认为该 DataNode 挂了,NameNode 查询该节点的数据块,对其进行复制;
NameNode 挂了:1、需要将 NameNode 元数据信息进行持久化,如操作日志:记录文件创建、编辑、删除等操作;Fsimage:包含完整的命名空间、File-Block 的映射关系、文件的属性(ACL、quota、修改时间等),恢复的时候可以找最新的 Fsimage 进行恢复,然后执行该镜像之后的日志操作。2、主主复制,同时只有一个主,通过 zookeeper 等进行主从的切换。
客户端挂了:一致性问题;文件创建后,不保证 NameNode 可见,即使文件刷新并存储,文件大小可能也为 0;当写入数据超过一个块后,新的 reader 可以看见第一个块,不能看到当前正在写的块;HDFS 提供 sync()强制缓存与数据节点同步,sync()调用成功后,当前写入数据对所有 reader 可见且一致,不过会导致额外的开销;
3、MapReduce 模型:处理海量数据,上百上千 CPU 同时运行处理数据,移动计算比移动数据更划算。
3.1 由 map 和 reduce 两部分组成,map 输入 key 为偏移量,value 为一行行数据信息
输出 key、value,reduce 输入 key,values(相同的数据交给同一个 reduce 处理),输出 key、value
3.2 InputFormat:验证作业的输入的正确性 将输入文件切分成逻辑的 InputSplits,一个 InputSplit 将被分配给一个单独的 Mapper task 提供 RecordReader 的实现,这个 RecordReader 会从 InputSplit 中正确读出一条一条的 K-V对供 Mapper 使用;
Partitioner Mapreduce 通过 Partitioner 对 Key 进行分区,进而把数据按我们自己的需求来分发;
3.3 MapReduce 调度时序图
评论