暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

HDFS分布式文件系统

科技Dou知道 2021-02-26
262

Hadoop分布式文件系统(HDFS)是指被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统(Distributed File System)。

它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。

HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的。HDFS是Apache Hadoop Core项目的一部分。

HDFS有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求(requirements)这样可以实现流的形式访问(streaming access)文件系统中的数据。

HDFS采用了主从(Master/Slave)结构模型,一个HDFS集群是由一个NameNode和若干个DataNode组成的。其中NameNode作为主服务器,管理文件系统的命名空间和客户端对文件的访问操作;集群中的DataNode管理存储的数据。[1]

HDFS的基本组件
  • namenode:管理整个文件系统的元数据,维护目录结构、响应客户端请求

  • datanode:复制管理用户的文件数据块,管理用户提交的数据 心跳机制 块报告

  • secondarynamenode:namenode的助理,帮助加载元数据,紧急情况下(例如namenode宕机),可以帮助恢复数据 [2]


(此图来源:https://www.cnblogs.com/ken-kqj/p/10180408.html)

HDFS读数据流程
  1. 客户端向NameNode发起读数据请求;

  2. NameNode响应请求并告诉客户端要读的文件的数据块位置(存在哪个DataNode上);

  3. 客户端到对应DataNode读取数据,当数据读取到达末端,关闭与这个DataNode的连接,并查找下一个数据块,直到文件数据全部读完;

  4. 最后关闭输出流。


HDFS写数据流程
  1. 客户端向NameNode发起写数据请求;

  2. NameNode相应请求(NameNode会检查要创建的文件是否已经存在,创建者是否有权限,成功会创建一个记录,失败会报异常); 

  3. 客户端将文件进行切片(分成数据块),然后上传数据块,按照一个一个的形式进行发送,每个数据块都要写到三个DataNode上;

  4. 成功后DataNode会返回一个确认队列给客户端,客户端进行效验,然后客户端上传下一个数据块到DataNode,直到所有数据块写入完成;

  5. 当所有数据块全部写入成功后,客户端会向NameNode发送一个反馈并关闭数据流。[3]


HDFS的Shell操作


HDFS提供了多种数据访问方式,其中命令行的方式是最简单的,调用文件系统(FS)Shell命令应使用 bin/hadoop fs <args>的形式。大多数FS Shell命令的行为和对应的Unix Shell命令类似。(以下内容参考[4])


1. -help命令输出这个命令参数手册
    $ hadoop fs -help

    2. -ls命令显示目录信息
      $ hadoop fs -ls /      # 显示HDFS根目录信息

      3. -mkdir命令在hdfs上创建目录
        $ hadoop fs -mkdir -p /a/b/cc/dd    # 递归创建 /aaa/bbb/cc/dd 目录

        4. -cat命令:显示文件内容  
          $ hadoop fs -cat hello.txt    # 查看HDFS上 hello.txt 文件内容

          5. -tail命令:显示一个文件的末尾
            $ hadoop fs -tail /weblog/access_log.1

            6. -text命令:以字符形式打印一个文件的内容
              $ hadoop fs -text /weblog/access_log.1

              7. -chgrp令、-chmod命令和-chown命令与linux文件系统中的用法一样,对文件所属权限
                $ hadoop fs -chmod 666 /hello.txt
                $ hadoop fs -chown someuser:somegrp /hello.txt

                8. -cp从hdfs的一个路径拷贝hdfs的另一个路径
                  $ hadoop fs -cp /a/jdk.tar.gz /b/    # 将 a/jdk.tar.gz 文件拷贝到 b/ 路径下

                  9. -mv在hdfs目录中移动文件
                    $ hadoop fs -mv /a/jdk.tar.gz /    # 将 /a/jdk.tar.gz 文件移动到 / 下

                    10. -get 从hdfs下载文件到本地
                      $ hadoop fs -get /a/jdk.tar.gz /home/hadoop/storage/      # 将HDFS上的 /a/jdk.tar.gz 文件下载到本地 /home/hadoop/storage/ 路径下

                      11. -put:从本地上传到hdfs中
                        $ hadoop fs -put /home/hadoop/software/jdk.tar.gz  /a/jdk.tar.gz    # 将本地 home/hadoop/software/jdk.tar.gz 文件上传到HDFS的 a/ 路径下

                        12. -rm删除文件或文件夹
                          $ hadoop fs -rm -r /aaa/bbb/    # 递归删除 /aaa/bbb/ 目录
                           
                          13. -rmdir删除空目录
                            $ hadoop fs -rmdir /aaa/bbb/ccc

                            14. -df 统计文件系统的可用空间信息
                              $ hadoop fs -df -h /
                               
                              15. -du统计文件夹的大小信息
                                $ hadoop fs -du -s -h /aaa/*    # 统计HDFS上 aaa/ 路径下所有文件大小(包括文件夹)

                                16. -count统计一个指定目录下的文件节点数量
                                  $ hadoop fs -count /aaa/

                                  End

                                  本文到这里就结束了哦~通过以上介绍相信你已经对HDFS分布式文件系统有了一些初步认识,下期介绍HDFS Java API操作,最后别忘了关注一下公众号哦



                                  参考:

                                  [1] https://baike.baidu.com/item/hdfs/4836121?fr=aladdin

                                  [2] https://blog.csdn.net/qq_43755771/article/details/90725393

                                  [3] https://www.cnblogs.com/ken-kqj/p/10180408.html

                                  [4] https://cloud.tencent.com/developer/article/1717875

                                  声明:

                                  1.本文为 @caimeng99526 的原创文章,转载请附上原文出处链接。

                                  2.本文中所转载文章及部分图片均来自公开网络,仅供学习交流使用,不会用于任何商业用途。

                                  3.如果出处标注有误或侵犯到原著作者权益,请联系 @caimeng99526 删除,谢谢。

                                  4.转载本公众号中的文章请注明原文链接和作者,否则产生的任何版权纠纷均与本公众号无关。



                                  文章转载自科技Dou知道,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                  评论