目录
1、HDFS概述
1.1 HDFS产出定义以及背景
(1)HDFS产生背景
当数据量越来越大时,许多网络公司就要考虑到一个问题,该如何存储这些数据?
于是,当一个操作系统存不下所有的数据时,他们就把数据分配到更多操作系统所管理的磁盘中去;但这样也有一定的不便之处,那就是多个操作系统并不利于管理和维护;这个时候,就迫切需要一种系统去管理多台机器上的文件,这就是分布式管理系统。
要注意,我们这里说的HDFS只是分布式管理系统的一种。
(2)HDFS的定义
HDFS(Hadoop Distributed File System),是一个分布式文件管理系统,它的主要目的是存储文件,并通过目录树结构来定位文件(相当于给定一个路径)。它是分布式的,因此它可以由许多服务器联合起来实现其功能,在集群中的服务器可以扮演不同的角色。
HDFS的使用场景:适合一次写入、多次读出的场景。一个文件经过创建、写入后,一般不再进行修改。
1.2 HDFS优缺点
一、HDFS的优点:
(1)高容错性
①数据自动保存多个副本,默认为三个。通过增加副本的形式,提高容错率
②某一个副本丢失后,它可以自动恢复
(2)适合处理大数据
数据规模:能够处理数据规模达到GB、TB甚至PB级别的数据
文件规模:能够处理百万规模以上的文件数量,数量相当之大
(3)成本低,可靠性高
可用廉价机器来构建,成本更低,可建立的副本更多;通过多副本机制,提高可靠性
二、HDFS的缺点:
(1)不适合低延时数据访问;
所谓低延时数据,通常是指网络数据包通过网络连接从发送给计算机到计算机接收到的时间往返比较短;例如需要毫秒传输的数据,就是一种低延时数据
(2)存储大量小文件时效率低;
①存储大量小文件时,NameNode会将这些小文件的目录和块信息都存储在内存里,然而NameNode的内存是有限的,这在一定程度上也是一种内存浪费;
②小文件的寻址时间(定位文件的时间)会超过读取时间,这违反了HDFS的设计目标(客户只用进行业务逻辑的处理,技术问题由Hadoop负责)。ps:寻址状态为传输时间的1%时,为最佳状态,而磁盘目前的普遍传输速率是100MB/s.
(4)不支持并发写入、文件随机修改
一个文件绝不允许多个线程同时写,只能有一个;
仅能追加(append)数据,不支持随机修改文件
1.3 HDFS组成构架
(1)Namenode(nn):Master;它就是一个主管,一个管理者;
①管理HDFS的名称空间(namespace)
②配置副本策略
③管理数据块(Block)映射信息
④处理客户端读写请求
(2)Datanode,就是slave;
Namenode下达命令,Datanode执行命令,进行实际的操作
①存储实际的数据块
②执行数据块的读写操作
(3)Client:就是客户端
①文件切分;文件上传HDFS时,Client将文件切分成一个一个的Block,之后进行上传
②与Namenode交互,获取文件的位置信息
③与Datanode交互,读取或者写入数据
④Client提供一些命令来管理HDFS,例如Namenode格式化
⑤Client可以通过一些命令来访问HDFS,比如对HDFS进行增删改查操作
(4)Secondary Namenode:不是Namenode的热备。当Namenode挂掉,它并不能马上替换Namenode并提供服务
①辅助Namenode,分担其工作量;例如定期合并元数据镜像文件(Fsimage)和数据操作日志文件(Edits),并推送给Namenode
②在紧急情况下,可恢复Namenode
1.4 HDFS文件块大小(较重要)
HDFS的文件在物理上是分块存储(Block),块的大小可通过配置参数(dfs.blocksize)来规定,默认在Hadoop2.x或3.x是128MB;1.x是64MB
(1)集群中的block
(2)若寻址时间约为10ms,即查找到目标block的时间10ms
(3)寻址时间为传输时间的1%时,则为最佳状态
(4)而目前磁盘的传输速率普遍为100MB/s
(5)block大小=1s*100MB/s=100MB
注:设置块的大小时要尤其注意:
(1)HDFS的块设置太小,会增加寻址时间,程序一直在找块的开始位置。
(2)如果块设置的太大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需要的时间,那么程序在处理时会非常慢。
总结:HDFS块的大小设置取决于磁盘传输速率