zoukankan      html  css  js  c++  java
  • Hadoop 学习(一)HDFS

    (一)HDFS

    分布式文件系统,用于大数据的存储。具有高容错性、高可靠性、高可扩展型和高吞吐量等特征。

    1. HDFS架构

    HDFSmaster/slave架构设计模式。一个HDFS集群有一个元数据节点(NameNode)和一些数据节点(DataNode)组成。NameNode是主节点,主要用来存储管理文件的元数据【元数据大小为150byte 8条元数据为1K】(文件名称、大小、存放路径 )和处理来自客户端的请求。DataNode是从节点,用来管理对应节点的数据存储。即文件存储在DataNode上。

    2. 主要组件
    Block

    HDFS中的数据是以数据块的形式存储的。默认大小为128M。(如果一个数据块小于128M,则按照具体大小存储。并不占用整个块空间)

    NN

    存储元数据信息和接收客户端请求。

    元数据:文件名、文件大小、文件存储位置等。系统元数据保存在fsimageedits中。

    FsImae:系统映射文件,主要存储源数据信息。

    Edits:操作日志文件。HDFS对文件的操作日志都保存在其中。

    DN

    按块存放数据。

    周期性的向Name Node发送心跳,汇报数据存储情况

    DN的工作机制

    1. 数据块在DN以文件的形式存储。包含两个文件,其中一个是文件本身,另外一个是文件的验证文件(长度,数据块、校验和、时间戳)
    2. DN启动后,向NN注册。周期性(1小时)的向NN汇报块情况。
    3. DNNN之间有心跳机制(3S)。如果NN超过一段时间(10M)没有收到DN的心跳,则认为机器不可用。
    SNN

    为了解决系统启动时间长的问题。协助Name Node实现工作。

    元数据存在内存中,可以快读相应请求。担心断电丢失,所以在磁盘中有备份文件。FsImage

    内存元数据修改,同步更新FsImage太慢(修改操作),引入Edits,只追加,效率很高

    SNN作用:系统启动流程。系统启动,Name Node会加载FSimageEdits。得到完整的元数据信息之后,会写入FSimage中。如果系统两次启动时间较长,edits会比较大。合并fsimageedits会比较耗时。启动时间较长。所以,secondNameNode就是协助NamaNode提前合并FsImageEdits文件。

    SNN工作流程:

    1. SNN求情NN是否需要checkPoint。返回是否需要的结果。
    2. SNN请求NN执行Checkpoint
    3. NN滚动正在写的Edits日志
    4. 通过Http get 方法将镜像文集FsImage和编译日志Edits拷贝到SNN
    5. SNN加载镜像文件和日志文件到内存并合并。生成fsImage.chkpoint
    6. 通过Http post FsImage.chkPoint 发送到NNNN重命名为FsImage并覆盖原有的文件。

    触发Second Name Node一般是时间出发或者是Edits条数量到达阈值触发。

    3. 文件的读写流程

    (1) 读文件流程

    1. 客户端向NameNode发读文件请求。C->NN
    2. NameNode返回元数据列表(文件分多个Block,每个Block对应一个文件列表)
    3. 遍历每个Block,根据Block的元数据列表,选择最近节点发送的DataNode请求。建立连接。
    4. 获得数据后,关闭和DataNode的连接。处理下一个Block节点的下载。
    5. 关闭任务。

    (2) 写文件流程

    1. 客户端向NamaNode发送写文件请求。C->NN
    2. NameNode验证权限,文件是否存在等。返回是否可以上传。
    3. 客户端循环处理每一块Block,向NN发送请求。获得当前Block的元数据列表。[ds1ds2ds3]
    4. 对当前Block,选择最近的DataNode ds1,使用FSDataOutPutStream建立连接,写入数据。
    5. 备份机制负责将写入的数据一步备份到其它节点上ds1 数据写入ds2ds2数据写入 ds3
    6. 完成所有Block写入后,关闭任务。
    4. 知识点

    (1) 网络拓扑:节点的计算

    节点的距离:两个节点到达最近的共同祖先之和。

    (2) HADOOP副本节点选择

    第一个副本,如果客户端在节点上,就是当前节点,如果客户端不在节点上,第一个副本随意选择。

    第二个副本是和第一个副本在同一机架,不同节点上。

    第三个副本是和前两个不同机架,节点随机。

  • 相关阅读:
    CodeForce VKcup A
    CNN卷积神经网络
    神经网络
    我的机器学习之路
    [OPENCV] 第一个程序 识别颜色
    Android 登录界面与首页的设计
    go web的基本原理
    Go语言标准库之http/template
    吞吐量(TPS)、QPS、并发数、响应时间(RT)概念
    数据库恢复技术
  • 原文地址:https://www.cnblogs.com/maopneo/p/13947993.html
Copyright © 2011-2022 走看看