HDFS原理概念扫盲
1、概述
hdfs文件系统主要设计为了存储大文件的文件系统;如果有个TB级别的文件,我们该怎么存储呢?分布式文件系统未出现的时候,一个文件只能存储在个服务器上,可想而知,单个服务器根本就存储不了这么大的文件;退而求其次,就算一个服务器可以存储这么大的文件,你如果想打开这个文件,效率会高吗
hdfs的出现就是为了解决上面的问题
hdfs为了满足大文件的存储和可读性,对数据进行切成多个小块进行存储,同时为了保证数据的可靠性,又对每个小块数据做复制,然后分别存储到多个节点中
hdfs2.7.3后,默认每个块的大小是128MB,在hdfs1.0的时候,默认每个块的大小是64MB
可以通过修改hdfs的配置文件自定义块大小
hdfs-site.xml文件中的dfs.blocksize
默认每个块的副本数是3,可以通过修改hdfs的配置文件自定义副本数
hdfs-site.xml的dfs.replication
二、hdfs的结构体系
hdfs是一个分布式的文件系统,采用主从(master/slave)的结构体系,一个hdfs集群由NameNode和多个datanode组成,其中namenode作为主节点,DataNode为从节点
Namenode简称NN
DataNode简称DN
NN的作用
a、存储元数据信息
b、元数据存储两份,一份在内存中,一份在硬盘中
c、保存文件、block、datanode的映射关系
DN的作用
a、存储block信息
b、block存储在硬盘中
c、维护block和文件的映射关系
数据存储在内存中是为了读取性能,保证效率,数据存储在硬盘中,为了持久化数据,保证数据不丢失
三、hdfs的优缺点
1、hdfs的优点
a、支持超大文件
支持超大文件,这里的超大文件几百MB,几百GB,甚至TB级别大小的文件,一般来说hadoop的文件系统会存储TB级别或者 PB级别的数据,所以在企业节点中,数据节点可能有上千个
b、检测和快速 应对 硬件故障
在集群中 环境中,硬件故障是常见的问题,因为 有上千台服务器,这样会导致高故障率,因此故障检测和自动 恢复 是hdfs文件系统 的一个设计目标
c、流式数据访问
Hdfs的数据处理规模比较大,应用一次要 访问大量的 数据,同时这些应用一般都是批量处理,而不是用户交互式 处理,应用程序能以流的形式访问数据集,主要是数据的吞吐量,而不是访问速度;适合做离线数据的处理
d、简化的一致性模型
大部分 hdfs操作文件时,需要一次 写入,多次读取,在 hdfs文件系统中,一个文件块一旦经过 创建,写入,关闭后就不允许 修改了,在hdfs2.7后 ,才允许对block进行追加修改,但是不能改变已有的数据,这样简单的一致性模型,保证数据操作的简单化
e、高容错性
数据自动保存多个 副本,副本丢失自动恢复
f、可构建在廉价的机器上
构建在廉价的机器上,可以启动通过扩展机器 个数里线性提高存储能力
2、hdfs的缺点
a、低延迟数据访问
低延迟数据 ,如果用户进行交互的应用,比如京东,需要数据在毫秒后者秒级范围内得到响应,由于 hadoop对高吞吐 模型 做了优化,牺牲了获取数据的延迟,所以对于低延时的应用,不适合 用hadoop,而且hdfs的数据也不是结构化的数据
b、不适合大量小文件
Hdfs支持超大的文件,是通过数据分别在不同的数据节点,数据的元数据保存在namenode上,namenode的内存大小决定了hdfs可以保存的文件数量,虽然现在 内存已经很大,但是大量的 小文件还是会 影响namenode的节点性能,每个block会占用一片内存空间
c、不支持多次写入文件,修改文件
为了保证吞吐量,设计为这样
四、hdfs的技术细节
1、Block
数据块(block)是hdfs存储文件的基本单位
在hdfs中,有一个特别重要的概念,数据块(block),前面介绍过,在hdfs存储的文件都是超大数据的文件,我们可以把这个超大规模的文件以一个标准切分成几块,分别存储到不同的磁盘上,这个标准就是block
a、为了存储大文件,一个服务器很难存储超大型的文件,拆分的话,文件块可以保存在不同的磁盘,在hdfs文件系统中,一个文件可以分成不同的block存储在不同的磁盘上
b、简化存储系统,这样就不需要管理文件,而是直接管理文件块就可以了
c、有利于数据的复制,在hdfs系统中,一个block块一般会复制三份(可以修改),比如复制一个1TB的数据和复制多个128MB的文件复制哪个更快?
对于一个文件而言,一个block id从0开始,按照固定的大小,顺序对文件进行划分和编号,划分好的每一块称一个block。Hdfs默认的block的大小是128MB,所以一个256MB的文件,共有256/128=2个块
不同于普通的文件系统(比如ext4或者ntfs),hdfs中,如果一个文件小于一个数据块的大小,并不用占用整个数据存储空间,而是仅仅会占用文件实际大小的空间
2、Namenode
Namenode是维护hdfs中的元信息,包括文件和block之间的映射关系,block数量的信息,block和datanode之间的关系信息,数据格式参照入下
Filename replicas block-ids id2host /test/log,3,{b1,b2},{b1:[host0,host1,host2]} ,{b2:[host3,host4,host5]}
Namenode中的元数据信息存储在内存/磁盘中,内存中为实时信息,磁盘中为