大数据学习笔记2 - 分布式文件系统HDFS(待续)
分布式文件系统结构
分布式文件系统是一种通过网络实现文件在多台主机上进行分布式存储的文件系统,采用C/S模式实现文件系统数据访问,目前广泛应用的分布式文件系统主要包括GFS和HDFS,后者是前者的开源实现。
分布式文件系统在物理结构上由计算机集群中的多个节点构成,这些节点分为两类:主节点(亦称“名称节点”) 、 从节点(亦称“数据节点”)
名称节点,负责文件和目录的创建、删除和重命名等,同时管理着数据节点和文件块的映射关系,客户端通过访问名称节点找到请求文件的存储位置,进而到相应位置读取所需文件块。
数据节点,负责数据的存储、读取,存储时,由名称节点分配存储位置,由客户端直接写入相应数据节点;读取时,客户端从名称节点获取数据节点和文件块的映射关系,从而到相应位置访问数据块;数据节点还要根据名称节点的命令创建、删除数据块和冗余复制。
HDFS相关概念
块:
HDFS将文件划分为若干块,中以块为单位完成数据读写,提高读写效率,一般64M,可设定。64M比一般文件系统要大,是为了减少寻址开销,寻址开销包括 磁盘寻道开销 + 数据块定位开销。块过小,导致定位开销增大;块过大,由于MapReduce中Map一次仅处理一块,如果启动的任务过少,会降低并行效率。
名称节点:
作为中心服务器,负责管理文件系统的命名空间及客户端对文件的访问,不参与数据的传输。保存2个核心数据结构,FsImage + EditLog。其中FsImage维护文件系统树 以及 所有文件和文件夹的元数据;EditLog存储所有针对文件的的操作历史,如创建、删除、重命名等操作。
<注>1.名称节点数据保存在内存中。NameNode记录但非持久化存储文件中块所在数据节点信息,而是在系统每次启动的时候扫描所有数据节点,重构得到元数据。
2.HDFS的文件更新操作写入EditLog而非FsImage,因为FsImage文件较大,修改效率低。
3.NameNode启动时,将FsImage内容加载到内存,执行EditLog中操作(以保证内存中元数据最新),之后创建新的FsImage和空的EditLog。
数据节点:
是HDFS的工作节点,负责数据的存储和读取,受Client和名称节点调度,定期向名称节点发送自己存储的块列表。数据节点的数据实际保存在本地Linux文件系统中,一般一个节点运行一个数据节点进程,负责处理客户端的读写请求,在名称节点的统一调度下进行数据块的创建、删除和复制等操作。每个数据节点周期性地向名称节点发送“心跳”信息,报告自己的状态,没有按时发送心跳包的数据节点会被标记为“宕机”。
当客户端访问文件时,首先把文件名发送到名称节点,名称节点找到对应的数据块;再根据数据块信息找到实际存储该块的数据节点的位置,并把该位置发送给客户端;最后客户端直接访问数据节点获取数据。名称节点不参与数据的传输,使得一个文件的数据能够在不同的数据节点上实现并发访问,提高数据的访问速度。
第二名称节点:
当数据操作记录较多的时候,EditLog也会越来越大,为了解决这一问题,增加了第二名称节点,主要两个功能,1)完成EditLog和FsImage的合并,减小EditLog大小,缩短NameNode重启时间;2)作为NameNode的检查节点,保存NameNode中的元数据信息。
(补充第二名称节点的工作原理)
HDFS体系结构
HDFS是Hadoop的文件系统,是Hadoop的一个核心组成部分,具有超大数据、流式处理、可以运行在廉价商用服务器上等优点。HDFS采用主从(Master/Slave)结构模型,系统集群包括一个名称节点和若干数据节点。
HDFS的命名空间包括目录、文件和块,支持对HDFS中的目录、文件和块做创建、删除、修改等基本操作。但是不支持磁盘配额、权限管理、软硬连接等。
数据在HDFS节点之间的传输采用的通信协议建立在TCP/IP协议基础之上,通信实体包括客户端与名称节点、名称节点与数据节点,客户端与数据节点。其中,客户端向名称节点发起TCP连接,并使用客户端协议与名称节点进行交互;名称节点与数据节点之间通过数据节点协议进行交互;客户端与数据节点通过RPC实现,名称节点不会主动发起RPC,仅相应客户端和数据节点的RPC请求。
HDFS存储原理
HDFS作为一个文件系统,主要的作用就是对数据进行存储,在这个过程中需要考虑数据怎么存、怎么读、怎么进行冗余备份,同时,还要考虑一旦出现故障了要该怎么恢复。所以,HDFS的存储原理主要讨论数据的冗余存储、存取策略、数据错误与恢复
<1>数据的冗余存储
数据的冗余存储是为了实现文件系统的容错性和可用性,HDFS采用多副本方式对数据进行冗余存储,一个数据块的多个副本会被分布到不同的数据节点上。这样做的优点:
- 加快数据的传输速度,多客户端同时访问时,允许不同客户端仓不同数据块副本中读取数据;
- 便于检查数据错误,数据节点中间通过网络传输数据,多副本存储方式便于数据校验,检查数据传输是否出错;
- 保证数据可靠性
<2>数据存取策略
存取策略包括数据存放、数据读取和数据复制。
1)数据存放
HDFS的默认冗余因子是3,一个文件块被存储到3个地方,其中两份副本在同一机架的不同机器上(通常一个机器上仅一个数据节点),第三份副本存放在另一机架的机器上。一般情况下副本放置策略:
- 如果是集群内发起的写操作请求,第一个副本放置到发起请求的节点上,实现就近写入;如果集群外部写请求,从集群内部挑选空闲节点存储第一副本
- 第二副本放置在与第一副本不同机架的数据节点上
- 第三副本放置到与第一副本相同的机架上
- 如有更多副本,从集群中随机选择节点存放。
2)数据读取
客户端读取数据时,从名称节点获得不同副本的存放位置列表(包含副本所在的数据节点),通过HDFS提供的接口确定客户端和数据节点所属机架ID,优先从与客户端处于同一机架的副本数据节点读取数据。如无,则随机选择节点进行读取。
3)数据复制
HDFS采用流水线复制策略,当客户端向HDFS中写入文件时,首先写入本地进行切分,每个块都向名称节点发起写请求,名称节点选择一个数据节点列表返回给客户端;客户端把数据写入列表中第一个数据节点,该节点收到4KB数据后写入本地,并将接收到的数据和节点列表发送给列表中第二个节点,以此类推,文件写完的时候数据复制也同时完成。
<3>数据错误与恢复
HDFS具有较高的容错性,将硬件出错视为常态,并设计了相应的错误检测机制和自动恢复机制。
1)名称节点出错
名称节点是文件系统的核心,两个核心数据结构FsImage和EditLog。Hadoop采用两种机制确保名称节点的安全:
- 把名称节点的元数据信息存储到其他文件系统(如远程挂载的网络文件系统NFS)
- 运行一个第二名称节点,名称节点宕机后利用第二名称节点进行数据恢复。(前文介绍过这种恢复可能丢失部分数据)
一般将上述方式结合使用,当名称节点发生故障时,首先从远程挂载的网络文件系统总获取备份的元数据信息,放到第二名称节点上进行恢复,并把第二名称节点用作名称节点。
2)数据节点出错
当名称节点接收不到数据节点的心跳信息时,视作该数据节点宕机,将节点标记为不可读。名称节点定期检查数据块的副本数,如果由于数据节点宕机导致某些数据块副本小于冗余因子,则启动数据的冗余复制。
3)数据出错
文件创建时客户端会对文件块进行信息摘录,客户端读取数据时利用文件信息对每个数据块进行校验,如果检验出错则从其他节点读取,并报告名称节点,名称节点定期检查并重新复制文件。
大数据学习笔记2 - 分布式文件系统HDFS(待续)的更多相关文章
- 【大数据作业十】分布式文件系统HDFS 练习
作业要求来自: https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3292 利用Shell命令与HDFS进行交互 以”./bin/dfs ...
- 大数据学习笔记——Hadoop编程实战之HDFS
HDFS基本API的应用(包含IDEA的基本设置) 在上一篇博客中,本人详细地整理了如何从0搭建一个HA模式下的分布式Hadoop平台,那么,在上一篇的基础上,我们终于可以进行编程实操了,同样,在编程 ...
- Hadoop学习笔记【分布式文件系统学习笔记】
分布式文件系统介绍 分布式文件系统:Hadoop Distributed File System,简称HDFS. 一.HDFS简介 Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(c ...
- 大数据学习笔记1-大数据处理架构Hadoop
Hadoop:一个开源的.可运行于大规模集群上的分布式计算平台.实现了MapReduce计算模型和分布式文件系统HDFS等功能,方便用户轻松编写分布式并行程序. Hadoop生态系统: HDFS:Ha ...
- 大数据学习笔记——Java篇之集合框架(ArrayList)
Java集合框架学习笔记 1. Java集合框架中各接口或子类的继承以及实现关系图: 2. 数组和集合类的区别整理: 数组: 1. 长度是固定的 2. 既可以存放基本数据类型又可以存放引用数据类型 3 ...
- 大数据学习笔记——Linux完整部署篇(实操部分)
Linux环境搭建完整操作流程(包含mysql的安装步骤) 从现在开始,就正式进入到大数据学习的前置工作了,即Linux的学习以及安装,作为运行大数据框架的基础环境,Linux操作系统的重要性自然不言 ...
- 大数据学习笔记——HDFS写入过程源码分析(1)
HDFS写入过程方法调用逻辑 & 源码注释解读 前一篇介绍HDFS模块的博客中,我们重点从实践角度介绍了各种API如何使用以及IDEA的基本安装和配置步骤,而从这一篇开始,将会正式整理HDFS ...
- 大数据学习笔记之初识Hadoop
1.Hadoop概述 1.1 Hadoop名字的由来 Hadoop项目作者的孩子给一个棕黄色的大象样子的填充玩具的命名 Hadoop的官网:http://hadoop.apache.org . 1.2 ...
- 大数据学习笔记之Hadoop(一):Hadoop入门
文章目录 大数据概论 一.大数据概念 二.大数据的特点 三.大数据能干啥? 四.大数据发展前景 五.企业数据部的业务流程分析 六.企业数据部的一般组织结构 Hadoop(入门) 一 从Hadoop框架 ...
随机推荐
- [Java] 方法 -- 繼承關係
public class test { void show() { System.out.println("父類別"); } } public class test2 extend ...
- SSM框架的配置
主要是这三个配置文件 web.xml(用来加载和初始化下面的配置文件) applicationcontet.xml(就是Spring的配置文件,一般包括声明式失误等等AOP) Sprimgmvc,xm ...
- Linux中安装python3.6和第三方库
Linux中安装python3.6和第三方库 如果本机安装了python2,尽量不要管他,使用python3运行python脚本就好,因为可能有程序依赖目前的python2环境,比如yum!!!!! ...
- pyqt5在xp下的配置
qt支持库得下载,pip的不行, designer在这个里面 https://sourceforge.net/projects/pyqt/files/PyQt5/PyQt-5.4.1/ python只 ...
- Tag (input) should be an empty-element tag.
因为:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o ...
- SpringBoot配置(2) slf4j&logback
SpringBoot配置(2) slf4j&logback 一.SpringBoot的日志使用 全局常规设置(格式.路径.级别) SpringBoot能自动适配所有的日志,而且底层使用slf4 ...
- Linux文件误删之后恢复方法
前言 今天不小心把一个文件给误删了,因为不想花半天时间重新写,就查找了一下Linux下恢复文件的方法. 因为是刚删不久,文件实际的数据应该还在 首先查看系统分区 Linux:~# df Filesys ...
- Android开发 :androidstudio device offline
使用设备调试的时候,偶尔的就会遇到androidstudio device offline,尽管尝试开启/关闭 USB调试 .都无济于事. 如果PC安装了360手机助手就好办了(我的360手机助手 ...
- spring4.0之二:@Configuration的使用
从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplic ...
- autofac中文文档
https://autofaccn.readthedocs.io/zh/latest/index.html