Hadoop学习记录(1)-什么是HDFS?
Hadoop作为处理大数据的分布式存储和计算框架,很多程序员已经对他耳熟能详了。作为一个工作三年的java后端程序员,准备学习了解一下该框架,特立此贴记录学习。
HDFS简介
HDFS(Hadoop Distributed File System)是高扩展、高容错、高性能的分布式文件系统,负责数据的分布式存储和备份。本质是一个主/从体系结构的分布式文件系统,主要包含一个NameNode、一个Secondary NameNode和多个Data Node。
-
1、元数据
元数据不是具体的文件内容,它包含三类信息:- 文件和目录自身的属性信息,例如文件名、目录名、父目录信息、文件大小、创建时间、修改时间等。
- 文件内容存储的相关信息。例如文件分块情况、副本个数、每个副本所在的DataNode信息等。
- 用来记录HDFS中所有Data Node的信息,用于管理Data Node。
-
2、NameNode
用于存储元数据以及处理客户端发出的请求。在Data Node中存放元信息的文件是fsimage文件。在系统运行期间,所有对元数据的操作都保存在内存中,并被持久化到另一个文件edits中。当NameNode启动时,fsimage会被加载到内存,然后对内存中的数据执行edits记录的操作,以确保内存中所保留的数据处于最新的状态。 -
3、Secondary NameNode
用于备份NameNode的数据,周期性将edits文件合并到fsimage文件并在本地备份,将新的fsimage文件存储到NameNode,取代原来的fsimage,删除edits文件。并生成一个新的edits继续存储文件修改状态。 -
4、DataNode
真正存储数据的地方。在DataNode中,文件以数据块的形式进行存储。当文件传到HDFS端时以128MB的数据块将文件进行切割,将每个数据块存到不同的或相同的DataNode并且备份副本。一般默认3个,NameNode会负责记录文件的分块信息,确保在找到该文件时找到并整合所有5、数据块
文件在上传到HDFS时根据系统默认文件块大小把文件分成一个个数据块。数据块会被存储到各个节点,每个数据块都会备份副本。
HDFS之宕机处理
- 1、冗余备份
文件被分为一个或多个数据块存储时,进行了副本备份,默认为3。 - 2、副本存放
以dfs.replication=3为例,在同一台机器的两个节点上各创建一个副本,在另一台机器的某个节点上再放一个副本。前者防止该机器的某个节点宕机,后者防止某个机器宕机。 - 3、宕机处理
当一切运行正常时,Data Node会周期性的发送心跳信息给NameNode(默认为3秒一次)。如果NameNode在预定的时间内没有收到DataNode的心跳(默认为10分钟),他为认为该节点出问题了,把它从集群中移除。对于HDFS来说,丢失一个DataNode,相当于丢失了存储在该节点的数据块的副本。HDFS会检测到存储在该节点的数据块的副本数量低于要求,然后主动对这些数据块创建所缺失的副本,以达到满副本状态。DataNode可能因为多种原因脱离集群,如硬件故障、主板故障、电源老化和网络故障等。
当HDFS读取某个数据块时,如果正好该节点宕机了,客户端就会到存储该数据块的其它节点读取。同时HDFS也会检测到该数据块副本个数不符合要求而重新补全副本。
当HDFS存储数据块时,如果要存放数据块的节点宕机。HDFS会再分配一个节点给数据块用来备份,然后备份宕机节点中数据块的副本。
HDFS的特点和总结
优点
- 高容错性。通过对文件的数据块进行多个副本的备份实现,副本丢失时会检测到并自动补全。
- 适合大数据的处理。能够处理GB、TB甚至PB级别的数据。
- 流式数据访问。以流式数据访问模式来存储超大文件,“一次写入,多次读取”。文件一旦写入,不能修改,只能增加。可以保证数据的一致性。
缺点
- 不适合低延迟数据访问
- 无法高效存储大量小文件。因为文件系统的元数据存放在NameNode的内存中,所以内存大小便是能够存储文件数量的瓶颈。
- 不支持多用户写入及任意修改文件。HDFS的一个文件只有一个写入者,而且写操作只能在文件末尾完成,即只能执行追加操作。目前HDFS不支持多个用户对同一文件的写操作,以及在文件任意位置进行修改。