HDFS介绍

HDFS 是 Hadoop Distribute File System 的简称,意为:Hadoop 分布式文件系统。是 Hadoop 核心组件之一,作为最底层的分布式存储服务而存在。

分布式文件系统解决的问题就是大数据存储。它们是横跨在多台计算机上的存储系统。分布式文件系统在大数据时代有着广泛的应用前景,它们为存储和处理超大规模数据提供所需的扩展能力。

hdfs 改群组 hdfs集群_hadoop

HDFS的特性

是一个文件系统,用于存储文件,通过统一的命名空间目录树来定位文件;
是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。

master/slave 架构

HDFS 采用 master/slave 架构。一般一个 HDFS 集群是有一个 Namenode 和一定数目的Datanode 组成。Namenode 是 HDFS 集群主节点,Datanode 是 HDFS 集群从节点,两种角色各司其职,共同协调完成分布式的文件存储服务。

分块存储

HDFS 中的文件在物理上是分块存储(block)的,块的大小可以通过配置参数来规定,默认大小在 hadoop2.x 版本中是 128M。

名字空间(NameSpace)

HDFS 支持传统的层次型文件组织结构。用户或者应用程序可以创建目录,然后将文件保存在这些目录里。文件系统名字空间的层次结构和大多数现有的文件系统类似:用户可以创建、删除、移动或重命名文件。
Namenode 负责维护文件系统的名字空间,任何对文件系统名字空间或属性的修改都将被Namenode 记录下来。
HDFS 会给客户端提供一个统一的抽象目录树,客户端通过路径来访问文件,形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data。

Namenode 元数据管理

我们把目录结构及文件分块位置信息叫做元数据。Namenode 负责维护整个hdfs文件系统的目录树结构,以及每一个文件所对应的 block 块信息(block 的id,及所在的datanode 服务器)。

Datanode 数据存储

文件的各个 block 的具体存储管理由 datanode 节点承担。每一个 block 都可以在多个datanode 上。Datanode 需要定时向 Namenode 汇报自己持有的 block信息。 存储多个副本(副本数量也可以通过参数设置 dfs.replication,默认是 3)。

副本机制

为了容错,文件的所有 block 都会有副本。每个文件的 block 大小和副本系数都是可配置的。应用程序可以指定某个文件的副本数目。副本系数可以在文件创建的时候指定,也可以在之后改变。

一次写入,多次读出

HDFS 是设计成适应一次写入,多次读出的场景,且不支持文件的修改。 正因为如此,HDFS 适合用来做大数据分析的底层存储服务,并不适合用来做.网盘等应用。

hdfs的命令行使用

ls 显示目录

hdfs dfs -ls [-R]
用例:hdfs dfs -ls /user/hadoop/file1

mkdir 创建目录

hdfs dfs -mkdir [-p]
用例:hdfs dfs -mkdir /user/hadoop/dir1 /user/hadoop/dir2

moveFromLocal

hdfs dfs -moveToLocal [-crc]
输出一个”not implemented“信息。

moveToLocal

hdfs dfs -moveToLocal [-crc]

mv

hdfs dfs -mv URI [URI …]
用例: hdfs dfs -mv /user/hadoop/file1 /user/hadoop/file2 目标文件不能存在,否则命令不能执行,相当于给文件重命名并保存

put 添加文件到hdfs

hdfs dfs -put …
从本地文件系统中复制单个或多个源路径到目标文件系统。也支持从标准输入中读取输入写入目标文件系统。
• hdfs dfs -put localfile /user/hadoop/hadoopfile
• hdfs dfs -put localfile1 localfile2 /user/hadoop/hadoopdir
• hdfs dfs -put localfile hdfs://nn.example.com/hadoop/hadoopfile
• hdfs dfs -put - hdfs://nn.example.com/hadoop/hadoopfile Reads the input from stdin.

cat 查看文件内容

hdfs dfs -cat URI [URI …]
将路径指定文件的内容输出到stdout。

cp 复制文件(夹)

hdfs dfs -cp [-f] [-p | -p[topax]] URI [URI …]
可以覆盖,可以保留原有权限信息。
将文件从源路径复制到目标路径。这个命令允许有多个源路径,此时目标路径必须是一个目录。

rm 删除文件

删除指定的文件。只删除非空目录和文件。
hdfs dfs -rm [-f] [-r|-R] [-skipTrash] URI [URI …]

chmod 修改权限.

hdfs dfs -chmod [-R] <MODE[,MODE]… | OCTALMODE> URI [URI …]

chown 修改所有者

hdfs dfs -chown [-R] [OWNER][:[GROUP]] URI [URI ]

expunge 清空回收站.

hdfs dfs -expunge

tail

hadoop fs -tail [-f] URI
将文件尾部1K字节的内容输出到stdout。支持-f选项,行为和Unix中一致。

du

hadoop fs -du URI [URI …]
显示目录中所有文件的大小,或者当只指定一个文件时,显示此文件的大小。
示例:

hadoop fs -du /user/hadoop/dir1 /user/hadoop/file1 hdfs://host:port/user/hadoop/dir1

参考文档:http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_shell.html