Hadoop之HDFS概念与体系结构

HDFS是什么

Hadoop Distributed File System(简称HDFS)是Hadoop分布式文件系统。

HDFS有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求(requirements)这样可以实现流的形式访问(streaming access)文件系统中的数据。

HDFS是一个分布式文件系统,这里科普一下什么是分布式文件系统:

当数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统 (Distributed File System)。

  • 分布式文件系统的定义:

是一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间。

  • 分布式文件系统特点:
  • 通透性。

让实际上是通过网络来访问文件的动作,由程序与用户看来,就像是访问本地的磁盘一般。

  • 容错。

即使系统中有某些节点脱机,整体来说系统仍然可以持续运作而不会有数据损失。

注意:分布式文件管理系统很多,HDFS只是其中一种。适用于一次写入多次查询的情况,不支持并发写情况,小文件不合适。

HDFS的体系结构

NameNode
  • NameNode是整个文件系统的管理节点。它维护着整个文件系统的文件目录树,文件/目录的元信息和每个文件对应的数据块列表。接收用户的操作请求。
  • 文件包括:hdfs-site.xml的name.dir属性

fsimage:元数据镜像文件。存储某一时段NameNode内存元数据信息。

edits:操作日志文件。

fstime:保存最近一次checkpoint的时间

  • 以上这些文件是保存在linux的文件系统中。
DataNode

DataNode是文件系统的工作节点,他们根据客户端或者是namenode的调度存储和检索数据,并且定期向namenode发送他们所存储的块(block)的列表。

  • 文件块(block):最基本的存储单位。对于文件内容而言,一个文件的长度大小是size,那么从文件的0偏移开始,按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称一个Block。HDFS默认Block大小是128MB,以一个256MB文件,共有256/128=2个。可以在配置里指定dfs.block.size属性的大小.
  • 不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间
  • Replication指定多副本。默认是三个。hdfs-site.xml的dfs.replication属性。
Secondary NameNode

是HA的一种解决方案,主要起到两种作用:镜像备份以及日志和镜像定期合并,这两个过程称之为checkpoint。

镜像备份:备份fsimage(fsimage是元数据发送检查点时写入文件);

日志与镜像的定期合并的作用:将Namenode中edits日志和fsimage合并,防止(如果Namenode节点故障,namenode下次启动的时候,会把fsimage加载到内存中,应用edit log,edit log往往很大,导致操作往往很耗时。)

Secondary NameNode的工作流程:
  1. secondary通知namenode切换edits文件
  2. secondary从namenode获得fsimage和edits(通过http)
  3. secondary将fsimage载入内存,然后开始合并edits
  4. secondary将新的fsimage发回给namenode
  5. namenode用新的fsimage替换旧的fsimage
什么时候checkpiont
  1. checkpoint.period 指定两次checkpoint的最大时间间隔,默认3600秒。
  2. checkpoint.size规定edits文件的最大值,一旦超过这个值则强制checkpoint,不管是否到达最大时间间隔。默认大小是64M。

HDFS的工作模式

HDFS是一个的主从结构,一个HDFS集群是由一个NameNode,它是一个管理文件命名空间和调节客户端访问文件的主服务器,当然还有一些DataNode,通常是一个节点一个机器,它来管理对应节点的存储。HDFS对外开放文件命名空间并允许用户数据以文件形式存储。

内部机制是将一个文件分割成一个或多个块,这些块被存储在一组DataNode中。NameNode用来操作文件命名空间的文件或目录操作,如打开,关闭,重命名等等。它同时确定块与DataNode的映射。DataNode来负责来自文件系统客户的读写请求。DataNode同时还要执行块的创建,删除,和来自NameNode的块复制指令。

NameNode和DataNode都是运行在普通的机器之上的软件,机器典型的都是GNU/Linux,HDFS是用java编写的,任何支持java的机器都可以运行NameNode或DataNode,利用java语言的超轻便型,很容易将HDFS部署到大范围的机器上。典型的部署是由一个专门的机器来运行NameNode软件,集群中的其他每台机器运行一个DataNode实例。体系结构不排斥在一个机器上运行多个DataNode的实例,但是实际的部署不会有这种情况。

集群中只有一个NameNode极大地简单化了系统的体系结构。NameNode是仲裁者和所有HDFS元数据的仓库,用户的实际数据不经过NameNode。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Spark学习技巧

金融反欺诈场景下的Spark实践

推荐阅读: 1,Spark Structured Streaming高级特性 2,Spark高级操作之json复杂和嵌套数据结构的操作一...

33210
来自专栏星汉技术

原 Spark的架构

3175
来自专栏Hadoop实操

如何将CDH从企业版降级为免费版

在使用CDH企业版时,当License过期后,在CM顶部总是会有一个红色的banner条显示License已过期。我们有时会觉得它影响美观,想要考虑将CDH从企...

6735
来自专栏牛肉圆粉不加葱

YARN 设计理念与基本架构

ResourceManager 是一个全局的资源管理器,负责整个集群的资源管理和分配。它主要由两个组件构成:调度器(Scheduler)和应用程序管理器(App...

851
来自专栏LhWorld哥陪你聊算法

【Sqoop篇】----Sqoop从搭建到应用案例

今天开始讲解Sqoo的用法搭建和使用。Sqoop其实功能非常简单。主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql...)间进...

1011
来自专栏灯塔大数据

每周学点大数据 | No.63 Hadoop MapReduce 实践—环境搭建(下)

NO.63  Hadoop MapReduce 实践—环境搭建(下) Mr. 王:vim 是Linux 下开源的文本编辑器,它的功能非常强大,受到广大编程爱好...

3355
来自专栏LanceToBigData

Hadoop(四)HDFS集群详解

前言   前面几篇简单介绍了什么是大数据和Hadoop,也说了怎么搭建最简单的伪分布式和全分布式的hadoop集群。接下来这篇我详细的分享一下HDFS。   H...

4279
来自专栏我是攻城师

Hive2.1.0集成Tez

3033
来自专栏LuckQI

Java大数据学习~Hadoop初识一了解其架构

833
来自专栏Hadoop实操

Cloudera Manager管理控制台

Cloudera Manager管理控制台(Cloudera Manager Admin Console)是一个基于Web的用户界面,用于配置,管理和监控CDH...

91011

扫码关注云+社区