文章目录

  • 3.1 分布式文件系统
  • 3.2 HDFS简介
  • 3.3 HDFS相关概念
  • 3.4 HDFS体系结构
  • 3.5 HDFS存储原理
  • 3.6 HDFS数据读写过程
  • 3.7 HDFS编程实践

3.1 分布式文件系统

计算机集群结构
• 分布式文件系统把文件分布存储到多个计算机节点上,成千上万的计算机节点构成计算机集群。
• 与之前使用多个处理器和专用高级硬件的并行化处理装置不同的是,目前的分布式文件系统所采用的计算机集群,都是由普通硬件构成的,这就大大降低了硬件上的开销。

分布式文件系统的结构
分布式文件系统在物理结构上是由计算机集群中的多个节点构成的,这些节点分为两类
-主节点(Master Node)/名称结点(NameNode)
-从节点(Slave Node)/数据节点(DataNode)

• 分布式文件系统需满足:
– 透明性
• 对用户来说,无需关心文件被划分成多少块,无需关心文件存在哪里,无需关心集群节点增加或减少造成的影响
– 并发控制
• 一个用户访问文件,不影响其他用户对同一个文件的访问
– 文件复制
• 支持多副本
– 硬件和操作系统异构性
– 可伸缩性
• 节点可随时加入或退出
– 容错
– 安全

3.2 HDFS简介

• 总体而言,HDFS实现了以下目标:
• 兼容廉价的硬件设备
• 流数据读写
• 大数据集
• 简单的文件模型
• 强大的跨平台兼容性
• HDFS特殊的设计,在实现上述优良特性的同时,也使得自身具有一些应用局限性,主要包括以下几个方面:
• 不适合低延迟数据访问
• 无法高效存储大量小文件
• 不支持多用户写入及任意修改文件

3.3 HDFS相关概念


• HDFS默认一个块64MB,一个文件被分成多个块,以块作为存储单位,块的大小远远大于普通文件系统,可以最小化寻址开销。
• HDFS采用抽象的块概念可以带来以下几个明显的好处:
– 支持大规模文件存储,一个文件的大小不会受到单个节点的存储容量的限制,可以远远大于网络中任意节点的存储容量
– 简化系统设计,很容易计算出一个节点可以存储多少文件块;元数据可以单独管理和存储
– 适合数据备份:每个文件块都可以冗余存储到多个节点上,大大提高了系统的容错性和可用性

名称节点和数据节点

• 名称节点(NameNode)负责管理分布式文件系统的命名空间(Namespace),名称节点记录了每个文件中各个块所在的数据节点的位置信息
• 名称节点保存了两个核心的数据结构,即FsImage和EditLog
– FsImage用于维护文件系统树以及文件树中所有的文件和文件夹的元数据
– 操作日志文件EditLog中记录了所有针对文件的创建、删除、重命名等动态操作

• FsImage文件、editLog文件

• FsImage文件包含文件系统中所有目录和文件inode的序列化形式。
– inode是一个文件或目录的元数据的内部表示,并包含此类信息:文件的复制等级、修改和访问时间、访问权限、块大小以及组成文件的块。对于目录,则存储修改时间、权限和配额元数据
– FsImage文件没有记录文件包含哪些块以及每个块存储在哪个数据节点。
– 由名称节点把这些映射信息保留在内存中,当数据节点加入HDFS集群时,数据节点会把自己所包含的块列表告知给名称节点,此后会定期执行这种告知操作,以确保名称节点的块映射是最新的。
• 名称节点启动时:
– 将FsImage文件中的内容加载到内存中
– 执行EditLog文件中的各项操作,使得内存中的元数据和实际的同步,内存中的元数据支持客户端的读操作
– 一旦在内存中成功建立文件系统元数据的映射,则创建一个最新的FsImage文件和一个空的EditLog文件
• 名称节点启动之后:
– HDFS中的更新操作会写到EditLog文件中,而不会修改FsImage文件(太大,GB级别,频繁访问影响系统性能)
– EditLog从空文件开始写,要小很多
• 在名称节点运行期间,HDFS的所有更新操作都是直接写到EditLog中,久而久之, EditLog文件将会变得很大,带来问题:
– 当名称节点需要重启的时候,名称节点需要先将FsImage里面的所有内容映像到内存中,然后再一条一条地执行EditLog中的记录,当EditLog文件非常大的时候,会导致名称节点启动操作非常慢,而在这段时间内HDFS系统处于安全模式,一直无法对外提供写操作,影响了用户的使用
• 解决方案:
– 使用第二名称节点SecondaryNameNode
– 用来保存名称节点中对HDFS 元数据信息的备份,一般单独运行在一台机器上

数据节点(DataNode)
• 数据节点是分布式文件系统HDFS的工作节点,负责数据的存储和读取,会根据客户端或者是名称节点的调度来进行数据的存储和检索,并且向名称节点定期发送自己所存储的块的列表
• 每个数据节点中的数据会被保存在各自节点的本地Linux文件系统中

3.4 HDFS体系结构

HDFS体系结构概述
• HDFS采用了主从(Master/Slave)结构模型,一个HDFS集群包括一个名称节点(NameNode)和若干个数据节点(DataNode)。
– 名称节点作为中心服务器,负责管理文件系统的命名空间(目录及文件创建、属性修改、删除等)、客户端对文件的访问入口(响应客户端提出的目录文件的创建修改删除查询等操作,为客户端提供具体文件的位置)。
– 集群中的数据节点一般是一个节点运行一个数据节点进程,负责处理文件系统客户端的读/写请求,在名称节点的统一调度下进行数据块的创建、删除和复制等操作。每个数据节点的数据实际上是保存在本地Linux文件系统中的。

3.5 HDFS存储原理

1 冗余数据保存
HDFS采用了多副本方式对数据进行冗余存储,通常一个数据块的多个副本会被分布到不同的数据节点上,带来以下优点:
加快数据传输速度
容易检查数据错误
保证数据可靠性

2 数据存取策略
数据的存放策略:
第一个副本:放置在上传文件的那个数据节点(即客户端节点);如果是集群外提交,则随机挑选一台磁盘不太满、CPU不太忙的节点
第二个副本:放置在与第一个副本不同的机架的节点上
第三个副本:与第一个副本相同机架的其他节点上
其他更多副本:随机节点

数据读取的策略:
HDFS提供了一个API可以确定一个数据节点所属的机架ID,客户端也可以调用API获取自己所属的机架ID
当客户端读取数据时,从名称节点获得数据块不同副本的存放位置列表,列表中包含了副本所在的数据节点,可以调用API来确定客户端和这些数据节点所属的机架ID,当发现某个数据块副本对应的机架ID和客户端对应的机架ID相同时,就优先选择该副本读取数据,如果没有发现,就随机选择一个副本读取数据

3 数据错误与恢复
硬件出错看作一种常态,而不是异常,主要包括以下几种情形:名称节点出错、数据节点出错和数据出错。
1 . 名称节点出错:
名称节点保存了所有的元数据信息,其中,最核心的两大数据结构是FsImage和Editlog,如果这两个文件发生损坏,那么整个HDFS实例将失效。
HDFS设置了备份机制,把这些核心文件同步复制到备份服务器SecondaryNameNode上。当名称节点出错时,就可以根据备份服务器SecondaryNameNode中的FsImage和Editlog数据进行恢复。但不能保证百分百的恢复。

2 . 数据节点出错
每个数据节点会定期向名称节点发送“心跳”信息,向名称节点报告自己的状态
当数据节点发生故障,或者网络发生断网时,名称节点就无法收到来自一些数据节点的心跳信息,这时,这些数据节点就会被标记为“宕机”,节点上面的所有数据都会被标记为“不可读”,名称节点不会再给它们发送任何I/O请求。
当由于一些数据节点的不可用,而导致一些数据块的副本数量小于冗余因子,名称节点会定期检查这种情况,一旦发现某个数据块的副本数量小于冗余因子,就会启动数据冗余复制,为它生成新的副本。
HDFS和其它分布式文件系统的最大区别就是可以调整冗余数据的位置

3 . 数据出错
网络传输和磁盘错误等因素,都会造成数据错误。
客户端在读取到数据后,会采用md5和sha1对数据块进行校验,以确定读取到正确的数据。
在文件被创建时,客户端就会对每一个文件块进行信息摘录,并把摘录信息写入到同一个路径的隐藏文件里。
当客户端读取文件的时候,会先读取该信息文件,然后,利用该信息文件对每个读取的数据块进行校验,如果校验出错,客户端就会请求到另外一个数据节点读取该文件块,并且向名称节点报告这个文件块有错误,名称节点会定期检查并且重新复制这个块。

3.6 HDFS数据读写过程

1 读数据的过程

2 写数据的过程

3.7 HDFS编程实践

HDFS常用命令
HDFS有很多shell命令,其中,fs命令可以说是HDFS最常用的命令
利用该命令可以查看HDFS文件系统的目录结构、上传和下载数据、创建文件等。该命令的用法为:
hadoop fs [genericOptions] [commandOptions]
备注:Hadoop中有三种Shell命令方式:
hadoop fs适用于任何不同的文件系统,比如本地文件系统和HDFS文件系统
hadoop dfs只能适用于HDFS文件系统
hdfs dfs跟hadoop dfs的命令作用一样,也只能适用于HDFS文件系统

hadoop fs -ls <path>
显示<path>指定的文件的详细信息
hadoop fs -mkdir <path>
创建<path>指定的文件夹
hadoop fs -cat <path>
将<path>指定的文件的内容输出到标准输出(stdout)
hadoop fs -copyFromLocal <localsrc> <dst>
将本地源文件<localsrc>复制到路径<dst>指定的文件或文件夹中

小结
分布式文件系统是大数据时代解决大规模数据存储问题的有效解决方案,HDFS开源实现了GFS,可以利用由廉价硬件构成的计算机集群实现海量数据的分布式存储
HDFS具有兼容廉价的硬件设备、流数据读写、大数据集、简单的文件模型、强大的跨平台兼容性等特点。但是,也要注意到,HDFS也有自身的局限性,比如不适合低延迟数据访问、无法高效存储大量小文件和不支持多用户写入及任意修改文件等
块是HDFS核心的概念,一个大的文件会被拆分成很多个块。HDFS采用抽象的块概念,具有支持大规模文件存储、简化系统设计、适合数据备份等优点
HDFS采用了主从(Master/Slave)结构模型,一个HDFS集群包括一个名称节点和若干个数据节点。名称节点负责管理分布式文件系统的命名空间;数据节点是分布式文件系统HDFS的工作节点,负责数据的存储和读取
HDFS采用了冗余数据存储,增强了数据可靠性,加快了数据传输速度。HDFS还采用了相应的数据存放、数据读取和数据复制策略,来提升系统整体读写响应性能。HDFS把硬件出错看作一种常态,设计了错误恢复机制
本章最后介绍了HDFS的数据读写过程以及HDFS编程实践方面的相关知识

大数据技术基础笔记3 分布式文件系统HDFS相关推荐

  1. 大数据技术第三章-分布式文件系统HDFS

    前言:马上期末考试了,瑟瑟发抖~ 总结了一些大数据技术原理和应用的知识点,如有错误,请求指正~ 大数据技术原理与应用期末复习前两章知识点 1.HDFS集群采用主从结构,节点主要包括名称节点和数据节点 ...

  2. 大数据技术基础笔记1 大数据概述

    文章目录 1.1 大数据时代 1.2 大数据概念 1.3 大数据的影响 1.4 大数据的应用 1.5 大数据关键技术 1.6 大数据计算模式 1.7 大数据产业 1.8 大数据与云计算.物联网的关系 ...

  3. 大数据学习(3)- 分布式文件系统HDFS

    文章目录 目录 1.分布式文件系统 1.1 计算机集群概念 1.2 分布式文件系统结构 2.HDFS简介 2.1 HDFS设计的目标 2.2HDFS的局限性 2.3 块的概念 2.4 HDFS主要组件 ...

  4. 大数据技术基础实验十三:Kafka实验——订阅推送示例

    大数据技术基础实验十三:Kafka实验--订阅推送示例 文章目录 大数据技术基础实验十三:Kafka实验--订阅推送示例 一.前言 二.实验目的 三.实验要求 四.实验原理 1.Kafka简介 2.K ...

  5. 大数据技术基础实验三:HDFS实验——部署HDFS

    大数据技术基础实验三:HDFS实验--部署HDFS 文章目录 大数据技术基础实验三:HDFS实验--部署HDFS 一.前言 二.实验要求 三.实验原理 1.什么是HDFS? 2.HDFS的体系结构 3 ...

  6. 大数据技术基础综合项目——牛客网招聘岗位统计分析

    大数据技术基础综合项目--牛客网招聘岗位统计分析 文章目录 大数据技术基础综合项目--牛客网招聘岗位统计分析 零.实验环境说明 一.数据集来源及说明 二.数据预处理阶段 2.1 删除空行的数据 2.2 ...

  7. 大数据技术基础_【基础】大数据技术栈介绍

    大数据技术的体系庞大且复杂,基础的技术包含数据的采集.数据预处理.分布式存储.NoSQL数据库.数据仓库.机器学习.并行计算.可视化等各种技术范畴和不同的技术层面. 首先给出一个通用化的大数据处理框架 ...

  8. 大数据技术基础(一)

    每个软件工程师都应该懂大数据技术 软件编程技术出现已经半个多世纪了,核心价值就是把现实世界的业务操作搬到计算机上,通过计算机软件和网络进行业务和数据处理. 我们常见的软件系统,不管是电子商务还是库存管 ...

  9. 大数据技术 学习笔记

    内容来自:大数据技术 视频 课程目标 课程模块 第一讲 大数据概念及计算简介 要求:对本课程教学目标.内容.方式做一个全面概要介绍 内容:了解数据科学的发展背景和要解决的问题,介绍大数据概念和再现代服 ...

最新文章

  1. 一文详解最近异常火热的self-supervised learning
  2. top99 slam
  3. C程序中常见的内存操作错误
  4. 当硬核动作游戏《怪物猎人》变成了回合制RPG,还会那么好玩吗?
  5. web前端小项目个人实例_Web前端:小程序界面与逻辑项目实训
  6. java(20) - 代理模式
  7. c语言中的scanf在java中应该怎么表达,Scanner类。
  8. 通过.pk8及.pem文件生成Android studio使用的keystore文件。
  9. python实现自动打电话软件_python 实现手机自动拨打电话的方法(通话压力测试)
  10. 睿思荐片--最好的电影,最全的排行
  11. Ubuntu18.04安装后检测不到集成声卡问题
  12. Access denied for user ‘bijian0530‘@‘localhost‘ (using password: YES)
  13. JavaScript广告图片跟随滚动
  14. 滴滴出行A/B测试城市运营分析
  15. 《Python基础教程》学习笔记——异常
  16. Comet OJ - Contest #5 迫真小游戏
  17. Java 特殊回文。123321是一个非常特殊的数,它从左边读和从右边读是一样的。输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
  18. python数组中最大元素_Python获取numpy数组中最大的5个元素(保持原顺序)
  19. Dx10和Dx9的一些区别
  20. 局域网固定内网IP地址的方法(亲测有效)

热门文章

  1. CSS常用中文字体、字号
  2. 社畜什么意思,如何理解我是社畜,社畜青年是什么意思一起来看看
  3. 【ESP 保姆级教程】疯狂Node.js服务器篇 ——教室WiFi自动打卡考勤(飞书群信息+NodeJs)
  4. Oem7 NT6系列通用激活工具 V系列(已终结)
  5. 解决MAC系统观看虎牙直播,发热卡顿问题。
  6. SegmentFault 思否联合开源社共同推出中国开源先锋 30 人评选
  7. 负载测试,并发测试,压力测试区别
  8. 小孔径内壁探测镜头初步设计20221127
  9. HDU-3338 Kakuro Extension
  10. 中国移动段晓东深度解读《中国移动算力网络白皮书》