文章目录
Hadoop系列文章
Hadoop系列 (一):在CentOS中搭建hadoop环境(伪分布式)
Hadoop系列 (二):完全分布式搭建(腾讯云服务器+阿里云服务器)
HDFS简介
HDFS( Hadoop Distributed File System ),意为:Hadoop分布式文件系统。是Apache Hadoop核心组件之一,作为大数据生态圈最底层的分布式存储服务而存在。
用于存储和管理文件,通过统一的命名空间(类似于本地文件系统的目录树)。
HDFS是分布式的,服务器集群中各个节点都有自己的角色和职责。
HDFS基本概念
-
HDFS是用Java语言实现的、分布式的、可扩展的文件系统。
-
HDFS是Hadoop的三大核心(HDFS、MapReduce、YARN)和四大模块(Hadoop Common、Hadoop HDFS、Hadoop MapReduce、Hadoop YARN)之一。
-
HDFS主要应用于海量数据的存储。
-
HDFS的基本存储单位:块,块是最小的数据读写单位,默认存储块大小为128M。块的大小可以在配置文件
hdfs-site.xml
中修改。块的默认单位是Byte,每个块都有自己的全局唯一ID。HDFS就是以块为单位在集权服务器上分配存储的。 -
块的好处就是:一个文件的大小可以大于集群中任一磁盘容量;块适合于数据备份,极大的提高了集群的容错能力和可用性。
分布式文件系统特点
-
高可靠:按位存储,就近原则分配数据,会把数据分配到离它最近的数据节点(DateNode)上。
-
高扩展:集群节点可以根据业务需求随时扩展和缩减。
-
高效性:可以在各个集群节点之间动态移动数据,保证集群各节点之间的动态平衡。
-
高容错:自动保存多个副本(默认3个,可自行修改),并且能够将失败的任务重新分配,解决故障,成本低。
-
不适合存储小文件
-
不适合低延迟的数据访问(多用于离线数据分析)
HDFS设计目标
-
故障检测和自动快速恢复是HDFS的核心架构目标。因为HDFS可能有成百上千的服务器组成,每一个组件都有可能出现故障。
-
相较于数据访问的反应时间,更注重数据访问的高吞吐量。HDFS被设计成用于批处理,而不是用户交互式的。
-
典型的HDFS文件大小是GB到TB的级别。所以,HDFS被调整成支持大文件(Large Data Sets) 。它应该提供很高的聚合数据带宽,一个集群中支持数百个节点,一个集群中还应该支持千万级别的文件。
HDFS架构
HDFS采用master/slave
架构。一个HDFS集群是由一个Namenode和一定数目的Datanodes组成。
- NameNode: 是Master节点,中心服务器。管理数据映射,处理客户端的读写请求,配置副本策略。Namenode执行文件系统的名字空间操作,比如打开、关闭、重命名文件或目录
- DataNode: 是Slave节点,负责存储client发来的数据,执行读写操作。在Namenode的统一调度下进行数据块的创建、删除和复制。
- SecondaryNameNode: 分担NameNode工作量,是NameNode的冷备份。
- 热备份: 系统处于正常运转状态下的备份,假如b是a的热备份,一旦a出现故障,b可以马上运行代替工作。
- 冷备份: 与热备份对应,一旦a出现故障,冷备份c不能马上代替a,但c上存储a的一些信息,可以减少损失。
- edits: 元素据的操作日志。
- fsimage: 是内存命名空间元数据在外存的镜像文件。
- editlog: 是各种元数据操作的 write-ahead-log 文件,在体现到内存数据变化前首先会将操作记入 editlog 中,以防止数据丢失。
注:fsimage 和 editlog是在磁盘保存两个元数据管理文件
HDFS应用场景
适合场景:大文件、数据流式访问、一次写入多次读取、高容错等。
不适合场景:小文件、交互式访问、频繁修改、低延迟处理等。
HDFS三大组件
NameNode
NameNode是一个中心服务器,负责管理文件系统的名字空间(namespace)以及客户端对文件的访问。Namenode执行文件系统的名字空间操作,比如打开、关闭、重命名文件或目录。
NameNode的工作机制如下:
- 第一