Hadoop三大组件之——HDFS概述

HDFS的概述

HDFS产生背景

HDFS(Hadoop Distributed File System 分布式文件系统),源自于Goole于2003年10月发表的GFS论文,是GFS的克隆版,具有如下特点:
(1)易于扩展的分布式文件系统
(2)运行在大量的普通廉价机器上
(3)为大量用户提供性能不错的文件存取服务

HDFS优点

(1)高容错性:数据自动保存多个副本(一般默认三个),副本丢失后,会自动恢复。
(2)批处理:以移动计算而非数据、数据位置暴露给计算框架。
(3)适合大量数据处理:GB、TB甚至PB级别的数据,百万规模以上的文件数量,1000以上的节点规模。
(4)流式访问:一次性写入,多次读取,保证数据的一致性。
(5)廉价机器:通过多副本提高可靠性,提供了容错和恢复机制。

HDFS缺点

(1)低延迟数据访问:比如毫秒级别,低延迟与高吞吐量。
(2)小文件存取:占用NameNode大量内存,寻道时间超过读取时间。
(3)并发写入、文件随机修改:一个文件只能有一个写入者,仅支持append。

HDFS官方解释

HDFS是一个分布式文件系统,有一定高度的容错性,而且提供了高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS提供了一个高度容错和高吞吐量的海量数据存储解决方案。


HDFS的体系结构

Hadoop三大组件之——HDFS概述_第1张图片
上图展示了客户端与HDFS交互过程,具体说明如下:
(1)客户端与NameNode进行交互,NameNode通知Client将数据保存在哪一台DataNode上,由Client保存数据到DataNode上。NameNode中metadat用于在内存中保存数据的元信息。在¥{hadoop.tmp.dir}/dfs/name 目录下保存了edits和fsimage文件,它们分别是日志文件和metadata的镜像文件。
(2)保存成功后,有NameNode来保存数据的元信息,即数据保存在哪台机器上。
(3)每一个块的大小是128M(Hadoop2.X版本以后)

NameNode

NameNode相当于电脑的CPU,所有的读写请求都需要在这里处理。一般情况下,一个集群只能有一个NameNode,但这样也就意味着一旦这个节点宕机,整个集群便无法使用。后来又提出了HA(高可用)集群,来解决集群的单点故障问题。HA允许一个集群有两个NameNode,一个处于Active,另一个处于Standby,正常情况下都是Active节点处理集群事务,当出现单点故障时,处于Standby的节点会马上接替Active节点运行,这样保证了集群的高可用性。
Name主要有以下功能:
(1)保存元数据信息,始终在内存中保存metadata元数据信息用于处理请求。
(2)维护fsimage文件,也就是metadata的镜像文件。
(3)当遇到写请求时,首先写editlog文件,然后才写内存。
这里有两个不同的文件:
(1)fsimage文件:是在NameNode启动时对整个文件系统的快照,是metadata的镜像。
(2)edit logs文件,每当写操作发生时,NameNode会首先修改这个文件,然后再去修改metadata。
NameNode工作特点:
(1)NameNode始终在内存中保存metadata。在处理读写请求时,会先写edits到磁盘,成功返回后修改内存中的metadata。
(2)NameNode会维护一个fsimage文件,此文件是metadata保存在磁盘上的镜像文件。每隔一段时间SecondaryNameNode会合并fsimage和edits来更新内存中的metadata。

DataNode

DataNode的功能是:
(1)提供真实的存储服务。
(2)将客户端上传的文件以块的形式保存,在Hadoop 2.0中,一个默认块的大小为128M,如果上传的文件的文件小于128M,将会占用一个实际空间大小,如果文件大于128M将会被切分成多个文件块。
(3)保存的目录在core-site.xml中的配置内容:hadoop.tmp.dir。

SecondaryNameNode

Hadoop三大组件之——HDFS概述_第2张图片
SecondaryNameNode功能
(1)定时到NameNode去获取edit logs,并更新到fsimage上。
(2)NameNode下次重启会使用这个新的fsimage文件,将这个文件恢复到内存创建新的metadata元数据信息。
(3)SecondaryNameNode的最终目的是在HDFS中提供一个检查点,它只是NameNode的一个助手。
注: SecondaryNameNode所做的只是辅助NameNode更好的工作,并不是取代NameNode,也不是NameNode的备份。

HDFS常用命令

(1)显示HDFS文件列表
hdfs dfs -ls /
(2)将本地文件复制到HDFS上
hdfs dfs -copyFromLocal ~/home/some.txt /
(3)查看HDFS上的具体文件内容
hdfs dfs -cat /some.txt
(4)从HDFS下载文件到本地
hdfs dfs -copyToLocal /text.txt text.txt
(5)HDFS上文件和文件夹数
hdfs dfs -count /
(6)向HDFS上传文件
hdfs dfs -put text.txt /text1.txt
(7)从HDFS获取文件到本地
hdfs dfs -get /text1.txt text2.txt

你可能感兴趣的:(Hadoop,分布式文件系统,HDFS,Hadoop组件)