Hadoop系列-HDFS基础

  1. 基本原理

    HDFS(Hadoop Distributed File System)是Hadoop的一个基础的分布式文件系统,这个分布式的概念主要体现在两个地方:

    • 数据分块存储在多台主机
    • 数据块采取冗余存储的方式提高数据的可用性

    针对于以上的分布式存储概念,HDFS采用了master/slave的主从结构来构建整个存储系统。之所以可以通过分散的机器组成一个整体式的系统,这其中机器之间的相互通讯必不可少。对于一个程序在不同机器上的通讯,主要是通过远程系统调用RPC(remote procedure call)实现,不同的语言有不同的实现方式,而HDFS是运行于JVM基础上的,那么这里的通讯就是指不同机器的JVM进程之间的通讯。当然,底层的网络通讯主要是socket协议,在实际的工业场景中使用对socket进一步封装的netty实现。接下来,进一步针对数据块、namenode、datanode等进行说明。

  1. 数据块

    每个计算机的磁盘都有一个默认的数据块(block)大小,这是进行数据读写的最小单位,文件系统通过管理磁盘上的数据块来管理文件。HDFS的block默认大小为128MB,但是于一般单一的磁盘文件系统不同的是,HDFS中小于一个块大小的文件不会占用整个block空间。例如:一个大小为1MB的文件存储在HDFS中时,在默认数据块是128MB的情况下还是只占用1MB,而不是128MB。决定数据传输速度的因素主要是磁盘驱动器的传输速率和文件寻址效率,如果数据块设置的足够大,那么文件寻址的效率就会变高,但也不是无限大,具体block的大小还需要根据具体的业务逻辑进行考虑。对文件进行块抽象的一个明显优点就是文件的大小不受限于任何一台单独的主机的磁盘容量限制,也就使得HDFS更适合数据量比较大的大数据场景。

  2. namenode

    整个HDFS集群有管理节点(namenode)和工作节点(datanode)。namenode主要维持两层关系:

    • 第一层:整个集群的目录树结构以及文件的数据块列表;
    • 第二层:数据块与各个datanode的映射关系,也包括datanode的一些主机名、磁盘大小等数据。

      上图展示了namenode维持的两层关系,为了使客户端访问的速度最快,以上的信息会保存在namenode主机的内存中。对于在内存中保存的数据,在断电后就会消失,这显然是不允许的,因此以上信息除了在内存中保存之外还需要在硬盘中保存一份,具体在硬盘中的保存形式为:

      • 命名空间镜像文件(FSImage):某一时刻内存元数据的真实组织情况
      • 编辑日志文件(EditsLog):该时刻后所有元数据的改动信息
  3. secondarynamenode

    secondarynamenode主要是不定时的观察EditsLog、FSImage的情况,超过一定的阈值情况下对EditsLog和FSImage进行合并,形成新的FSImage文件。这样可以尽量减少namenode本身的负载。

  4. datanode

    datanode是主要的数据存储节点,这其中涉及了datanode与namenode的通讯情况。

  • register:将datanode所在主机的信息(如主机名、内存、硬盘)告诉namenode,nemenode通过check相应的信息允许其称为集群中的一员;
  • block report:传输block信息给namenode,便于namenode可以维护数据块和数据节点之间的映射关系;
  • send heartbeat:
    • 通过心跳机制保持与namenode的联系更新存储容量等信息
    • 执行namenode通过heartbeat传输来的指令
  1. federation

    上文提到,namenode为了尽可能的使客户端的访问效率变高,会将所有的文件系统和数据块的引用信息保存在内存中,如果集群存储的文件量足够多,namenode内存的大小将限制集群的整个性能和可扩展能力。为此,在hadoop2.x中引入了federation机制,通过添加namenode实现扩展。

    federation环境下,每隔namenode维护一个命名空间卷(namespace volume)由命名空间的元数据和数据块池组成,命名空间之间相互独立,互不通信。在这种情况下datanode被用作通用的数据存储设备,每个datanode要向集群中所有的namenode注册,且周期性的向所有namenode发送心跳和报告,并执行来自所有namenode的命令。但是,每个namenode只管理各自的block信息,如果一个namenode挂掉,虽然不会影响到其他的namenode,但是这个namenode管理的数据就不可访问,还是会存在SPOF(single point of failure,即单点故障问题)。

    以上主要是个人对HDFS的一些基本概念的初步理解,如有错误还请各位大大们指正。

原文地址:https://www.cnblogs.com/zeem0ny/p/10611952.html

时间: 2024-08-02 19:19:50

Hadoop系列-HDFS基础的相关文章

每天收获一点点------Hadoop之HDFS基础入门

一.HDFS出现的背景 随着社会的进步,需要处理数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是却不方便管理和维护—>因此,迫切需要一种系统来管理多台机器上的文件,于是就产生了分布式文件管理系统,英文名成为DFS(Distributed File System). 那么,什么是分布式文件系统?简而言之,就是一种允许文件通过网络在多台主机上分享的文件系统,可以让多个机器上的多个用户分享文件和存储空间.它最大的特点是“通透性”,DFS让实际上是通过网络来

Hadoop之HDFS基础

一. HDFS概念 1.1 概念 HDFS是一个分布式文件系统,用于存储文件,通过目录树来定位文件,适合一次写入,多次读出的场景,且不支持文件的修改.适合用来做数据分析,并不适合用来做网盘应用. 1.2 组成 1)HDFS集群包括,NameNode和DataNode以及Secondary Namenode. 2)NameNode负责管理整个文件系统的元数据,以及每一个路径(文件)所对应的数据块信息. 3)DataNode 负责管理用户的文件数据块,每一个数据块都可以在多个datanode上存储多

Hadoop系列(二)Hadoop三大核心之HDFS基础

目录 hdfs基础 重要概念 Hadoop 特点 Hadoop HA 针对海量数据,核心问题始终是计算和存储.当数据集的大小超过一台独立物理计算机的存储能力时,就有必要对它进行分区并存储到多台机器上.跨机器存储的文件系统就被成为分布式文件系统.分布式系统架构于网络之上,势必引入网络编程的复杂性,如何实现容忍节点故障但不丢失数据,是HDFS的重要挑战. hdfs基础 Hadoop 自带HDFS分布式文件系统:Hadoop Distributed Filesystem.也简称DFS.主要用来解决海量

hadoop系列二:HDFS文件系统的命令及JAVA客户端API

转载请在页首明显处注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6391518.html 一:说明 此为大数据系列的一些博文,有空的话会陆续更新,包含大数据的一些内容,如hadoop,spark,storm,机器学习等. 当前使用的hadoop版本为2.6.4 上一篇:hadoop系列一:hadoop集群安装 二:HDFS的shell命令 上一章说完了安装HADOOP集群部分,这一张讲HDFS. 其实基本上操作都是通过JAVA API来操作,所以这里的s

Hadoop系列之hdfs(分布式文件系统)安装配置

Hadoop系列之hdfs(分布式文件系统)安装配置环境介绍:     ip                        节点192.168.3.10      hdfs-master192.168.3.11      hdfs-slave1192.168.3.12      hdfs-slave21.在所有机器添加hosts192.168.3.10      hdfs-master192.168.3.11      hdfs-slave1192.168.3.12      hdfs-slav

Hadoop 系列(一)基本概念

Hadoop 系列(一)基本概念 一.Hadoop 简介 Hadoop 是一个由 Apache 基金会所开发的分布式系统基础架构,它可以使用户在不了解分布式底层细节的情況下开发分布式程序,充分利用集群的威力进行高速运算和存储. 从其定义就可以发现,它解決了两大问题:大数据存储.大数据分析.也就是 Hadoop 的两大核心:HDFS 和 MapReduce. HDFS(Hadoop Distributed File System) :是可扩展.容错.高性能的分布式文件系统,异步复制,一次写入多次读

Hadoop之HDFS原理及文件上传下载源码分析(下)

上篇Hadoop之HDFS原理及文件上传下载源码分析(上)楼主主要介绍了hdfs原理及FileSystem的初始化源码解析, Client如何与NameNode建立RPC通信.本篇将继续介绍hdfs文件上传.下载源解析. 文件上传 先上文件上传的方法调用过程时序图: 其主要执行过程: FileSystem初始化,Client拿到NameNodeRpcServer代理对象,建立与NameNode的RPC通信(楼主上篇已经介绍过了) 调用FileSystem的create()方法,由于实现类为Dis

hadoop系列:zookeeper(3)——zookeeper核心原理(事件)

1.概述 上一篇文章,我们对zookeeper中的数据组织结构.Leader选举原理进行了讲述(http://blog.csdn.net/yinwenjie/article/details/47613309).这篇文章我们紧接上文讲解zookeeper中的事件机制.并通过示例代码告诉读者怎么使用zookeeper中的事件通知器:watcher. 2.zookeeper中的监听机制 按照上文中的讲解,我们知道zookeeper主要是为了统一分布式系统中各个节点的工作状态,在资源冲突的情况下协调提供

HDFS基础和java api操作

1. 概括 适合一次写入多次查询情况,不支持并发写情况 通过hadoop shell 上传的文件存放在DataNode的block中,通过linux shell只能看见block,看不见文件(HDFS将客户端的大文件存放在很多节点的数据块中,Block本质上是一个逻辑概念,它是hdfs读写数据的基本单位) HDFS中,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间 2. fs 可以使用hdfs shell操作hdfs,常用 fs命令如下: eg: hadoop fs -cat fi