HDFS(Hadoop Distributed File System), Hadoop分布式文件系统,主要用来解决海量数据的存储问题,在大数据系统架构中为各类分布式运算框架(MapReduce、Spark、Tez,Flink等)提供数据存储服务。
前面我们已经讲过分布式的存储原理,下面来看看HDFS具体的架构实现:
从上图可以看到,HDFS集群有3种角色:
a)NameNode:主节点,集群老大,管理整个文件系统的目录树,负责处理客户端读写请求
b)SecondaryNameNode:合并元数据,用来帮NameNode分担压力
c)DataNode:从节点,存储所有文件的数据块,真正处理数据读写
HDFS中的文件是在物理上进行了分块存储(block),为保证数据安全,每个数据块默认存3份。而数据块的大小可以通过配置参数(dfs.blocksize)来设定,默认值在hadoop2.x版本中是128M,3.x是256M。即一个500M的文件在2.x版本的Hadoop系统中默认会被分成4个块,每个块都是一式三份存在3个不同节点。
我们再来了解一下HDFS的优缺点:
优点
适合大数据处理, GB、TB、甚至 PB 级数据,百万规模以上的文件数量,10K+节点规模
被设计用来构建在廉价机器上,通过多副本提高可靠性,提供了容错和恢复机制
高容错性,数据自动保存多个副本,副本丢失后,自动恢复
流式文件访问,一次性写入,多次读取,保证数据一致性
缺点
延迟高(涉及到多个节点之间相互通信)
不适合存储小文件(因为元数据信息存储在NameNode内存中,一条block元数据信息大约消耗150Byte,存储1亿个block的话就需要大概15GB内存,增加了NameNode的压力,从而降低整个集群的性能)
不适合并发写入、随机修改场景,因为HDFS是采用追加的方式写入数据
最后再向大家介绍几个常用的HDFS Shell指令:
查看文件:hadoop fs -ls hdfs路径
上传文件:hadoop fs -put 本地路径 hdfs路径
下载文件:hadoop fs -get hdfs路径
创建文件夹:hadoop fs -mkdir hdfs路径
查看文件内容:hadoop fs -cat hdfs路径
删除文件(夹):hadoop fs –rm –r hdfs路径
自此,相信大家对于HDFS已经有了进一步的体会,我们下期再会!