1.1、数据块(block)
1.1.1.HDFS(Hadoop Distributed File System)默认的最基本的存储单位是64M的数据块。
HDFS上的文件被划分为块大小的多个分块,作为独立的存储单元,称为数据块
1.1.3.不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间。
每个磁盘都有默认的数据块大小,这是磁盘进行数据读/写的最小单位。构建于单个磁盘之上的文件系统通过磁盘块来管理该文件系统中的块,该文件系统块的大小可以是磁盘块的整数倍。文件系统块一般为几千字节,而磁盘块一般为512字节。这些信息(文件系统块大小)对于需要读/写文件的文件系统用户来说是透明的。尽管如此,系统仍然提供了一些工具(如df和fsck)来维护文件系统,由它们对文件系统中的块进行操作。
首先解释一下什么是“磁盘块”。要明确以下:
1、我们知道操作系统与磁盘之间**交流的最小单位**就是磁盘块,它是一个虚拟的概念。是对于操作系统(软件)来说有意义的概念。
2、磁盘进行读写的最小单位是扇区,而扇区是真实存在的。是硬件部分,是一块真实存在的物理区域。
由于我们经常接触的是软件部分,而不是硬件部分,所以提的多的是磁盘块。而不是扇区。
3、磁盘块的大小:块=扇区×2^n。因为磁盘进行读写的基本单位是扇区,而操作系统与磁盘之间是块,所以系统想进行读写,最节省的方式就是扇区的整数倍。
HDFS的三个节点:Namenode,Datanode,Secondary Namenode
Namenode:HDFS的守护进程,用来管理文件系统的命名空间,负责记录文件是如何分割成数据块,以及这些数据块分别被存储到那些数据节点上,它的主要功能是对内存及IO进行集中管理。
Datanode:文件系统的工作节点,根据需要存储和检索数据块,并且定期向namenode发送他们所存储的块的列表。
Secondary Namenode:辅助后台程序,与NameNode进行通信,以便定期保存HDFS元数据的快照。
HDFS Federation(联邦HDFS):
通过添加namenode实现扩展,其中每个namenode管理文件系统命名空间中的一部分。每个namenode维护一个命名空间卷,包括命名空间的源数据和该命名空间下的文件的所有数据块的数据块池。
HDFS的高可用性(High-Availability)
Hadoop的2.x发行版本在HDFS中增加了对高可用性(HA)的支持。在这一实现中,配置了一对活动-备用(active-standby)namenode。当活动namenode失效,备用namenode就会接管它的任务并开始服务于来自客户端的请求,不会有明显的中断。
架构的实现包括:
namenode之间通过高可用的共享存储实现编辑日志的共享。
datanode同时向两个namenode发送数据块处理报告。
客户端使用特定的机制来处理namenode的失效问题,这一机制对用户是透明的。
故障转移控制器:管理着将活动namenode转移给备用namenode的转换过程,基于ZooKeeper并由此确保有且仅有一个活动namenode。每一个namenode运行着一个轻量级的故障转移控制器,其工作就是监视宿主namenode是否失效并在namenode失效时进行故障切换。
3、命令行接口
两个属性项: fs.default.name 用来设置Hadoop的默认文件系统,设置hdfs URL则是配置HDFS为Hadoop的默认文件系统。dfs.replication 设置文件系统块的副本个数
4、Hadoop文件系统
Hadoop有一个抽象的文件系统概念,HDFS只是其中的一个实现。Java抽象接口org.apache.hadoop.fs.FileSystem定义了Hadoop中的一个文件系统接口。该抽象类实现HDFS的具体实现是 hdfs.DistributedFileSystem
https://www.cnblogs.com/caiyisen/p/7395843.html
HDFS和linux文件系统的关系:
每个磁盘都有默认的数据块大小,这是磁盘进行数据读/写的最小单位。而构建于单个磁盘之上的文件系统(linux文件系统)通过磁盘块来管理该文件系统中的块,该文件系统中的文件大小是磁盘块的整数倍。
HDFS同样也有块的概念,HDFS文件系统中的块指的是linux文件,分布式文件就是有多个linux文件(块)组成。其最小块单位就是一个Linux文件的大小,默认为64MB
可见hdfs文件系统不是直接管理磁盘
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/196869.html