Hadoop学习笔记:三、初步认识HDFS
目标:
- 了解HDFS背景及定义
- 掌握HDFS的优缺点
- 掌握HDFS的组成架构
- 掌握HDFS的Shell操作
1 HDFS概述
1.1 背景及定义
-
背景
在现实情况下,随着数据量增大,一个操作系统存不下所有的数据,那么久分配到更多的操作系统的磁盘中,但是不方便管理和维护,所以就需要一个系统来管理多个机器节点上的文件。
Hadoop主要解决两个问题:一是海量数据的存储问题,即分布式文件管理系统HDFS;二是海量数据的计算问题,即分布式计算MapReduce。
-
定义
HDFS(Hadoop Distribute File System)是一个分布式的文件系统,用于存储文件,通过目录树来定位。
HDFS的使用场景:适合一次写入,多次读出的场景,且不支持文件的修改。适合做数据分析,而不适合用来做网盘使用。
1.2 优缺点
- 优点
- 高容错性
- 数据自动保存多个副本。通过增加副本的形式,提高容错性。
- 某一个副本丢失,可以自动恢复。
- 适合处理大数据
- 数据规模:能够处理数据规模达到GB、TB甚至PB级别的数据,如每日的用户行为log。
- 文件规模:能够处理百万规模以上的文件数量,数量相当之大。
- 可构建在廉价机器上,通过多副本机制,提高可靠性(横向扩展的花费是线性)
- 单台机器性能纵向扩展的问题,是有硬件瓶颈的,包括成本也会指数型增长
- 快速响应硬件故障
- 高容错性
- 缺点
- 不适合低延时数据访问,比如毫秒级的存储数据是做不到的
- 无法高效的对大量小文件进行存储
- 存储大量小文件,会占用NN大量的内存来存储文件目录和block信息,而NN的内存是有限的。
- 小文件存储的寻址时间超过了读取时间,这样和HDFS的设计目标就冲突了。
- 不支持并发写入、文件随机修改
- 一个文件只能有一个写,不允许多个线程同时写。
- 仅支持数据append(追加),不支持文件的随机修改。
2 HDFS组成架构
2.1 组成架构
- Client:客户端
- 文件切分:文件上传的时候,client将文件切分为一个个的block,然后进行上传
- 与NN交互获取文件的位置信息
- 与DN交互读取或者写入数据
- Client提供一些命令来管理HDFS,比如NN格式化
- Client可以通过一些命令来访问HDFS,比如对HDFS的增删查改操作
- NameNode:Master,是一个主管、管理者
- 管理各个DN
- 管理文件信息,文件名、文件多大、文件被切块、存储位置信息,即管理元数据信息
- 配置副本策略:DN挂掉后,数据丢失,因此需要控制DN的备份,默认3份,本机一份。
- 基于PRC心跳机制控制集群中各个节点(DN)的状态
- 处理客户端读写请求
- NN存在单点故障问题,可以启用一个备用的NN来保证元数据信息安全
- DataNode:slave,NN下达指令,DN执行实际的操作
- 存储实际的数据块
- 执行数据块的读写操作
- Secondary NameNode:并非NN的热备,当NN挂掉的时候,并不能马上替换NN提供服务
- 辅助NN,分担其工作量,比如定期合并Fsimage和Edits,并推送给NN
- 在紧急情况下,可以辅助恢复NN
2.2 文件块大小
- 分块存储,默认128M(2.x)
- HDFS的文件在物理上是分块存储(block),块的大小可以通过配置参数(dfs.blocksize)来规定,其中呢,在Hadoop2.x中默认是128m,Hadoop1.x中默认是64m。
- 在集群中的block,如果寻址时间是10ms,一般来说寻址时间是传输时间的1%,则为最佳状态,因此呢传输时间就为10ms/0.01=1s,而目前的磁盘传输速率普遍为100mb/s
- 大小可设置:HDFS的block大小设置主要取决于磁盘传输效率
- 如果HDFS的block设置太小,会增加寻址时间,程序一直在找块的开始位置
- 如果HDFS的block设置太大,那么从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间,导致程序在处理这块数据的时候,会非常慢。
3 HDFS的Shell操作
3.1 基本语法
- hadoop fs:该命令可以用于其他文件系统,不止是hdfs文件系统内,也就是说该命令的使用范围更广
- hdfs dfs:专门针对hdfs分布式文件系统
3.2 常用命令
-
查看hadoop可以执行的所有命令
hadoop fs -help
-
在hadoop根目录创建文件夹
hadoop fs -mkdir -p /test/a/b
-
把本地文件上传到hdfs上
hadoop fs -put ./test.txt /test/a/b
-
把hadoop上的文件(目录)拿到本地
hadoop fs -get /test/a/b/test.txt ../data
-
删除文件
hadoop fs -rm -R /test/a/b/test.txt
OK,关于HDFS的初步认识今天就总结到这里,接下来我们开始接触HDFS的高级部分。
拜了个拜~