4、HDFS分布式文件系统的基本概念理解
HDFS:
Hadoop Distributed file System Hadoop分布式文件系统,主要用来解决海量数据的存储问题。
它是一个文件系统,用于存储文件,通过统一的命名空间——目录树来定位文件。 其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器都有各自清晰的角色定位 。
设计思路:
将大文件,大批量文件,分布式的存储在大量(廉价)的服务器上。以便于采取分而治之的方式对海量数据进行运算分析。(分而治之,分散存储,冗余备份)
Hdfs在大数据中的应用:
为各类分布式运算框架(MapReduce ,Spark ,Tez ,Flink,....·..)提供数据存储服务。
Hdfs架构(主[master]从[slave]架构):
-- namenode(nn) --->master
*保存元数据信息:目录树,文件名称,文件属性,文件的块信息,block的存放列表,...
*接受客服端的请求与响应
*下达命令给datanode
-- datanode(dn) --->slave
*用于存储具体的不block信息,block的校验文件
*真正执行读写的位置
*定期汇报节点的block状态
-- secondarynamenode(2nn)
*辅助namenode,减轻压力
Hdfs的特点:
--1、HDFS 中的文件在物理上是分块存储(block),块的大小可以通过配置参数(dfs.blocksize) 来规定,默认大小在 hadoop2.x 版本中是 128M, hadoop1.x版本中是 64M 。
--2、HDFS 文件系统会给客户端提供一个统一的抽象目录树,客户端通过路径来访问文件。
如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data 如: hdfs://hadoop02:9000/soft/jdk.tar.gz
--3、目录结构及文件分块位置信息(元数据)的管理由 namenode 节点承担。namenode 是 HDFS 集群主节点,负责维护整个 hdfs 文件系统的目录树,以及每一个路径(文 件)所对应的 block 块信息(block 的 id,及所在的 datanode 服务器)
--4、文件的各个 block 的存储管理由 datanode 节点承担。datanode 是 HDFS 集群从节点,每一个 block 都可以在多个 datanode 上存储多个副本(副本 数量也可以通过参数设置 dfs.replication,默认是 3)
--5、HDFS 是设计成适应一次写入,多次读出的场景,且不支持文件的修改 ,但是支持追加。
--6、不便修改,延迟大,网络开销大,成本太高。适用于做数据分析,并不适合用来做网盘应用。
Hdfs的优点:
--1、可以构建在相对廉价机器上。(通过多副本备份提高可靠性,提供了容错和恢复机制)
--2、高容错性。(数据建立保存了多个副本,副本一旦丢失后,可以自动恢复)
--3、适合批处理。(移动计算机而非数据,数据位置暴露给计算机框架)
--4、适合大数据处理。(TB、GB级数据)
--5、流式文件访问。(一次写入,可多次读取,保证数据一致性)
Hdfs的缺点:
--1、不适合小文件存取。(每个小文件至少占用一个block,一个block最多存一个文件,一个 block 元信息消耗大约 150 byte 内存,存放1亿个block,大约消耗了20GB内存 ,如果一个小文件10k,1亿个文件大小约为1TB,但消耗namenode 的20GB内存)。
--2、不适合低延迟数据访问。它是高延迟,低吞吐率的(比如:毫秒级数据访问几乎不可能)
--3、不能进行文件修改和并发写入,但支持追加append。(一个文件只能有一个写者)