Hadoop技术

Hadoop简介

Hadoop 的思想之源:Google 第一遇到大数据计算问题的公司
Openstack :NASA

面对的数据和计算难题
- 大量的网页怎么存储
- 搜索算法
带给我们的关键技术和思想(Google三大理论)
- GFS 文件存储
- Map-Reduce 计算
- Bigtable

创始人:Doug cutting

Hadoop简介:http://hadoop.apache.org
分布式存储系统HDFS (Hadoop Distributed File System )POSIX
     分布式存储系统
     提供了 高可靠性、高扩展性和高吞吐率的数据存储服务
分布式计算框架MapReduce
    分布式计算框架(计算向数据移动)
    具有 易于编程、高容错性和高扩展性等优点。
分布式资源管理框架YARN(Yet Another Resource Management)
    负责集群资源的管理和调度
    
版本:1.x,2.x,3.x
 

Hadoop 分布式文件系统HDFS

存储模型:字节
文件线性切割成块(Block):偏移量 offset (byte, 中文)
block分散存储存储在集群节点中
单一文件Block大小一致,文件与文件可以不一致
Block可以设置副本数,副本无序分散在不同节点中(默认是3个)
副本数不要超过节点数量
文件上传可以设置Block大小和副本数(资源不够开辟的进程)
已上传的文件Block副本数可以调整,大小不变
2.x 128MB Block 默认Block为128M,可以人为设置,最小1M,
只支持一次写入多次读取,同一时刻只有一个写入者
可以append追加数据

架构模型 主从模型

文件元数据MetaData, 文件数据
元数据:metedata size offset
主节点负责管理元数据
从节点负责处理具体的文件数据,即块文件
NameNode 主节点保存文件元数据:单节点posix
DataNode 从节点保存文件Block数,多数据
DataNode 与NameNode1报错心跳, DataNode向NameNode提交Block列表
HdfsClient与NameNode交互元数据信息
HdfsClient与DataNode交互文件Block数据(cs架构)
DataNode利用服务器本地文件系统存储数据块

Hadoop架构
在这里插入图片描述

在这里插入图片描述

内存存储持久化

NameNode(NN)

基于内存存储:不会和磁盘发生交换(双向)
- 值存在内存中
- 持久化 单向 => 写入磁盘

NameNode主要功能:
- 接受客户端的读写服务
- 收集DataNode汇报的Block列表信息

NameNode保存metadata信息包括
- 文件owership和 permissions
- 文件大小,时间
- (Block列表:Block偏移量), 位置信息(持久化不存)
- Block每个副本位置(有DataNode上报)

NameNode持久化的两种方式 fsimage 和 edits

fsimage 写入磁盘时慢,从磁盘恢复到内存中快
- NameNode的metadata信息在启动后会加载到内存中
- 磁盘镜像快照 内存—》序列化 — 》 二进制文件
- metadata 存储到磁盘文件名 “fsimage”(时点备份 )
- 从二进制文件反序列化成对象恢复到内存中
- Block的位置信息不回保存到fsimage

edits 写入磁盘时快,从磁盘恢复时慢
- edits记录对metadata的操作日志 .存储所有操作记录
- 按照操作记录重新执行一遍从而变成内存中数据

所以二者需要结合使用
在系统第一次搭建完成后此时还没有跑起来时会格式化, 就会产生第一 fsimage 文件, 空的fsimage文件,启动hadoop时读取空的fsimage文件时会产生一个空的edits_log文件,此时edits和fsimage会进行合并生成一个新的fsimage文件,以后不管重启多少次fsimage文件将不会再改变,只是对edits文件增长,但是不能任由edits文件增长,此时需要在达到一定条件后再对edits和fsimage文件做合并,生成新的fsimage,充分发挥两者优势

此时需要SecondaryNameNode(SNN) Hadoop1.0
它不是NN的备份(但可以做备份), 它的主要工作就是帮助NN合并editslog,减少NN启动时间
SNN执行合并时机:
- 根据配置文件设置的时间间隔fs.checkpoint.period 默认是3600s
- 根据配置文件设置editslog的大小,fs.checkpoint.size 规定edits文件的最大值, 默认是64MB

在这里插入图片描述

DataNode(DN)
- 本地磁盘目录存储数据(Block),文件形式
- 同时存储Block的元数据信息文件(此处的元数据是指存储数据Block的md5值,确保文件的正确性完整性,如果不正确,则去另外的DN去寻找这个文件的备份)
- 启动DN时回想NN汇报block信息
- 通过向NN发送心跳保持与其联系(3s一次),如果NN10分钟没有收到DN的心跳,则认为其已经lost, 并copy其上的block到其他DN上,恢复到默认的副本数
为啥是10分钟?
DN数据较大,给10分钟有可能进行恢复工作,避免进行频繁的拷贝

HDFS优点

HDFS缺点

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

    Block的副本放置策略

    在这里插入图片描述

    第一个副本:放置在上传文件的DN;如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点。
    第二个副本:放置在于第一个副本不同的 机架的节点上。
    第三个副本:与第二个副本相同机架的其他节点。
    更多副本:随机节点

    HDFS写流程
    在这里插入图片描述

    HDFS写流程

    读流程
    在这里插入图片描述

    HDFS读流程

    HDFS文件权限 POSIX标准(可移植操作系统接口)

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

    集群
    角色==进程

      • 低延迟数据访问
        • 比如毫秒级
        • 低延迟与高吞吐率
      • 小文件存取
        • 占用NameNode大量内存
        • 寻道时间超过读取时间
      • 并发写入,文件随机修改
        • 一个文件只能有一个写者
        • 仅支持append
      • Client:
        • 切分文件Block
        • 按Block线性和NN获取DN列表(副本数)
        • 验证DN列表后以更小的单位流式传输数据
          - 各节点,两两通信确定可用
        • Block传输结束后:
          - DN向NN汇报Block信息
          - DN向Client汇报完成
          - Client向NN汇报完成
        • 获取下一个Block存放的DN列表
          。。。。。。
        • 最终Client汇报完成
        • NN会在写流程更新文件状态
      • Client:
        • 和NN获取一部分Block副本位置列表
          线性和DN获取Block,最终合并为一个文件
          在Block副本列表中按距离择优选取
          MD5验证数据完整性
      • 与Linux文件权限类似
        • r:read w:write x:execute
        • 权限x对于文件忽略,对于文件夹表示是否允许访问其内容
      • 如果linux系统用户zhangsan使用hadoop命令也创建一个文件,那么这文件在HDFS中的owner就是zhangsan
      • HDFS的权限目的:阻止误操作,但不绝对,HDFS相信,你告诉我你是谁,我就认为你是谁
      • namenode
        • 数据元数据
          内存存储,不会有磁盘交换
          持久化(fsimage,edits log)
          不会持久化block的位置信息
          block:偏移量,因为block不可以调整大小,hdfs,不支持修改文件
          偏移量不会改变
      • datanode
        • block块,md5
          磁盘
          面向文件,大小一样,不能调整
          副本数,调整,(备份,高可用,容错/可以调整很多个,为了计算向数据移动)
      • SN 只在hadoop1.x版本中有
      • NN&DN
        • 心跳机制
          DN向NN汇报block信息
          安全模式
      • client
        Client:

        线性上传block
        先和NN通信,元数据,获取第一个block的节点信息(3副本,选择机制)
        和DN通信:pipeline:C和1stDN有socket,1stDN和2edDN有socket。。。。
        小片传输:4K,C给1stDN,1stDN同时本机缓存,瞬间放入下游socket中
        当block传输完毕:block自身的网络I/O时间,时间线重叠的艺术
        DN会向NN汇报自己新增的block
        C向NN汇报blockX传输完成给我下一个block节点信息
        全部传输完成,NN更新元数据状态可用

        线性读取block,不会有并发,只有一个网卡
        距离:择优选取同机架,同节点
        NN每次只给一部分block信息

猜你喜欢

转载自blog.csdn.net/wr_java/article/details/107714175