1、HDFS

阅读 72

2022-03-21

  • 未完成任务
    • NameNode、DataNode源码解析
    • 动态节点上下线操作
  • 配置文件$HADOOP_HOME/etc/hadoop/...
    • 常用端口

    • core-site.xml(hdfs使用)
      • NameNode路径 8020
        <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:8020</value>
        </property>
      • hdfs集群上的数据保存的路径
        <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/apps/tmp</value>
        </property>
    • hdfs-site.xml(hdfs使用)
      • dfs http ui地址50070
      • namenode守护进程管理的元数据文件fsimage存储的位置(非必配)
      • 确定DFS数据结点应该将其块存储在本地文件系统的何处(非必配)
      • 块的副本数
      • 块的大小
      • secondarynamenode守护进程的http地址:主机名和端口号
      • 文件的检测目录
      • 日志edits的检测目录
    • mapred-site.xml(MapReduce使用)
      • 配置作业历史服务器的http地址19888
      • 指定mapreduce使用yarn资源管理器
      • 配置作业历史服务器的地址
    • yarn-site.xml(yarn使用)
      • 指定yarn的shuffle技术
      • 指定resourcemanager的主机名
      • 可选
        • 配置resourcemanager的webui的监控页面8088
        • 指定shuffle对应的类
        • 配置resourcemanager的内部通讯地址
        • 配置resourcemanager的scheduler的内部通讯地址
        • 配置resourcemanager的资源调度的内部通讯地址
        • 配置resourcemanager的管理员的内部通讯地址
  • HDFS
    • HDFS常用命令
      hadoop fs,使用范围更大
      hdfs dfs,范围相对较小,两者之间没有太大区别
      • 创建目录
        • -mkdir
      • 上传指令
        • -put
        • -moveFromLocal
        • -copyFromLocal
      • 查看指令
        • -ls
        • -cat
        • -tail
      • 下载指令
        • -copyToLocal
        • -get
      • 删除指令
        • -rm
        • -rmdir
      • 查看磁盘利用率和文件大小
        • -df
        • -du
      • 向hdfs中的文件里追加内容
        • -appendToFile
      • 修改权限
        • -chgrp
        • -chmod
        • -chown
      • 修改文件的副本数
        • -setrep
      • 查看文件的状态
        • -stat
    • HDFS组成
      • NameNode
        1、在内存中维护分布式文件系统中的目录树结构
        2、保存在分布式文件系统中,每一个文件的块的信息(位置、副本)
        3、实施副本策略(保证在某个DataNode宕机或重启后,副本的新增和减少)
        4、处理客户端的交互(上传文件,删除文件,获取文件,拷贝,移动等)
      • DataNode
        1、真正存储数据的节点(数据是以块的形式存在)
        2、和客户端进行交互,处理客户端的读写请求
        3、向NameNode发送心跳包,汇报自己的状态(自己还活着,自己存储的数据信息),3秒发送一个
      • SecondaryNameNode
        帮助NameNode合并fsimage和edits文件
      • Client接口
        HDFS提供的各种语言操作HDFS的接口
        1、与NameNode进行交互,获取文件的存储位置(读/写两种操作中)
        2、与DataNode进行交互,写入数据,或者读取数据
        3、上传时分块进行存储,读取时分片进行读取
      • 镜像文件fsimage
        命名空间镜像文件,namenode会在内存中维护文件系统的元数据(如修改时间,访问时间,访问权限,副本数据,块大小,文件块列表信息等),同时会将这些数据持久化到本地磁盘,形成一个完整的永久检查点,也就是这个fsimage文件
        查看fsimage文件:hdfs oiv -i fsimage_xxxx -o ~/fs.xml -p XML(-p可省略,默认xml)
        oiv:offline fsimage viewer
        -p:processor,支持binary、XML(默认),stats(分析和打印每种操作的数量)
      • 日志文件edit
        编辑日志文件,hdfs文件系统在发生打开、关闭、创建、删除、重命名等操作时产生的信息保存在内存和持久化到磁盘上,生成edit编辑日志文件。比如上传文件后,会生成事务txid,文件inodeid,数据块副本数,数据块id,数据块大小,访问时间,修改时间等;
        查看edit文件:hdfs oev -i edits_inprogress_xxx -o ~/ed3.xml -p XML
        oev:offline edits viewer
    • HDFS工作机制#重点
      • NameNode启动过程
        1、NameNode在启动时,会先加载name目录下最近的fsimage文件,将里面的保存的元数据加载到内存中,这样内存里就有了之前检查点里存储的所有元数据。但是此时还少了最近一次检查点到关闭系统时的部分数据,也就是edit日志文件里操作的那些数据;
        2、加载剩下的edit日志文件,将最近一次检查点到目前为止的所有日志文件加载到内存里,重演一次客户端的操作,这样,内存中的元数据就是最新的了;
        3、进行检查点设置(满足条件会进行),NameNode会终止之前正在使用的edit文件,创建一个空的edit日志文件。然后将所有的未合并过的edit日志文件和fsimage文件进行合并,产生一个新的fsimage;
        4、在安全模式下,等待DataNode节点的心跳反馈,当收到99.9%的块的至少一个副本后,退出安全模式,并转为正常状态。
      • 安全模式介绍
        定义:安全模式是HDFS所处的一种特殊状态,在这种状态下,文件系统只接受读数据请求,而不接受删除、修改等变更请求。
        • NameNode启动
          NameNode启动时,首先将镜像文件(Fsimage)载入内存,并执行编辑日志(Edits)中的各项操作。一旦在内存中成功建立文件系统元数据的镜像,则创建一个新的Fsimage文件和一个空的编辑日志。此时,NameNode开始监听DataNode请求。在这个过程期间,NameNode一直运行在安全模式,即NameNode的文件系统对于客户端来说是只读的。
        • DataNode启动
          系统中的数据块的位置并不是由NameNode维护的,而是以块列表的形式存储在DataNode中。在系统的正常操作期间,NameNode会在内存中保留所有块位置的映射信息。在安全模式下,各个DataNode会向NameNode发送最新的块列表信息,NameNode了解到足够多的块位置信息之后,即可高效运行文件系统
        • 安全模式退出判断
          如果满足“最小副本条件”,NameNode会在30s之后退出安全模式。所谓最小副本条件指的是在整个文件系统中99.9%的块满足最小副本级别(默认值:dfs.replication.min=1)。在启动一个刚刚格式化的HDFS集群时,因为系统中还没有任何块,所以NameNode不会进入安全模式。
          注意:这里为什么不是100%呢,主要考虑到不能因为极个别的服务器影响到整个集群的启动
      • DataNode与NameNode通信(心跳机制)
        1、master启动 时会开启一个IPC服务,等待slave连接;
        2、slave启动后,会主动连接IPC服务,每个3s连接一次(这个时间可通过设置heartbeat调整)。这个定时连接的行为称为心跳机制。slave通过心跳给master汇报自己信息,master通过心跳下达命令;
        3、NameNode通过心跳得知DataNode状态。ResourceManager通过心跳得知NodeManager状态;
        4、当master长时间没有收到slave信息时,就认为slave挂掉了;
        • 长时间的定义:默认10分钟30秒,计算公式:2*recheck+10*heartbeat
          recheck:属性dfs.namenode.heartbeat.recheck-interval,默认值为5分钟,单位毫秒
          heartbeat:属性dfs.namenode.interval,默认值3秒,单位秒
          两者都在hdfs-site.xml进行修改和配置
      • SecondaryNameNode的工作机制(检查点机制)
        SecondaryNameNode是HDFS集群中的重要组成部分,它可以辅助NameNode进行fsimage和editlog的合并工作,减小editlog文件大小,以便缩短下次NameNode的重启时间,能尽快退出安全模式。
        • 工作过程
          1、snn请求nn停止使用正在编辑的editlog文件,NameNode会创建新的editlog文件,同时更新seen_txid文件。
          2、snn通过http协议获取NameNode上的fsimage和editlog文件。
          3、snn将fsimage读进内存当中,并逐步分析editlog文件里的数据进行合并操作,然后写入新文件fsimage_x.ckpt文件中。
          4、snn将新文件fsimage_x.ckpt通过http协议发送回NameNode。
          5、NameNode再进行更名操作。
      • 网络拓扑
      • 机架感知
      • 节点动态上线
      • 节点动态下线
      • HDFS管理命令
    • 数据流#重点
      • 读流程

      • 写流程

精彩评论(0)

0 0 举报