本次介绍HDFS,分为上,中,下,三篇
- 上篇入HDFS门介绍,常用操作
- 中篇为HDFS的读写原理介绍
- 下篇为HDFS的测试Demo,常用API
1. HDFS的基本概念
HDFS的介绍
HDFS 是 Hadoop Distribute File System 的简称, 意为: Hadoop 分布式文件系统。 是 Hadoop 核心组件之一,作为最底层的分布式存储服务而存在。
分布式文件系统解决的问题就是大数据存储。 它们是横跨在多台计算机上的存储系统。分布式文件系统在大数据时代有着广泛的应用前景,它们为存储和处理超大规模数据提供所需的扩展能力HDFS的设计目的
- 要里了解一个框架设计的目的,需要从框架出现之前面对的问题入手,这里我们进行绘图演示,说明文件的存储从简单到复杂的演化过程,最终形成了安全可靠快速的HDFS文件存储系统。
- 过程1
- 过程2
存储模式2就是简单的HDFS的存储模型,具体的存储过程,在下一篇的存储和读取中会进行详细的讲解。
2.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 适合用来做大数据分析的底层存储服务,并不适合用来做.网盘等应用,因为,修改不方便,延迟大,网络开销大,成本太高。
3. HDFS的基本操作
- Shell命令行客户端
Hadoop 提供了文件系统的 shell 命令行客户端,使用方法如下:
hadoop fs <args> //<args表示参数>
文件系统 shell 包括与 Hadoop 分布式文件系统( HDFS)以及 Hadoop 支持的其他文件系统( 如本地 FS, HFTP FS, S3 FS 等) 直接交互的各种类似 shell
的命令。 所有 FS shell 命令都将路径 URI 作为参数。
URI 格式为 scheme://authority/path。`
对于 HDFS,该 scheme 是 hdfs,对于本地 FS,该 scheme 是 file。 scheme 和 authority 是可选的。 如果未指定,则使用配置中指定的默认方案。
对于 HDFS,命令示例如下:
hadoop fs -ls hdfs://namenode:host/parent/child
//hadoop fs -ls /parent/child fs.defaultFS 中有配置
对于本地文件系统,命令示例如下:
hadoop fs -ls file:///root/
如果使用的文件系统是 HDFS,则使用 hdfs dfs 也是可以的,hadoop1.x的使用方式。
命令如下
具体演示如下
-ls
功能: 显示文件、 目录信息。
使用方法: hadoop fs -ls [-h] [-R] <args>
实例:hadoop fs -ls /user/hadoop/file1
-mkdir
功能: 在 hdfs 上创建目录, -p 表示会创建路径中的各级父目录。
使用方法: hadoop fs -mkdir [-p] <paths>
示例: hadoop fs -mkdir – p /user/hadoop/dir1
-put
功能: 将单个 src 或多个 srcs 从本地文件系统复制到目标文件系统。
使用方法: hadoop fs -put [-f] [-p] [ -|<localsrc1> .. ]. <dst>
-p:保留访问和修改时间,所有权和权限。
-f:覆盖目的地(如果已经存在)
示例: hadoop fs -put -f localfile1 localfile2 /user/hadoop/hadoopdir
- -get
功能:将文件下载到本地系统
使用方法: hadoop fs -get [-ignorecrc] [-crc] [-p] [-f] <src> <localdst>
-ignorecrc:跳过对下载文件的 CRC 检查。
-crc:为下载的文件写 CRC 校验和。
示例: hadoop fs -get hdfs://host:port/user/hadoop/file localfile
- -appendToFile
功能:追加一个文件到已经存在的文件末尾
使用方法: hadoop fs -appendToFile <localsrc> ... <dst>
示例: hadoop fs -appendToFile localfile /hadoop/hadoopfile
- -cat
功能:显示文件内容到 stdout
使用方法: hadoop fs -cat [-ignoreCrc] URI [URI ...]
示例: hadoop fs -cat /hadoop/hadoopfile
- -tail
功能: 将文件的最后一千字节内容显示到 stdout。
使用方法: hadoop fs -tail [-f] URI
-f 选项将在文件增长时输出附加数据。
示例: hadoop fs -tail /hadoop/hadoopfile
- -chmod
功能: 改变文件的权限。使用-R 将使改变在目录结构下递归进行。
示例: hadoop fs -chmod 666 /hadoop/hadoopfile
- -cp
功能:从 hdfs 的一个路径拷贝 hdfs 的另一个路径
示例: hadoop fs -cp /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2
- -mv
功能:在 hdfs 目录中移动文件
示例: hadoop fs -mv /aaa/jdk.tar.gz /
- -rm
功能: 删除指定的文件。只删除非空目录和文件。 -r 递归删除。
示例: hadoop fs -rm -r /aaa/bbb/
- -df
功能:统计文件系统的可用空间信息
示例: hadoop fs -df -h /
- -du
功能: 显示目录中所有文件大小,当只指定一个文件时,显示此文件的大小。
示例: hadoop fs -du /user/hadoop/dir1
- -setrep
功能: 改变一个文件的副本系数。 -R 选项用于递归改变目录下所有文件的副本
系数。
示例: hadoop fs -setrep -w 3 -R /user/hadoop/dir1
上篇的内容的到此结束
本博客主要对大数据的学习进行系统的讲解,感兴趣的同学可以关注订阅。