《深入理解大数据:大数据处理与编程实践》一一3.1 HDFS的基本特征与构架

简介:

本节书摘来自华章计算机《深入理解大数据:大数据处理与编程实践》一书中的第3章,第3.1节,作者 主 编:黄宜华(南京大学)副主编:苗凯翔(英特尔公司),更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.1 HDFS的基本特征与构架

HDFS被设计成在普通的商用服务器节点构成的集群上即可运行,它和已有的分布式文件系统有很多相似的地方。但是,HDFS在某些重要的方面,具有有别于其他系统的独特优点。这个特殊的文件系统具有相当强大的容错能力,保证其在成本低廉的普通商用服务器上也能很好地运行;进一步,HDFS可以提供很高的数据吞吐能力,这对于那些需要大数据处理的应用来说是一项非常重要的技术特征;另外,HDFS可以采用流式访问的方式读写数据,在编程方式上,除了API的名称不一样以外,通过HDFS读写文件和通过本地文件系统读写文件在代码上基本类似,因而非常易于编程使用。
3.1.1 HDFS的基本特征
HDFS具有下列六种基本特征。
(1)大规模数据分布存储能力
HDFS以分布存储方式和良好的可扩展性提供了大规模数据的存储能力,可基于大量分布节点上的本地文件系统,构建一个逻辑上具有巨大容量的分布式文件系统,并且整个文件系统的容量可随集群中节点的增加而线性扩展。HDFS不仅可存储GB级到TB级别大小的单个文件,还可以支持在一个文件系统中存储高达数千万量级的文件数量。这种分布式文件系统为上层的大数据处理应用程序提供了完全透明的数据存储和访问功能支撑,使得应用程序完全感觉不到其数据在物理上是分布存储在一组不同机器上的。
(2)高并发访问能力
HDFS以多节点并发访问方式提供很高的数据访问带宽(高数据吞吐率),并且可以把带宽的大小等比例扩展到集群中的全部节点上。
(3)强大的容错能力
在HDFS的设计理念中,硬件故障被视作是一个常态。因此,HDFS的设计思路保证了系统能在经常有节点发生硬件故障的情况下正确检测硬件故障,并且能自动从故障中快速恢复,确保数据不丢失。为此,HDFS采用多副本数据块形式存储(默认副本数目是3),按照块的方式随机选择存储节点。
(4)顺序式文件访问
大数据批处理在大多数情况下都是大量简单数据记录的顺序处理。针对这个特性,为了提高大规模数据访问的效率,HDFS对顺序读进行了优化,支持大量数据的快速顺序读出,代价是对于随机的访问负载较高。
(5)简单的一致性模型(一次写多次读)
HDFS采用了简单的“一次写多次读”模式访问文件,支持大量数据的一次写入、多次读取;不支持已写入数据的更新操作,但允许在文件尾部添加新的数据。
(6)数据块存储模式
与常规的文件系统不同,HDFS采用基于大粒度数据块的方式存储文件,默认的块大小是64MB,这样做的好处是可以减少元数据的数量,并且可以允*许将这些数据块通过随机方式选择节点,分布存储在不同的地方。
3.1.2 HDFS的基本框架与工作过程
1.?基本组成结构与文件访问过程
HDFS是一个建立在一组分布式服务器节点的本地文件系统之上的分布式文件系统。HDFS采用经典的主-从式结构,其基本组成结构如图3-1所示。
image

图3-1 HDFS的基本组成结构
一个HDFS文件系统包括一个主控节点NameNode和一组DataNode从节点。NameNode是一个主服务器,用来管理整个文件系统的命名空间和元数据,以及处理来自外界的文件访问请求。NameNode保存了文件系统的三种元数据:1)命名空间,即整个分布式文件系统的目录结构;2)数据块与文件名的映射表;3)每个数据块副本的位置信息,每一个数据块默认有3个副本。
HDFS对外提供了命名空间,让用户的数据可以存储在文件中,但是在内部,文件可能被分成若干个数据块。DataNode用来实际存储和管理文件的数据块。文件中的每个数据块默认的大小为64MB;同时为了防止数据丢失,每个数据块默认有3个副本,且3个副本会分别复制在不同的节点上,以避免一个节点失效造成一个数据块的彻底丢失。
每个DataNode的数据实际上是存储在每个节点的本地Linux文件系统中。
在NameNode上可以执行文件操作,比如打开、关闭、重命名等;而且NameNode也负责向DataNode分配数据块并建立数据块和DataNode的对应关系。DataNode负责处理文件系统用户具体的数据读写请求,同时也可以处理NameNode对数据块的的创建、删除副本的指令。
NameNode和DataNode对应的程序可以运行在廉价的普通商用服务器上。这些机器一般都运行着GNU/Linux操作系统。HDFS由Java语言编写,支持JVM的机器都可以运行NameNode和DataNode对应的程序。虽然一般情况下是GNU/Linux系统,但是因为Java的可移植性,HDFS也可以运行在很多其他平台之上。一个典型的HDFS部署情况是:NameNode程序单独运行于一台服务器节点上,其余的服务器节点,每一台运行一个DataNode程序。
在一个集群中采用单一的NameNode可以大大简化系统的架构。另外,虽然NameNode是所有HDFS的元数据的唯一所有者,但是,程序访问文件时,实际的文件数据流并不会通过NameNode传送,而是从NameNode获得所需访问数据块的存储位置信息后,直接去访问对应的DataNode获取数据。这样设计有两点好处:一是可以允许一个文件的数据能同时在不同DataNode上并发访问,提高数据访问的速度;二是可以大大减少NameNode的负担,避免使得NameNode成为数据访问瓶颈。
HDFS的基本文件访问过程是:
1)首先,用户的应用程序通过HDFS的客户端程序将文件名发送至NameNode。
2)NameNode接收到文件名之后,在HDFS目录中检索文件名对应的数据块,再根据数据块信息找到保存数据块的DataNode地址,将这些地址回送给客户端。
3)客户端接收到这些DataNode地址之后,与这些DataNode并行地进行数据传输操作,同时将操作结果的相关日志(比如是否成功,修改后的数据块信息等)提交到NameNode。
2.?数据块
为了提高硬盘的效率,文件系统中最小的数据读写单位不是字节,而是一个更大的概念——数据块。但是,数据块的信息对于用户来说是透明的,除非通过特殊的工具,否则很难看到具体的数据块信息。
HDFS同样也有数据块的概念。但是,与一般文件系统中大小为若干KB的数据块不同,HDFS数据块的默认大小是64MB,而且在不少实际部署中,HDFS的数据块甚至会被设置成128MB甚至更多,比起文件系统上几个KB的数据块,大了几千倍。
将数据块设置成这么大的原因是减少寻址开销的时间。在HDFS中,当应用发起数据传输请求时,NameNode会首先检索文件对应的数据块信息,找到数据块对应的DataNode;DataNode则根据数据块信息在自身的存储中寻找相应的文件,进而与应用程序之间交换数据。因为检索的过程都是单机运行,所以要增加数据块大小,这样就可以减少寻址的频度和时间开销。
3.?命名空间
HDFS中的文件命名遵循了传统的“目录/子目录/文件”格式。通过命令行或者是API可以创建目录,并且将文件保存在目录中;也可以对文件进行创建、删除、重命名操作。不过,HDFS中不允许使用链接(硬链接和符号链接都不允许)。命名空间由NameNode管理,所有对命名空间的改动(包括创建、删除、重命名,或是改变属性等,但是不包括打开、读取、写入数据)都会被HDFS记录下来。
HDFS允许用户配置文件在HDFS上保存的副本数量,保存的副本数称作“副本因子”(Replication Factor),这个信息也保存在NameNode中。
4.?通信协议
作为一个分布式文件系统,HDFS中大部分的数据都是通过网络进行传输的。为了保证传输的可靠性,HDFS采用TCP协议作为底层的支撑协议。应用可以向NameNode主动发起TCP连接。应用和NameNode交互的协议称为Client协议,NameNode和DataNode交互的协议称为DataNode协议(这些协议的具体内容请参考其他资料)。而用户和DataNode的交互是通过发起远程过程调用(Remote Procedure Call,RPC)、并由NameNode响应来完成的。另外,NameNode不会主动发起远程过程调用请求。
5.?客户端
严格来讲,客户端并不能算是HDFS的一部分,但是客户端是用户和HDFS通信最常见也是最方便的渠道,而且部署的HDFS都会提供客户端。
客户端为用户提供了一种可以通过与Linux中的Shell类似的方式访问HDFS的数据。客户端支持最常见的操作如(打开、读取、写入等);而且命令的格式也和Shell十分相似,大大方便了程序员和管理员的操作。具体的命令行操作详见3.4节。
除了命令行客户端以外,HDFS还提供了应用程序开发时访问文件系统的客户端编程接口,具体的HDFS编程接口详见3.5节。

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
4月前
|
分布式计算 Java 大数据
【大数据技术Hadoop+Spark】HDFS Shell常用命令及HDFS Java API详解及实战(超详细 附源码)
【大数据技术Hadoop+Spark】HDFS Shell常用命令及HDFS Java API详解及实战(超详细 附源码)
193 0
|
4月前
|
存储 分布式计算 Hadoop
【大数据技术Hadoop+Spark】HDFS概念、架构、原理、优缺点讲解(超详细必看)
【大数据技术Hadoop+Spark】HDFS概念、架构、原理、优缺点讲解(超详细必看)
118 0
|
2月前
|
分布式计算 大数据 Java
Spark 大数据实战:基于 RDD 的大数据处理分析
Spark 大数据实战:基于 RDD 的大数据处理分析
121 0
|
4月前
|
SQL 分布式计算 Hadoop
[AIGC ~大数据] 深入理解Hadoop、HDFS、Hive和Spark:Java大师的大数据研究之旅
[AIGC ~大数据] 深入理解Hadoop、HDFS、Hive和Spark:Java大师的大数据研究之旅
|
4月前
|
分布式计算 Hadoop 大数据
大数据成长之路-- hadoop集群的部署(3)HDFS新增节点
大数据成长之路-- hadoop集群的部署(3)HDFS新增节点
68 0
|
4月前
|
存储 大数据 Java
【云计算与大数据技术】文件存储格式行式、列式、GFS、HDFS的讲解(图文解释 超详细)
【云计算与大数据技术】文件存储格式行式、列式、GFS、HDFS的讲解(图文解释 超详细)
86 0
|
4月前
|
存储 分布式计算 大数据
【云计算与大数据技术】分布式协同系统Chubby锁、ZooKeeper在HDFS中的使用讲解(图文解释 超详细)
【云计算与大数据技术】分布式协同系统Chubby锁、ZooKeeper在HDFS中的使用讲解(图文解释 超详细)
64 0
|
4月前
|
存储 分布式计算 Hadoop
Hadoop系列HDFS详解
Hadoop系列HDFS详解
40 0
|
5月前
|
存储 分布式计算 Hadoop
aws s3常用命令、hdfs dfs/hadoop fs常用命令
aws s3常用命令、hdfs dfs/hadoop fs常用命令
405 0
|
10天前
|
分布式计算 Hadoop 测试技术
Hadoop【基础知识 05】【HDFS的JavaAPI】(集成及测试)
【4月更文挑战第5天】Hadoop【基础知识 05】【HDFS的JavaAPI】(集成及测试)
38 8