初识Hadoop之HDFS

原文地址: https://itweknow.cn/detail?id=54 ,欢迎大家访问。

练习本文中提到的命令行接口的前提条件是至少在一台linux机器或者虚拟机上安装了单机版的Hadoop,当然了如果你有一个集群的话更好了。如果你还不知道如何在Linux上安装Hadoop的话,请戳这里。

概念

DFS是分布式文件系统(distributed filesystem)的简称,而HDFS即Hadoop Distributed Filesystem,是Hadoop自带的分布式文件系统。

HDFS的一些特性

  • 存储超大文件
    由于HDFS是分布式的文件系统,所以不受单台机器的存储大小的限制,可以存储超大文件,目前已经达到了PB级了。
  • 流式访问数据
  • 商用硬件
    Hadoop可以运行在廉价的商用硬件,这样带来的问题就是节点的故障率会比较高。所以HDFS被设计成能够无缝式的处理上述故障并且继续运行,不让用户察觉到明显的中断。
  • 不适合低时间延迟的数据访问
    由于Hadoop的流式数据访问,访问数据的会有写延迟,所以不太适合低时间延迟的数据访问,一般情况下这种需求我们会使用关系型数据库来实现。
  • 不适合大量小文件
    不适合的原因是namenode将文件系统的元数据存储在内存中,每存储一个文件都需要在namenode中存储该文件的目录、存储的datanode等数据。所以如果文件的数量达到数十亿的话namenode的内存很可能不够用了。
  • 不支持多用户写入,任意修改文件
    HDFS只支持单个写入者,而且支持在文件的末尾添加内容,不能任意的修改文件。

与HDFS相关的一些名词

  • NameNode
    管理节点,管理系统的命名空间,维护着整个文件系统的结构和目录信息,通常情况下一个Hadoop集群只会有一个工作的NameNode。
  • DataNode
    工作节点,文件系统的工作节点,主要是根据需要进行存储或者检索数据块,并且定期向NameNode报告它们所存储的数据块列表。
  • 数据块
    同我们常使用的磁盘上的文件系统一样,HDFS也有数据块的概念,默认的大小为128M。
  • 块缓存
    一般情况下,我们通过HDFS从DataNode中检索数据时,DataNode都是从磁盘中读取,但是对于访问很频繁的文件,它所对于的数据块可能会被缓存到DataNode的内存中,以加快读取速度,这就是所谓的块缓存。
  • 联邦HDFS
    其实这个就是为了解决Hadoop不适合存储数量庞大的文件的问题,同时由多个NameNode来维护整个文件系统的系统树以及文件和目录,每个NameNode负责管理文件系统命名空间中的一部分。
  • 高可用性
    主-备模式,当主NameNode失效后,备用NameNode会很快生效,并接管工作。

命令行接口

命令行接口是HDFS所有类型的接口中最简单的,也是每个开发者都必须要掌握的。​

  • 创建目录
​hadoop fs -mkdir /test
  • 查看目录
hadoop fs -ls /
  • 上传文件
hadoop fs -put test.txt /test

紧跟-put后面的test.txt是要推送到HDFS中的文件,/test是指定要推送到HDFS上哪个目录下面。

  • 删除文件
hadoop fs -rm /test/test.txt​

其实通过上面例举的几个命令我们可以看出HDFS的文件操作命令几乎和Linux上的命令一致,这样我们使用起来会很容易上手。在下篇文章中,我们将介绍一下HDFS的Java API。

猜你喜欢

转载自blog.csdn.net/sinat_27629035/article/details/85057905