HDFS追本溯源:体系架构详解
Hadoop是一个开发和运行处理大规模数据的软件平台,是Apache的一个用Java语言实现开源软件框架,实现在大量计算机组成的集群中对海量数据进行分布式计算。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。
Hadoop框架中最核心设计就是:HDFS和MapReduce。HDFS提供了海量数据的存储,MapReduce提供了对数据的计算。HDFS在Hadoop中扮演了非常基础的作用,以文件系统的形式为上层应用提供海量数据的存储服务。
HDFS作为一个分布式文件系统,具有高容错的特点。它可以部署在廉价的通用硬件上,提供高吞吐率(Throughput)的数据访问,特别适合那些需要处理海量数据集的应用程序。它没有遵循POSIX的要求,不支持ls,cp这样标准的UNIX命令,也不支持fopen和fread这样的文件读写方法。它采用全新的设计,提供了一套特有的,基于Hadoop抽象文件系统的API,支持以流的方式访问文件系统的数据。
1. HDFS的特征与局限
HDFS有以下特性:
- 支持超大文件。理论上,HDFS上的单个文件可以存储到整个集群的所有存储空间。
- 硬件故障的快速恢复。由于集群包含成百上千个节点,硬件故障就是一个非常常见的问题了。故障检测和自动恢复在HDFS设计之初就是很重要的设计目标。
- 流式数据访问。HDFS处理的数据规模都比较大,应用一次需要访问大量的数据。同时,这些应用一般是批量处理,而不是用户交互式处理。HDFS使得应用程序能够以stream的方式访问数据集,注重的是数据的吞吐量,而不是数据访问的速度。
- 简化的一致性模型。HDFS的文件一旦创建,只能追加,不能对已有数据进行修改。这样简单的一致性模型有利于提供高吞吐量的数据访问。
正是由于上面的一些设计特征,因此HDFS并不适合以下应用:
- 低延时数据访问。在用户交互性的应用中,应用需要在ms或者几个s的时间内得到响应。由于HDFS为高吞吐率做了设计,也因此牺牲了快速响应。对于低延时的应用,可以考虑使用HBase或者Cassandra。
- 大量的小文件。标准的HDFS数据块的大小是64M,存储小文件并不会浪费实际的存储空间,但是无疑会增加了在NameNode上的元数据,大量的小文件会影响整个集群的性能。前面我们知道,Btrfs为小文件做了优化-inline file,对于小文件有很好的空间优化和访问时间优化。
- 多用户写入,修改文件。HDFS的文件只能有一个写入者,而且写操作只能在文件结尾以追加的方式进行。它不支持多个写入者,也不支持在文件写入后,对文件的任意位置的修改。
但是在大数据领域,分析的是已经存在的数据,这些数据一旦产生就不会修改,因此,HDFS的这些特性和设计局限也就很容易理解了。HDFS为大数据领域的数据分析,提供了非常重要而且十分基础的文件存储功能。
2. 体系结构
2.1 概述
HDFS采用了主从式(Master/Slave)的体系结构,其中NameNode(NN),DataNode(DN)和Client是HDFS中的3个重要角色。HDFS也在社区的努力下不断演进,包括支持文件追加,Federation,HA的引入等。关于演进历史可以点击此处。关于HA和Federation的内容,请参考博文《HDFS HA: 高可靠性分布式存储系统解决方案的历史演进》。本文仅仅涉及Secondary NameNode(SNN)。
在一个HDFS中,有一个NN,一个SNN和众多的DN,在大型的集群中可能会有数以千计的DN。而Client,一般意义上比数据节点的个数还要多。它们之间的关系如下图:
aaarticlea/png;base64,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" alt="" />
NN管理了HDFS两个最重要的关系:
- 目录文件树结构和文件与数据块的对应关系:会持久化到物理存储中,文件名叫做fsimage。
- DN与数据块的对应关系,即数据块存储在哪些DN中:在DN启动时会上报到NN它所维护的数据块。这个是动态建立的,不会持久化。因此,集群的启动可能需要比较长的时间。
而DN则保存了数据块。并且执行NN的命令,比如复制,拷贝,删除等操作。
Client则是使用HDFS的主题,包括写文件,读文件等常见操作。
2.2 数据块
上文多次提到数据块,那么什么是数据块?为了便于管理,设备往往将存储空间组织成具有一定结构的存储单位。比如硬盘,文件以块的形式存储在硬盘中,块的大小代表了系统读和写操作的最小单位;在Linux的Ext3文件系统中,块的大小默认为4K。文件系统通过一个块大小的整数倍来使用硬盘。硬盘上的数据块管理属于文件系统实现的内部细节;对于调用系统接口来读写文件的用户来说是透明的。
HDFS的块也是类似的原理。只不过它的块拥有更大的数据单元,默认的数据块大小是64M。HDFS将文件进行分块,块作为单独的存储单元,在Linux上以普通文件的形式保存在DN的文件系统中。数据块是HDFS文件存储的基本单位。在这里要注意,HDFS并不直接管理硬盘,它是通过DN上的文件系统存储数据块,通过管理数据块,来完成文件管理服务的。
HDFS是针对大文件设计的分布式系统,使用数据块有许多的好处:
- 文件大小不受单个DN的存储空间限制,文件可以保存到任意的DN上。
- 简化了存储子系统。简单化是所有系统的设计追求。特别是在故障种类繁多的分布式系统。将管理块和管理文件分开,简化了存储管理,也消除了分布式管理文件元数据的复杂性。
- 方便容错,有利于数据复制。在HDFS中,为了应对损坏的块以及硬盘,机器故障,数据块会在不同的节点上进行复制。如果一个数据块的副本丢失或者损坏,系统会在其他地方读取副本,并且数据块会复制到一个正常运行的节点上,保证数据块副本数的最低要求。当然了,这个过程对于Client来说是透明的,它实现了分布式系统中的位置透明性和故障透明性。
那么为什么数据块那么大呢?其实和文件系统的大数据块的原理是一样的。在普通的文件系统中使用较大的数据块,可以减少管理数据块所需要的开销,如在Linux中可以减少保存在i-node中硬盘地址表中的信息链的长度;同时在对文件进行读写时,可以减少寻址开销,即硬盘定位数据块的次数。在HDFS中采用大数据库唉,可以减少NN上管理文件和数据块关系的开销,而且在文件读写时,减少因为建立网络连接的开销。
2.3 NN
NN是HDFS主从结构中主节点上运行的主要进程,它负责管理从节点DN。NN维护着整个文件系统的文件目录树,文件目录的元信息和文件的数据块索引。这些信息以两种信息保存在本文文件系统中,一种是文件系统镜像(文件名字fsimage),另一种是fsimage的编辑日志(文件名字edits)。
fsimage中保存着某一特定时刻HDFS的目录树、元信息和文件数据块的索引等信息,后续的对这些信息的改动,则保存在编辑日志中,它们一起提供了一个完整的NN的第一关系。
同时,通过NN,Client还可以了解到数据块所在的DN的信息。需要注意的是,NN中关于DN的信息是不会保存到NN的本地文件系统的,也就是上面提到的fsimage和edits中。NN每次启动时,都会通过每个DN的上报来动态的建立这些信息。这些信息也就构成了NN第二关系。
另外,NN还能通过DN获取HDFS整体运行状态的一些信息,比如系统的可用空间,已经使用的空间,各个DN的当前状态等。
2.4 SNN
Secondary NameNode是用于定期合并fsimage和edits的。与NN一样,每个集群都有一个SNN,在大规模部署的条件下,一般SNN也独自占用一台服务器。SNN按照集群配置的时间建个,不停的获取HDFS某一个时间点的fsimage和edits,合并它们得到一个新的fsimage。该fsimage上传到NN后会替换NN的老的fsimage。
从上面可以看出,SNN会配合NN,为NN的第一关系提供了一个简单的CheckPoint机制,并避免出现edits过大,导致NN启动时间过长的问题。
注意,SNN并不是NN的strandby。NN是HDFS集群中的SPOF(Single Point of Failure)。通过SNN,可以减少NN的启动时间并且降低NN元数据丢失的风险。但是,在HA出现前,NN的失效是要通过人工干预的。
2.5 DN
DN是HDFS中硬盘IO最忙碌的部分:将HDFS的数据块写到Linux本地文件系统中,或者从这些数据块中读取数据。DN作为从节点,会不断的向NN发送心跳。初始化时,每个DN将当前节点的数据块上报给NN。NN也会接收来自NN的指令,比如创建、移动或者删除本地的数据块,并且将本地的更新上报给NN。
下图是NN上文件和数据块的对应关系和DN与数据块的对应关系的示意。
aaarticlea/png;base64,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" alt="" />
图中有两个文件,data1有三个数据块,表示为b1、b2和b3。data2文件由b4和b5组成。这两个文件的内容封三到几个DN上。示意中,每个数据块都有三个副本。
2.6 Client
Client是用户和HDFS进行交互的手段,HDFS提供了各种各样的Client,包括CLI,Java API,Thrift接口,C语言库,用户空间文件系统(FUSE)等。虽然Hadoop不是一个POSIX的文件系统,不支持ls,cp这样的命令,但是Hadoop还是提供了一套和Linux文件命令类似的命令行工具,比如以下命令可以创建一个目录:
hadoop fs -mkdir testDIR
通过命令行工具,可以进行一些典型的文件操作,比如读文件,创建文件路径,移动文件,重命名,列出文件列表等。同时,命令行工具也提供了本地文件和HDFS交互的能力,可以通过以下命令,将本地文件上传到HDFS:
hadoop fs -copyFromLocal testInput/hello.txt /user/alice/in/hello.txt
命令行工具提供了访问HDFS的基本能力,而Java API则提供了进一步的功能。目前,所以访问HDFS的接口都是基于Java API的,包括上面介绍的命令行工具。下面是一个非常简单的Java API的例子。
@Test
public void testUpload() throws Exception{
Configuration conf = new Configuration();
conf.addResource(new Path("D:\\myeclipse\\Hadoop\\hadoopEx\\src\\conf\\hadoop.xml")); FileSystem hdfs = FileSystem.get(conf);
Path src = new Path("F:\\lzp\\T.txt");
Path dst = new Path("/");
hdfs.copyFromLocalFile(src, dst); System.out.println("Upload to " + conf.get("fs.default.name"));
FileStatus files[] = hdfs.listStatus(dst);
for(FileStatus file : files){
System.out.println(file.getPath());
}
}
参考资料:
1. Hadoop技术内幕-深入解析HADOOP COMMON和HDFS架构设计与实现原理
HDFS追本溯源:体系架构详解的更多相关文章
- iOS消息体系架构详解-融云即时通讯云
iOS SDK 体系架构 本文档将详细介绍融云的 SDK 产品架构和消息体系,以便于您更深入的了解融云并更快速的开发自己的产品. 融云 SDK 系统架构 IMKit IMKit 的功能主要是封装各种界 ...
- Android体系架构详解
Andriod是什么? 首先,就像Android开源和兼容性技术负责人Dan Morrill在Android开发手册兼容性部分所解释的,“Android并不是传统的Linux风格的一个规范或分发版本, ...
- hdfs文件系统架构详解
hdfs文件系统架构详解 官方hdfs分布式介绍 NameNode *Namenode负责文件系统的namespace以及客户端文件访问 *NameNode负责文件元数据操作,DataNode负责文件 ...
- Hyperledger Fabric架构详解
区块链开源实现HYPERLEDGER FABRIC架构详解 区块链开源实现HYPERLEDGER FABRIC架构详解 2018年5月26日 陶辉 Comments 10 Comments hyper ...
- NopCommerce源码架构详解--初识高性能的开源商城系统cms
很多人都说通过阅读.学习大神们高质量的代码是提高自己技术能力最快的方式之一.我觉得通过阅读NopCommerce的源码,可以从中学习很多企业系统.软件开发的规范和一些新的技术.技巧,可以快速地提高我们 ...
- 领域驱动设计(Domain Driven Design)参考架构详解
摘要 本文将介绍领域驱动设计(Domain Driven Design)的官方参考架构,该架构分成了Interfaces.Applications和Domain三层以及包含各类基础设施的Infrast ...
- WeChatAPI 开源系统架构详解
WeChatAPI 开源系统架构详解 如果使用WeChatAPI,它扮演着什么样的角色? 从图中我们可以看到主要分为3个部分: 1.业务系统 2.WeChatAPI: WeChatWebAPI,主要是 ...
- NopCommerce源码架构详解
NopCommerce源码架构详解--初识高性能的开源商城系统cms 很多人都说通过阅读.学习大神们高质量的代码是提高自己技术能力最快的方式之一.我觉得通过阅读NopCommerce的源码,可以从 ...
- RESTful 架构详解
RESTful 架构详解 分类 编程技术 1. 什么是REST REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次 ...
随机推荐
- Windows、Unix、Linux是什么类型的操作系统?
Windows:具有图形用户界面的视窗操作系统. Unix:多用户分时操作系统. Linux:类似Unix操作系统,用于个人计算机.
- 使用JdbcTemplate过程中使用到多个参数和like模糊
项目中经常会用到模糊查询,最近使用JdbcTemplate过程中就遇到了. 一开始尝试了拼接的方式去 String sql = "select count(1) from web_users ...
- Linux学习之CentOS(十八)-----恢复Ext3下被删除的文件与 使用grep恢复被删文件内容(转)
前言 下面是这个教程将教你如何在Ext3的文件系统中恢复被rm掉的文件. 删除文件 假设我们有一个文件名叫 'test.txt' $ls -il test.txt 15 -rw-rw-r– 2 roo ...
- Gradle--初识
1.Eclipse从svn导入Gradle项目 1.检出项目的时候不要选新项目,选"做为工作空间中的项目检出",然后点Finish. 2.将项目转为Gradle项目,右键导入的项目 ...
- 图解JavaScript原型和原型链
先看看最简单的栗子: //构造函数 function People(name, age){ this.name = name; this.age = age; } //原型对象(所有由构造函数实例而来 ...
- 使用CSS让多出来的字变为省略号
<style> .text1 { width:200px; overflow:hidden; text-overflow:ellipsis; -o-text-overflow:ellips ...
- delphi 组件安装教程详解
学习安装组件的最好方法,就是自己编写一个组件并安装一遍,然后就真正明白其中的原理了. 本例,编写了两个BPL, dclSimpleEdit.bpl 与 SimpleLabel.bpl ,其中,dc ...
- JAVA中抽象类的使用
抽象类是从多个具体类中抽象出来的父类,它具有更高层次的抽象.抽象类体现的就是一种模板模式的设计,抽象父类可以只定义需要使用的某些方法,把不能实现的某些部分抽象成抽象方法,留给其子类去实现.具体来说,抽 ...
- Node.js 模块系统
为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的.换言之,一个 Node.js 文件就是一个模块, ...
- Docker内核能力机制
能力机制(Capability)是 Linux 内核一个强大的特性,可以提供细粒度的权限访问控制. Linux 内核自 2.2 版本起就支持能力机制,它将权限划分为更加细粒度的操作能力,既可以作用在进 ...