HDFS 架构概述
HDFS(Haadoop Distributed File System)易于扩展的分布式文件系统,运行在大量普通廉价机器上,提供容错机制,为大量用户提供性能不错的文件存取服务。
HDFS的架构图之基础架构
- NameNode是一个中心服务器,单一结点(简化系统的设计和实现),负责管理文件系统的名字空间(namespace)以及客户端的文件的访问。
- 文件操作,namenode 是负责文件元数据的操作,datanode 负责处理文件内容的读写请求,跟文件内容相关的数据流不经过Namenode,只询问他跟那个dataNode联系,否则NameNode会成为系统的瓶颈。
- 副本存放在那些Datanode上有NameNode 来控制,根据全局情况作出放置决定,读取文件时NameNode尽量让用户先读取最近的副本,降低读取网络开销和读取延时
- NameNode全权管理数据库的复制,它周期性的从集群中的每个DataNode接收心跳信号和状态报告,接收到心跳信号意味着DataNode节点工作正常,块状态包含了一个该DataNode上所有的数据列表。
NameNode 与 DataNode 总结概述
NameNode |
DataNode |
存储元数据 |
存储文件内容 |
元数据保存在内存中 |
文件内容保存在磁盘 |
保存文件、 block、DataNode之间的映射关系 |
维护了 block id 到DataNode本地文件的映射关系 |
HDFS的构架之文件的副本机制以及block 块存储
所有的文件都是以block块的方式存放在HDFS文件系统当中,在hadoop1当中,文件的block块默认大小是64M,hadoop2当中,文件的block块大小默认是128M,block快的大小是可以通过hdfs-site.xml 当中的配置文件进行指定。
<property>
<name>dfs.block.size</name>
<value>块大小 以KB为单位</value>//只写数值就可以
</property>
抽成数据块的好处
- 1. 一个文件又可以大于集群中任意一个磁盘 10T * 3 / 128 = xxx 块 , 文件方式存
一 ->多个block块,这些block属于一个文件
- 2. 使用块抽象而不是文件可以简化存储子系统
- 3. 块非常适合用于数据备份进而提供数据容错能力和可用性。
块缓存
通常DataNode从磁盘中读取块,但对于访问频繁的文件,其对应的块可能被显示的缓存在DataNode的内存中,以堆外块缓存的形式存在。默认情况下,一个块缓存仅在一个DataNode的内存中,当然可以针对每个文件配置DataNode的数量。作业调度器通过在缓存块DataNode上运行任务,可以利用块缓存的优势提高读操作的性能。
例如:
连接(Join)操作中使用的一个小的查询表就是块缓存的一个很好的候选。
用户或应用通过缓存池中增加一个cache directive 来告诉namenode 需要缓存那些文件及存多久。缓存池是一个拥有管理缓存权限和资源使用的管理性分组。
例如一个文件130M,会被切分成2个block块,保存在两个block块里面,实际占用磁盘130M的空间,而不是占用256的磁盘空间。
hdfs 的文件权限验证
hdfs 的文件权限机制与linux系统的文件权限机制类似
r:read w:write x:execute 权限x对于文件表示忽略,对于文件夹表示是否有权限访问其内容。
如果linux 系统用户 zhangsan使用hadoop命令创建一个文件,那么这个文件在HDFS当中的owner就是zhangsan
HDFS文件权限的目的,防止好人做错事,而不是阻止坏人做坏事。HDFS相信你告诉我你是谁,你就是谁。