HDFS前言
HDFS:Hadoop Distributed File System Hadoop 分布式文件系统,主要用来解决海量数据的存储问题。
设计思想 分而治之:将大文件,大批量文件,分布式的存放于大量服务器上。以便于采取分而治 之的方式对海量数据进行运算分析。
在大数据系统架构中的应用 为各类分布式运算框架(MapReduce,Spark,Tez,Flink,…)提供数据存储服务。
重点概念:数据块/副本,负载均衡,心跳机制,副本存放策略,元数据/元数据管理,安全模式,机架感知…。
HDFS 设计思路
HDFS 被设计成用来使用低廉的服务器来进行海量数据的存储,那是怎么做到的呢?
1、大文件被切割成小文件,使用分而治之的思想让很多服务器对同一个文件进行联合管理。
2、每个小文件做冗余备份,并且分散存到不同的服务器,做到高可靠不丢失。
HDFS 架构
主节点 Namenode:集群老大,掌管文件系统目录树,处理客户端读且请求。 SecondaryNamenode:严格说并不是 namenode 备份节点,主要给 namenode 分担压力之用。 从节点 Datanode:存储整个集群所有数据块,处理真正数据读写。
HDFS概念和特性
概念
首先,它是一个文件系统,用于存储文件,通过统一的命名空间——目录树来定位文件
其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器都有各自清晰的角色定位。
重要特性
1、HDFS 中的文件在物理上是分块存储(block),块的大小可以通过配置参数(dfs.blocksize) 来规定,默认大小在 hadoop2.x 版本中是 128M,老版本中是 64M 。
2、HDFS文件系统会给客户端提供一个统一的抽象目录树,客户端通过路径来访问文件,形 如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data
hdfs://hadoop111:9000/soft/hadoop-2.6.7.tar.gz
3、目录结构及文件分块位置信息(元数据)的管理由 namenode 节点承担 namenode 是 HDFS 集群主节点,负责维护整个 hdfs 文件系统的目录树,以及每一个路径(文 件)所对应的 block 块信息(block 的 id,及所在的 datanode 服务器)。
4、文件的各个 block 的存储管理由 datanode 节点承担 datanode 是 HDFS 集群从节点,每一个 block都可以在多个 datanode 上存储多个副本(副本 数量也可以通过参数设置 dfs.replication,默认是 3)。
5、HDFS是设计成适应一次写入,多次读出的场景,且不支持文件的修改 (PS:适合用来做数据分析,并不适合用来做网盘应用,因为, 不便修改,延迟大,网络开销大,成本太高)。
HDFS 优缺点
HDFS 优点
可构建在廉价机器上 通过多副本提高可靠性,提供了容错和恢复机制 。
高容错性 数据自动保存多个副本,副本丢失后,自动恢复 。
适合批处理 移动计算而非数据,数据位置暴露给计算框架 。
适合大数据处理 GB、TB、甚至 PB 级数据,百万规模以上的文件数量,10K+节点规模。
流式文件访问 一次性写入,多次读取,保证数据一致性。
HDFS 缺点
不适于以下操作:
低延迟数据访问,比如毫秒级,延迟与高吞吐率。
小文件存取占用 NameNode 大量内存 150b* 1000W = 15E,1.5G,寻道时间超过读取时间。
并发写入、文件随机修