原文地址: 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。
网友评论