Hadoop——(分布式文件系统HDFS,HDFS 组织架构,HDFS核心机制,HDFS文件块,HDFS文件块)

分布式文件系统HDFS

  1. 随着数据量越来越大,在一个操作系统存不下所有数据的时候,那么需要将数据分配到更多的操作系统管理的磁盘中,但是这么做不方便管理和维护,所以需要一种系统来管理多台机器上的文件。这就是分布式文件管理系统。
  2. HDFS (全称:Hadoop Distribute File System,Hadoop 分布式文件系统)只是分布式文件管理系统中的一种。
  3. HDFS 是 Hadoop 核心组成,是一个分布式文件系统,用于存储文件,并且HDFS通过目录树来定位管理的文件。
  4. HDFS是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色(分布式本质是拆分,各司其职);
  5. HDFS横跨多台计算机,为存储和处理超大规模数据提供所需的扩展能力。

HDFS 使用场景

  1. HDFS适合一次写入,多次读出的场景,且不支持文件的修改。
  2. HDFS适合做数据分析,不适合用于做网盘类的应用。

HDFS的优点

  1. 高容错性:
    1. 数据自动保存多个副本,HDFS以增加数据副本的形式,提高容错性。
      在这里插入图片描述
    2. HDFS在某个副本丢失后,可以自动恢复
  2. HDFS适合处理大数据
    1. HDFS能处理数据规模达到GB,TB,甚至PB级别的数据。
    2. HDFS能够处理百万规模以上的文件数量,数据量很大。
  3. HDFS 可以构建在廉价的机器上,通过多副本机制,提高可靠性。

HDFS缺点

  1. HDFS不适合低延时数据访问,比如毫秒级的存储数据,HDFS做不了。
  2. HDFS无法高效的对大量小文件进行存储
    1. 存储大量小文件时,会占用NameNode大量的内存来存储文件目录和块信息,但是NameNode的内存总是有限的。
    2. 小文件存储的寻址时间会超过读取时间,违反了HDFS的设计目的
  3. HDFS不支持并发写入,文件随机修改
    1. HDFS只支持一个文件只能有一个写,不允许多个线程同时写。
    2. HDFS仅支持数append(追加)操作,不支持文件的随机修改。

HDFS 组织架构

1.

  1. HDFS 的架构是典型的 Master/Slave 结构,并且HDFS 架构主要由四个部分组成,分别为HDFS Client、NameNode、DataNode和SecondaryNameNode。
  2. Client:就是客户端。
    1. 文件切分。文件上传HDFS的时候,Client将文件切分成一个一个的Block,然后进行存储;
    2. 与NameNode交互,获取文件的位置信息;
    3. 与DataNode交互,读取或者写入数据;
    4. Client可以使用一些命令来管理HDFS,比如NameNode格式化。
    5. Client可以使用一些命令来访问HDFS,比如对HDFS增删改查操作。
  3. NameNode(nn):Hdfs集群的管理者,即Master,其主要作用有:
    1. 管理HDFS的名称空间(NameSpace);
    2. 管理数据块(Block)映射信息;
    3. 配置副本策略;
    4. 负责处理客户端读写请求。
  4. DataNode:就是Slave。NameNode下达命令,DataNode执行实际的操作。
    1. 存储实际的数据块;
    2. 执行数据块的读/写操作。
  5. SecondaryNameNode(2N):2N不是NameNode的热备份,当NameNode挂掉的时候,SecondaryNameNode不能马上替换NameNode并提供服务。
    1. SecondaryNameNode辅助NameNode,分担NameNode的工作量,比如定期合并文件并推送给NameNode.
    2. SecondaryNameNode在紧急情况下,可辅助恢复NameNode.
    3. SecondaryNameNode帮助NameNode合并编辑日志,减少NameNode 启动时间
      在这里插入图片描述

HDFS核心机制

  1. 分块存储(block机制):HDFS 中的文件在物理上是分块存储(block)的,block的大小可以通过配置参数来规定;Hadoop1.x版本中HDFS 默认 BlockSize是64M,Hadoop2.x版本中HDFS 默认 BlockSize是128M;HDFS 中的 block 默认保存3份

  2. 命名空间(NameSpace)

    1. HDFS 支持传统的层次型文件组织结构。用户或者应用程序可以创建目录,然后将文件保存在这些目录里。文件系统名字空间的层次结构和大多数现有的文件系统类似:用户可以创建、删除、移动或重命名文件。
    2. Namenode 负责维护文件系统的名字空间,任何对文件系统名字空间或属性的修改都将被Namenode 记录下来。
    3. HDFS提供给客户单一个抽象目录树,访问形式:hdfs://namenode的hostname:port/test/input hdfs://linux121:9000/test/input
  3. NameNode元数据管理

    1. HDFS把目录结构及文件分块位置信息叫做元数据
    2. NameNode的元数据记录每一个文件所对应的block信息(block的id,以及所在的DataNode节点的信息)
  4. ** DataNode数据存储**:

    1. 负责HDFS数据存储的是DataNode,文件的各个 block 的具体存储管理由 DataNode 节点承担。
    2. 一个block会有多个DataNode来存储,DataNode会定时向NameNode来汇报自己持有的block信息。
  5. 副本机制

    1. 为了容错,文件的所有 block 都会有副本。每个文件的 block 大小和副本系数都是可配置的。
    2. 应用程序可以指定某个文件的副本数目。副本数量可以在文件创建的时候指定,也可以在之后改变。副本数量默认是3个。
  6. 一次写入,多次读出

    1. HDFS 是设计成适应一次写入,多次读出的场景,且不支持文件的随机修改。 (支持追加写入,不只支持随机更新)。
    2. HDFS 适合用来做大数据分析的底层存储服务,并不适合用来做网盘等应用(主要是因为修改不方便,延迟大,网络开销大,成本太高)

HDFS文件块

  1. HDFS文件在物理上时分块存储(Block),Block块的大小可以通过配置参数(dfs.blocksize)规定,Hadoop1.x默认是64M,Hadoop2.x默认是128M。
  2. 如果寻址时间约为10ms,而传输速率为100MB/s,为了使寻址时间仅占传输时间的1%,块的大小:10ms×100×100M/s = 100M,如图
    2.
  3. HDFS的Block块不能设置太小,也不能设置太大:
  4. HDFS的块比磁盘的块大,其目的是为了最小化寻址开销。如果块设置得足够大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。因而,传输一个由多个块组成的文件的时间取决于磁盘传输速率。
    1. Block块太小,会增加寻址时间,程序一直在找Blcok块开始的位置。
    2. Block块太大,从磁盘传输数据的时间会明显大于定位这个Block块开始位置所需要的时间,导致程序在处理这块数据时,会非常慢。
  5. HDFS块的大小设置主要取决于磁盘传输速率。

HDFS命令行操作

  1. 基本语法:bin/hadoop fs 具体命令 OR bin/hdfs dfs 具体命令

  2. 查看命令提示:bin/hdfs dfs

  3. 启动Hadoop集群:

    sbin/start-dfs.sh
    sbin/start-yarn.sh
    
  4. -help:输出这个命令参数 :

    hadoop fs -help rm
    
  5. -ls:显示目录信息:

    hadoop fs -ls /
    
  6. -mkdir:在HDFS上创建目录:

    hadoop fs -mkdir -p /目录名
    
  7. -moveFromLocal:从本地剪切粘贴到HDFS:

    hadoop fs -moveFromLocal 文件位置 文件粘贴位置
    
  8. -appendToFile:追加一个文件到已经存在的文件末尾:

    hadoop fs -appendToFile  追加文件位置  被追加的文件位置
    
  9. -cat:显示文件内容:

    hadoop fs -cat  显示文件
    
  10. -chgrp 、-chmod、-chown:Linux文件系统中的用法一样,修改文件所属权限

    hadoop fs -chown root:root  文件名
    
  11. -copyFromLocal:从本地文件系统中拷贝文件到HDFS路径去

    hadoop fs -copyFromLocal  本地路径  HDFS路径
    
  12. -copyToLocal:从HDFS拷贝到本地

    hadoop fs -copyToLocal  HDFS路径   本地路径
    
  13. -cp :从HDFS的一个路径拷贝到HDFS的另一个路径:

     hadoop fs -cp 原路径  目标路径
    
  14. -mv :在HDFS目录中移动文件:

    hadoop fs -mv 原路径  目标路径
    
  15. -get:等同于copyToLocal,就是从HDFS下载文件到本地:`

    hadoop fs -get HDFS路径  本地路径
    
  16. -getmerge:合并下载多个文件,比如HDFS的目录 /user/atguigu/test下有多个文件:log.1, log.2,log.3,…

    hadoop fs -getmerge /user/atguigu/test/* ./zaiyiqi.txt
    
  17. -put:等同于copyFromLoca

    [root@linux121 hadoop-2.9.2]$ hadoop fs -mkdir -p /user/root/test/
    #本地文件系统创建yarn.txt
    [root@linux121 hadoop-2.9.2]$ vim yarn.txt
    resourcemanager nodemanager
    [root@linux121 hadoop-2.9.2]$ hadoop fs -put ./yarn.txt /user/root/test/
    
  18. -tail:显示一个文件的末尾:

    hadoop fs -tail /user/root/test/yarn.txt
    
  19. -rm:删除文件或文件夹:

    hadoop fs -rm /user/root/test/yarn.txt
    
  20. -rmdir:删除空目录

    hadoop fs -rmdir /test
    
  21. -du:统计文件夹的大小信息:

    hadoop fs -du -h /user/root/test
    
  22. -setrep:设置HDFS中文件的副本数量:

    hadoop fs -setrep 10 /lagou/bigdata/hadoop.txt
    

设置的副本数只是记录在NameNode的元数据中,是否真的会有这么多副本,还得看DataNode的数量。因为目前只有3台设备,最多也就3个副本,只有节点数的增加到10台时,副本数才能达到10
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值