练习本文中提到的命令行接口的前提条件是至少在一台 Linux 机器或者虚拟机上安装了单机版的 Hadoop, 当然了如果你有一个集群的话更好了. 如果你还不知道如何在 Linux 上安装 Hadoop 的话, 请戳这里. https://itweknow.cn/detail?id=52
概念
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.
来源: http://www.jianshu.com/p/e05fc2479ccd