一、Hadoop简介

  • 2003-2004年,Google公开了部分GFS和Mapreduce思想的细节,以此为基础Doug Cutting等人用了2年业余时间实现了DFS和Mapreduce机制,一个微缩版:Nutch
  • Hadoop 于 2005 年秋天作为 Lucene的子项目 Nutch的一部分正式引入Apache基金会。2006 年 3 月份,Map-Reduce 和 Nutch Distributed File System (NDFS) 分别被纳入称为 Hadoop 的项目
  • 分布式存储系统HDFS (Hadoop Distributed File System )POSIX
    分布式存储系统;提供了 高可靠性、高扩展性和高吞吐率的数据存储服务
  • 分布式计算框架MapReduce ; 分布式计算框架(计算向数据移动)
    具有 易于编程、高容错性和高扩展性等优点。
  • 分布式资源管理框架YARN(Yet Another Resource Management)
    负责集群资源的管理和调度

二、存储模型

  • 文件线性切割成块(Block):偏移量 offset (byte)

  • Block分散存储在集群节点中

  • 单一文件Block大小一致,文件与 文件可以不一致

  • Block可以设置副本数,副本分散在不同节点中;副本数不要超过节点数量

  • 文件上传可以设置Block大小和副本数

  • 已上传的文件Block副本数可以调整,大小不变

  • 只支持一次写入多次读取,同一时刻只有一个写入者

  • 可以append追加数据

注意:hdfs存储单位是字节,已上传的文件不允许修改Block大小,因为偏移量已经确定下来了。副本和主节点地位是一样的,副本的数量设置遵从计算向数据移动原则,尽量分散在不同节点上。

三、HDFS的Block副本放置策略

  • 第一个副本:放置在上传文件的DataNode;如果是集群外提交的,则随机选一台磁盘不太满,CPU不太忙的节点上。
  • 第二个副本:放置在于第一个副本不同的机架的节点上。
  • 第三个副本:与第二个副本相同的节点上
  • 更多副本:随机节点
    注意: 这种模式是基于服务器为机架(机柜)服务器,同时交换机属于集群模式的环境下策略,具体入下图:

【01】Hadoop介绍

四、架构模型

【01】Hadoop介绍

  • 文件元数据MetaData,文件数据:元数据,数据本身
  • (主)NameNode节点保存文件元数据:单节点 posix
  • (从)DataNode节点保存文件Block数据:多节点
  • DataNode与NameNode保持心跳,提交Block列表
  • HdfsClient与NameNode交互元数据信息
  • HdfsClient与DataNode交互文件Block数据

五、HDFS设计思想

【01】Hadoop介绍

1. NameNode(NN)

  • 基于内存存储 :不会和磁盘发生交换;只存在内存中;持久化
  • NameNode主要功能:接受客户端的读写服务;收集DataNode汇报的Block列表信息
  • NameNode保存metadata信息包括:文件owership和permissions
    文件大小,时间、(Block列表:Block偏移量),位置信息、Block每副本位置(由DataNode上报)

2.NameNode持久化

  • NameNode的metadate信息在启动后会加载到内存
  • metadata存储到磁盘文件名为”fsimage”
  • Block的位置信息不会保存到fsimage
  • edits记录对metadata的操作日志。。。redis

3.DataNode(DN)

  • 本地磁盘目录存储数据(Block),文件形式
  • 同时存储Block的元数据信息文件
  • 启动DN时会向NN汇报block信息
  • 通过向NN发送心跳保持与其联系(3秒一次),如果NN 10分钟没有收到DN的心跳,则认为其已经lost,并copy其上的block到其它DN

六、HDFS写流程

【01】Hadoop介绍

  • 切分文件Block;按Block线性和NN获取DN列表(副本数)
  • 验证DN列表后以更小的单位流式传输数据,各节点,两两通信确定可用
  • Block传输结束后;DN向NN汇报Block信息;DN向Client汇报完成
    ;Client向NN汇报完成
  • 获取下一个Block存放的DN列表
  • 最终Client汇报完成;NN会在写流程更新文件状态

七、HDFS读流程

【01】Hadoop介绍

  • 和NN获取一部分Block副本位置列表
  • 线性和DN获取Block,最终合并为一个文件
  • 在Block副本列表中按距离择优选取

八、HDFS文件权限 POSIX

  • 与Linux文件权限类似:r: read; w:write; x:execute
    权限x对于文件忽略,对于文件夹表示是否允许访问其内容
  • 如果Linux系统用户zhangsan使用hadoop命令创建一个文件,那么这个文件在HDFS中owner就是zhangsan

九、安全模式

  • namenode启动的时候,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作。
  • 一旦在内存中成功建立文件系统元数据的映射,则创建一个新的fsimage文件(这个操作不需要SecondaryNameNode)和一个空的编辑日志。
  • 此刻namenode运行在安全模式。即namenode的文件系统对于客服端来说是只读的。(显示目录,显示文件内容等。写、删除、重命名都会失败)。 - 在此阶段Namenode收集各个datanode的报告,当数据块达到最小副本数以上时,会被认为是“安全”的, 在一定比例(可设置)的数据块被确定为“安全”后,再过若干时间,安全模式结束
  • 当检测到副本数不足的数据块时,该块会被复制直到达到最小副本数,系统中数据块的位置并不是由namenode维护的,而是以块列表形式存储在datanode中。

十、HDFS优缺点

1.优点

  • 高容错性:数据自动保存多个副本; 副本丢失后,自动恢复
  • 适合批处理:移动计算而非数据;数据位置暴露给计算框架(Block偏移量)
  • 适合大数据处理:GB 、TB 、甚至PB 级数据;百万规模以上的文件数量;10K+ 节点
  • 可构建在廉价机器上:通过多副本提高可靠性;提供了容错和恢复 机制

2.缺点

  • 低延迟数据访问:比如毫秒级;低延迟与高吞吐率
  • 小文件存取:占用NameNode 大量内存;寻道时间超过读取时间
  • 并发写入、文件随机修改:一个文件只能有一个写者;仅支持append
    低延迟数据访问:比如毫秒级;低延迟与高吞吐率
  • 小文件存取:占用NameNode 大量内存;寻道时间超过读取时间
  • 并发写入、文件随机修改:一个文件只能有一个写者;仅支持append

相关文章: