- Hadoop自带HDFS,即 Hadoop Distributed FileSystem(不是HaDoop FileSystem 的简称)
- 适用范围
- 超大文件:最新的容量达到PB级
- 流式数据访问:HDFS的构建思路:一次写入、多次读取时最高效的访问模式
- 低时间延迟的数据访问不适用HDFS
- 大量的小文件的限制:由于namenode将文件系统的元数据存储在内存中,因此该文件系统所能存储的文件总数受限于namenode的内存容量。根据经验,每个文件、目录、数据块的存储信息大约占150字节。举例来说,如果有一百万个文件,每个文件占用一个数据块,那至少需要300MB的内存。尽管存储上百万文件时可行的,但是存储数十亿个文件就超出了当前硬件的能力。
- 不支持多用户写入、任意修改文件:HDFS中的文件写入只支持单个写入者,而且写操作总是已只添加的方式在文件末尾写数据。不支持多个写入者操作,也不支持在文件的任意位置进行修改。
- 数据块
- 磁盘块一般为512字节,普通文件系统块一般为几千字节,HDFS块默认128MB
- 与普通文件系统不同,一个小于块大小的文件,不会占据整个块的大小(不会浪费块剩余空间)。如1MB的文件,只占用1MB空间,而不是128MB空间
- 块的大小不能设置的太大,Mapreduce中map任务通常一次只处理一个块中的数据,如果块太大,任务数据太少(少于集群中节点的数量),那么集群的分布式计算就发挥不出来
- 事实上,尽管不常见,也可存储一个文件,占用整个HDFS,该文件的块占满集群中的所有磁盘。
- 使用块,可以将数据存储于文件权限分开设计,简化设计框架
- namenode节点:整个集群只有1个namenode节点,管理文件系统的命名空间,他维护着系统树和整个树内所有的文件和目录。这些信息以两个文件形式永久保存在“本地磁盘”上,但并不永久保存块的位置信息,因为这些信息会在系统启动时根据datanode信息重建。
- datanode节点:可以有多个,受客户端或namenode调度,并且定期向namenode节点发送他们所存储的块列表。负责存储并检索数据块。
- 如果运行namenode节点损坏,文件系统上所有的文件将会丢失,对namenode实现容错非常重要
- 方法一:备份哪些组成文件系统元数据持久状态的文件,可以通过配置,是namenode节点在本地和NFS上同时存储持久状态(类似于oracle归档日志的多路写入)
- 方法二:运行一个辅助namenode,但不能用作namenode。辅助namenode的重要作用是定期合并编辑日志与命名空间镜像,运行在单独的机器上,需要占用大量CPU时间,并需要与主namenode一样大小的内存。但是,辅助namenode保存的状态总是滞后于主节点,所以主节点全部失效时,难免会丢失部分数据。在这种情况下,一般把存储在NFS上的namenode元数据复制到辅助namenode并作为新的主节点运行
- 联邦HFDS:在2.x发行版本中引入的联邦HDFS允许通过添加namenode实现扩展,其中每个namenode管理文件系统命名空间的一部分。例如一个namenode管理/user目录下所有的文件,而另一个namenode管理/share目录下的所有文件。
- 在联邦环境下,每个namenode维护一个命名空间卷,由命名空间的元数据和一个数据块池组成,数据块池包含该命名空间下文件的所有的数据块。命名空间卷之间是相互独立的,亮亮之间并不相互通信,设置其中一个namenode失效也不会影响其他namenode的可用性。数据块池不再进行切分,因此集群中的所有datanode需要注册到每个namenode
- 要想访问联邦HDFS集群,客户端需要使用挂在数据表将文件路径映射到namenode。
- 高可用
- Hadoop2增加了HDFS高可用(HA)的支持,配置了一对 活动-备用(active-standby)namenode
- namenode之间需要通过高可用
原文地址:https://www.cnblogs.com/jiangtao1218/p/8732394.html
时间: 2024-11-05 23:37:01