HDFS

作者: BlackChen | 来源:发表于2018-01-16 22:22 被阅读38次

    HDFS

    Hadoop Distributed File System

    易于扩展的分布式文件系统
    运行在大量普通廉价机器上,提供容错机制

    优点

    • 高容错性
      数据自动保存多个副本
      副本丢失后,自动恢复
    • 适合大数据批处理
      移动计算不移动数据
      数据位置暴露给计算框架
      GB、TB甚至PB级别数据
      百万规模以上的文件数量
      10K节点规模
    • 流式访问
      一次写入,多长读取
      保证数据一致性
    • 构建成本低,安全可靠
      构建在廉价的机器上
      通过多副本提高可靠性
      提供了容错和回复机制

    缺点

    • 不适合低延迟数据访问
    • 不适合大量小文件存储
      占用NameNode大量内存空间
      磁盘寻道时间超过读取时间
    • 不适合并发写入
      一个文件只能有一个写入者
    • 不提供文件的随机修改
      只支持追加

    HDFS基本架构和原理

    HDFS架构图

    HDFS核心概念

    ActiveNameNode

    • 主Master(只有一个)
    • 管理HDFS文件系统的命名空间
    • 维护文件元数据信息
    • 管理副本策略(默认3个副本)
    • 处理客户端读写请求


    Standby NameNode

    • Active NameNode的热备节点
    • 周期性同步edits编辑日志,定期合并fsimage与edits到本
      地磁盘
    • Active NameNode故障快速切换为新的Active

    NameNode元数据文件

    • edits:编辑日志,客户端对目录和文件的写操作操首先被记到
      edits日志中,如:创建文件、删除文件等
    • fsimage:文件系统元数据检查点镜像文件,保存了文件系统中
      所有的目录和文件信息,如:一个目录下有哪些子目录、子文 件,文件名,文件副本数,文件由哪些块组成等
    • NameNode 内存中保存一份最新的镜像信息
      镜像内容= fsimages + edits
    • NameNode定期将内存中的新增的edits与fsimage合并保存到磁盘

    DataNode

    • Slave工作节点,可以启动多个
    • 存储数据块和数据校验和
    • 执行客户端的读写请求操作
    • 通过心跳机制定期向NameNode汇报运行状态和所有块列表信息
    • 在集群启动时DataNode向NameNode提供存储的Block块
      列表信息

    Block数据块

    • 文件写入到HDFS会被切分成若干个Block块
    • 数据块大小固定,默认大小128MB,可自定义修改
    • HDFS最小存储单元
    • 若一个块的大小小于设置的数据块大小,则不会占用整
      个块的空间
    • 默认情况下每个Block有三个副本

    Client

    • 文件切分
    • 与NameNode交互获取文件元数据信息
    • 与DataNode交互,读取或写入数据
    • 管理HDFS

    HDFS为什么不适合存储小文件

    • 元数据信息存储在NameNode内存中,内存大小有限
    • NameNode存储Block数目有限
      一个block元信息消耗大约150byte内存
      如果一个文件大小为10K,则1亿个文件大小仅有1TB,却消耗NameNode 20GB内存
    • 存取大量小文件消耗大量的磁盘寻道时间

    HDFS高可用

    HDFS内部机制

    Block副本放置策略

    HDFS写入流程

    HDFS读取流程

    HDFS数据完整性

    • 读写数据传输完整性使用校验和--CRC-32
    • 使用其他副本代替损坏的block
      DataNode 后台线程定期检测,通过心跳定期向NameNode汇报,NameNode标记损坏的块,在其他街道拷贝新的副本

    HDFS 服务脚本

    sbin目录

    • start-all/stop-all.sh
      启动/停止Hadoop集群中的全部服务(hdfs服务和yarn服务)

    • start-dfs.sh/stop-dfs.sh
      只启动/关闭HDfs相关的全部服务 (NameNode,DataNode,JournalNode)

    • hadoop-daemon.sh start/stop namenode/datanode/journalnode
      单独启动/停止单台hdfs某个服务
      -start-yarn.sh /stop-yarn.sh
      启动/停止yarn相关的全部服务(ResourceManager,NodeManager)

    • yarn-daemon.sh start/stop resourcemanager/nodemanager
      单独启动/停止单台yarn某个服务

    HDFS文件操作命令

    bin/hadoop fs 或者bin/hfds dfs



    hdfs dfsadmin -report

    [hadoop@hadoop0 bin]$ hdfs dfsadmin -report
    Configured Capacity: 36182937600 (33.70 GB)
    Present Capacity: 31441104896 (29.28 GB)
    DFS Remaining: 31432712192 (29.27 GB)
    DFS Used: 8392704 (8.00 MB)
    DFS Used%: 0.03%
    Under replicated blocks: 10
    Blocks with corrupt replicas: 0
    Missing blocks: 0
    Missing blocks (with replication factor 1): 0
    
    -------------------------------------------------
    Live datanodes (3):
    
    Name: 10.211.55.8:50010 (hadoop3)
    Hostname: hadoop3
    Decommission Status : Normal
    Configured Capacity: 12060979200 (11.23 GB)
    DFS Used: 2797568 (2.67 MB)
    Non DFS Used: 945188864 (901.40 MB)
    DFS Remaining: 10476720128 (9.76 GB)
    DFS Used%: 0.02%
    DFS Remaining%: 86.86%
    Configured Cache Capacity: 0 (0 B)
    Cache Used: 0 (0 B)
    Cache Remaining: 0 (0 B)
    Cache Used%: 100.00%
    Cache Remaining%: 0.00%
    Xceivers: 1
    Last contact: Mon Jan 22 20:54:24 CST 2018
    
    
    Name: 10.211.55.7:50010 (hadoop4)
    Hostname: hadoop4
    Decommission Status : Normal
    Configured Capacity: 12060979200 (11.23 GB)
    DFS Used: 2797568 (2.67 MB)
    Non DFS Used: 944205824 (900.46 MB)
    DFS Remaining: 10477703168 (9.76 GB)
    DFS Used%: 0.02%
    DFS Remaining%: 86.87%
    Configured Cache Capacity: 0 (0 B)
    Cache Used: 0 (0 B)
    Cache Remaining: 0 (0 B)
    Cache Used%: 100.00%
    Cache Remaining%: 0.00%
    Xceivers: 1
    Last contact: Mon Jan 22 20:54:24 CST 2018
    
    
    Name: 10.211.55.9:50010 (hadoop2)
    Hostname: hadoop2
    Decommission Status : Normal
    Configured Capacity: 12060979200 (11.23 GB)
    DFS Used: 2797568 (2.67 MB)
    Non DFS Used: 943620096 (899.91 MB)
    DFS Remaining: 10478288896 (9.76 GB)
    DFS Used%: 0.02%
    DFS Remaining%: 86.88%
    Configured Cache Capacity: 0 (0 B)
    Cache Used: 0 (0 B)
    Cache Remaining: 0 (0 B)
    Cache Used%: 100.00%
    Cache Remaining%: 0.00%
    Xceivers: 1
    Last contact: Mon Jan 22 20:54:24 CST 2018
    

    hdfs dfsadmin -safemode 安全模式

    [hadoop@hadoop0 bin]$ hdfs dfsadmin -safemode
    Usage: hdfs dfsadmin [-safemode enter | leave | get | wait]
    
    [hadoop@hadoop0 bin]$ hdfs dfsadmin -safemode get
    Safe mode is OFF in hadoop0/10.211.55.5:9000
    Safe mode is OFF in hadoop1/10.211.55.10:9000
    

    HDFS增加和移除节点

    集群中加入新的datanode方法
    • 在新的机器上拷贝一份包含配置文件的hadoop安装包 • 单独启动datanode
    sbin/hadoop-daemon.sh start datanode从集群中移除故障或者废弃的datanode
    • 将需要移除的datanode的主机名或者IP加入到NameNode的黑名单 加入黑名单方法: 修改NameNode的hdfs-site.xml文件,设置dfs.hosts.exclude配置 的值为需要移除的datanode的主机名或者IP
    • 更新黑名单
    bin/hadoop dfsadmin –refreshNodes

    HDFS数据均衡器

    • 数据块重新分布
      sbin/start-balancer.sh -threshold 平衡值(默认10,表示10%)
    • 平衡阈值
      HDFS达到平衡状态的磁盘使用率偏差值
      值越低,各节点越平衡,但是消耗时间也更长

    HDFS冷数据处理

    “冷”数据文件
    • 很长时间没有被访问过的数据文件(如半年内)
    处理方法
    • 高压缩比算法进行压缩,如Gzip或bzip2 • 小文件合并

    相关文章

      网友评论

          本文标题:HDFS

          本文链接:https://www.haomeiwen.com/subject/cayeoxtx.html