DataWhale 大数据处理技术组队学习task2

news2024/11/17 7:28:03

三、Hadoop分布式文件系统

1. 产生背景

  • 数据量越来越大,一台独立的计算机已经无法存储所有的数据---->将大规模的数据存储到成百上千的计算机中------为了解决数据管理以及维护极其繁琐与低效------>分布式文件系统

  • 分布式文件系统是管理网络中跨多台计算机存储的文件系统

  • GFS:谷歌公司开发了第一个大规模商业化应用的分布式文件系统

2. 概述

2.1 分布式文件系统简介

  • 普通文件系统:一般会把磁盘空间划分为每512字节一组,称为“磁盘块”,它是文件系统读写操作的最小单位,文件系统的块(Block)通常是磁盘块的整数倍,即每次读写的数据量必须是磁盘块大小的整数倍(以块为单位进行读写

  • 分布式文件系统:也采用了块的概念,文件被分成若干个块进行存储,块是数据读写的基本单元,只不过分布式文件系统的块要比普通文件系统中的块大很多,比如,HDFS默认的一个块的大小是64MB,而且与普通文件系统不同的是,在分布式文件系统中,如果一个文件小于一个数据块的大小,它不会占用整个数据块的储存空间。(依然是块为基本单元,但块更大,同时,不满一个块的文件也不会占用整块存储空间,其他文件依然可以进行填充

    • 块比较大的目的:最小化寻址开销(HDFS寻址开销包括:磁盘的寻道开销和数据块的定位开销)

    • 也不能太大:会影响并行的速度

    • 设计:客户机/服务器(Client/Server)(客户端以特定的通信协议通过网络与服务器建立连接,提出文件访问请求,客户端和服务器可以通过设置访问权,来限制请求方对底层数据存储块的访问)

    • 物理结构:由计算机集群中的多个节点构成的(节点分为两类)

      • 主节点(Master Node)/名称节点(Name Node):负责文件和目录的创建、删除和重命名等,同时管理着数据节点和文件块的映射关系
      • 从节点(Worker Node)/ 数据节点(DataNode):负责数据的存储和读取。
    • 存储方式:多副本存储(文件被复制多次被放在不同的位置,从而能够保障数据的完整性)

2.2 HDFS简介

  • **HDFS(Hadoop Distribute File System)**是大数据领域一种非常可靠的存储系统,它以分布式方式存储超大数据量文件,但它并不适合存储大量的小数据量文件。
  • HDFS要实现的目标:
    • **兼容廉价的硬件设备:**实现在硬件故障的情况下也能保障数据的完整性
    • **流数据读写:**不支持随机读写的操作
    • **大数据集:**数据量一般在GB、TB以上的级别
    • **简单的文件模型:**一次写入、多次读取
    • **强大的跨平台兼容性:**采用Java语言实现
  • HDFS的局限性:
    • 不适合低延迟数据访问:HDFS主要是面向大规模数据批量处理而设计的,采用流式数据读取,具有很高的数据吞吐率,但是,这也意味着较高的延迟,因此,HDFS不适合用在需要较低延迟(如数十毫秒)的应用场合。
    • **无法高效存储大量小文件:**小文件是指文件大小小于一个块的文件,HDFS无法高效存储和处理大量的小文件,过多小文件会给系统扩展性和性能带来诸多问题:
      • HDFS采用名称节点(NameNode)来管理文件系统的元数据,这些元数据被保存在内存中,使客户端可以快速获取文件实际存储位置。
      • 用MapReduce处理大量小文件时,会产生过多的Map任务,线程管理开销会大大增加,因此处理大量小文件的速度远远低于处理同等大小的大文件的速度;
      • 访问大量小文件的速度远远低于访问大文件的速度,因为访问大量小文件,需要不断从一个数据节点跳到另一个数据节点,严重影响性能。
    • 不支持多用户写入及任意修改文件:HDFS只允许一个文件有一个写入者,不允许多个用户对同一个文件执行写操作,而且只允许对文件执行追加操作,不能执行随机写操作。

3. HDFS的体系结构

  • 结构模型:主从(Master/Slave)结构模型,一个HDFS集群包括一个名称节点和若干数据节点
  • 名称节点作为中心服务器,负责管理文件系统的命名空间及客户端对文件的访问
  • 数据节点负责处理文件系统客户端的读/写请求,在名称节点的统一调度下进行数据块的创建、删除和复制等操作
  • 每个数据节点会周期性地向名称节点发送**“心跳"信息**,报告自己的状态,没有按时发送心跳信息的数据节点会被标记为“宕机”,不会再给它分配任何I/O请求。(用来判断数据节点是否正常工作的方式)

img

  • 文件存储:一个文件被分为若干数据块----->若干数据块存储到若干数据节点上
  • 访问:客户端-----文件名----->名称节点------根据文件名找到------>数据块 ------数据块存储信息------->数据节点的位置------节点位置信息------>客户端 —直接访问对应位置–>获得数据

4. HDFS的存储原理

4.1 数据的冗余存储

  • 目的:保证系统的容错性可用性
  • 冗余存储的方式:多副本方式(即一个数据块的多个副本会被分布到不同的数据节点上)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FEVeGbzh-1676720254593)(null)]

  • 优点:
    • 加快数据传输速度:当多个客户端需要同时访问同一个文件时,可以让各个客户端分别从不同的数据块副本中读取数据,这就大大加快了数据传输速度,实现了并行操作。
    • 容易检查数据错误:HDFS的数据节点之间通过网络传输数据,采用多个副本可以很容易判断数据传输是否出错。
    • 保证数据的可靠性:即使某个数据节点出现故障失效,也不会造成数据丢失。

4.2 数据存取策略

4.2.1 数据存放

  • 采用了以机架(Rack)为基础的数据存放策略。一个HDFS集群通常包含多个机架,不同机架之间的数据通信需要经过交换机或路由器,同一机架的不同机器之间数据通信不需要交换机或路由器,因此同一机架中不同机器之间的通信要比不同机架之间机器的通信带宽大。

  • HDFS默认每个数据节点都是在不同机架上的

    • 缺点:
      • 写入数据的时候不能充分利用同一机架内部机器之间的带宽
    • 优点
      • 可以获得很高的数据可靠性,即使一个机架发生故障,位于其他机架上的数据副本仍然可用
      • 在读数据的时候,可以在多个机架上并行读取数据,大大提高了数据读取速度
      • 可以更容易实现系统内部负载均衡和错误纠正
  • HDFS默认的冗余复制因子是 3,每一个文件会被同时保存到 3 个地方,其中两份副本放在同一个机架的不同机器上面,第三个副本放在不同机架的机器上面。

  • HDFS副本的存放策略是:

    • 如果是在集群内发起写操作请求,则把第1个副本放置在发起写操作请求的数据节点上,实现就近写入数据。如果是来自集群外部的写操作,则从集群内部挑选一台磁盘空间较为充足、CPU不太忙的数据节点,作为第1个副本的存放地。
    • 第2个副本会被放置在与第1个副本不同的机架的数据节点上。
    • 第3个副本会被放置在与第1个副本相同的机架的其他节点上。
    • 如果还有更多的副本,则继续从集群中随机选择数据节点进行存放

4.2.2 数据读取

  • HDFS提供了一个API,用于确定一个数据节点所属的机架的ID,客户端可以调用该API获取自己所属机架的ID。

4.2.3 数据复制

  • 流水线复制:当客户端要向HDFS中写入一个文件时,这个文件会首先被写入本地,并被切分成若干个块,每个块的大小是由HDFS的设定值来决定。每个块都向HDFS集群中的名称节点发起写请求,名称节点会根据系统中各个数据节点的使用情况,选择一个数据节点列表返回给客户端,然后客户端就把数据首先写入列表中的第1个数据节点,同时把列表传给第1个数据节点,当第1个数据节点接收到一个块的数据的时候,将其写入本地,并且向列表中的第2个数据节点发起连接请求,把自己已经接收到的数据和列表传给第2个数据节点,当第2个数据节点接收到数据的时候,将其写入本地,并且向列表中的第3个数据节点发起连接请求,依次类推,列表中的多个数据节点形成一条数据复制的流水线。最后,当文件写完的时候,数据复制也同时完成。

4.3 数据错误与恢复

4.3.1 名称节点出错

  • 保证名称节点安全的方式:
    • 把名称节点上的元数据信息同步存储到其他文件系统中
    • 运行一个第二名称节点,当名称节点宕机以后,利用第二名称节点中的元数据信息进行系统恢复(仍然会丢失部分数据)
  • 一般是两者结合使用,当名称节点宕机时,首先到远程挂载的网络文件系统中获取备份的元数据信息,放到第二名称节点上进行恢复,并把第二名称节点作为名称节点来使用。

4.3.2 数据节点出错

  • 每个数据节点会定期向名称节点发送“心跳”信息,向名称节点报告自己的状态。当数据节点发生故障,或者网络发生断网时,名称节点就无法收到来自这些节点的“心跳”信息,这时,这些节点就会被标记为“宕机”,节点上面的数据都会被标记为“不可读”,名称节点不会再给它们发送任何I/O请求(与HDFS的体系结构下的内容一致

4.3.3 数据出错

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

5. HDFS的数据读取过程

  • 参考此链接

6. 编程实战(之后会统一完成)

参考自DataWhale学习资料

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/354659.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SSM框架的狼途汽车门店管理系统的设计与实现

基于SSM框架的狼途汽车门店管理系统的设计与实现 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、…

AutoCAD学习之基本操作学习笔记

AutoCAD学习 基本操作(23.2.15~23.2.17) CtrlN 新建一个CAD文档F7 删除格栅F3 对象捕捉(很重要啊,如果一直开着,操作起来很费劲。),需要关掉,注意使用snipaste,会不停地…

QT 文件监视系统QFileSystemWatcher监视目录的改变directoryChanged和监视文件的改变fileChanged

QT 文件监视系统QFileSystemWatcher监视目录的改变相关操作说明mainwindow.hmainwindow.cpp调试结果相关操作说明 添加头文件 Header: #include qmake: QT core bool QFileSystemWatcher::addPath(const QString &path)如果路径存在,则会向文件系统监视器添…

Prometheus Docker安装及监控自身

前提环境: Docker环境 涉及参考文档: 安装Prometheus开始 Prometheusnode_exporter Agent组件 一、部署Prometheus 1、启动容器将文件拷贝出来 docker run -d prom/prometheus2、容器将文件拷贝出来 docker cp 容器ID:/usr/share/prometheus/conso…

深度学习笔记:误差反向传播(1)

1 计算图 计算图使用图(由节点和边构成的图)来表达算式。 如图,我们用节点代表运算符号,用边代表传入的参数,即可算出购买苹果和橘子的总价格。 2 计算图的局部计算 局部计算意味着每个节点只处理和其相关的运算&…

网页设计html期末大作业

网页设计html期末大作业网页设计期末大作业-自制网站大一期末作业,外卖网站设计网页设计期末大作业-精美商城-首页框架网页设计期末大作业-自制网站 有导航栏,轮播图,按钮均可点进去,如下图所示 点我下载资源》》》》 大一期末…

linux ubuntu查日志信息以及错误排查

目录 一、linux的日志文件 1、常用日志文件 2、其他日志文件 二、历史日志的查看 1、查看Logrotate的配置信息 2、查看日志配置 一、linux的日志文件 Linux系统中最有趣的(可能也是最重要的)目录之一是/var/log。根据文件系统层次结构标准,在系统中运行的大多数…

java面试题-泛型异常反射

泛型1.什么是泛型?Java是一种强类型语言,数据类型在编译时必须确定。如果我们想要在代码中使用不同类型的数据,那么就需要为每种类型分别写出相应的代码。这样会导致代码冗长、重复,也不便于维护。为了解决这个问题,Ja…

嵌入式Linux入门级板卡的神经网络框架ncnn移植与测试-米尔i.MX6UL开发板

本篇测评由电子发烧友的优秀测评者“ALSET”提供。 米尔 MYD-Y6ULX-V2 开发板,基于 NXP i.MX6UL/i.MX6UL L处理器,该开发板被米尔称之为经典王牌产品。本次测试目标是在此开发板上进行神经网络框架ncnn的移植与测试开发,测试ncnn在此开发板上…

高可用的“异地多活”架构设计

前言 后台服务可以划分为两类,有状态和无状态。高可用对于无状态的应用来说是比较简单的,无状态的应用,只需要通过 F5 或者任何代理的方式就可以很好的解决。后文描述的主要是针对有状态的服务进行分析。 服务端进行状态维护主要是通过磁盘…

Orin 安装CUDA CUDNN TensorRT Opencv和输入法的环境配置

有两种方法可以安装CUDA环境 第一种方法-用命令按照 在刷机完成的Orin,执行如下命令: sudo apt update sudo apt upgrade sudo apt install nvidia-jetpack -y注释–如果在执行第三行命令,报错的话,先查看nvidia-l4t-apt-so…

初识K8s

概览 k8s 概念和架构从零搭建K8s 集群k8s 核心概念搭建集群监控平台搭建高可用k8s集群集群环境 实际部署项目 k8s 概念和架构 1、K8S概述和特性 概述: k8s是谷歌在2014年开源的容器化集群管理系统使用k8s进行容器化应用部署使用k8s利于应用扩展k8s目标实施让部…

AcWing3416.时间显示——学习笔记

目录 题目 代码 AC结果 思路 关键步骤 题目 3416. 时间显示 - AcWing题库https://www.acwing.com/problem/content/description/3419/ 代码 import java.util.Scanner;public class Main {public static void main(String[] args){Scanner input new Scanner(System.in…

Rust学习入门--【15】Rust 所有权

系列文章目录 Rust 语言是一种高效、可靠的通用高级语言,效率可以媲美 C / C 。本系列文件记录博主自学Rust的过程。欢迎大家一同学习。 Rust学习入门–【1】引言 Rust学习入门–【2】Rust 开发环境配置 Rust学习入门–【3】Cargo介绍 Rust学习入门–【4】Rust 输…

Maven的安装和配置

Maven的安装 1.1Maven是什么? 是阿帕奇的,就是代替原先手动导入jar包的方式 1.官方介绍 视频:百度百科-验证Maven是一款服务于Java平台的自动化构建工具。Maven 作为 Java 项目管理工具,它不仅可以用作包管理,还有许多…

DIDL4_前向传播与反向传播(模型参数的更新)

前向传播与反向传播前向传播与反向传播的作用前向传播及公式前向传播范例反向传播及公式反向传播范例小结前向传播计算图前向传播与反向传播的作用 在训练神经网络时,前向传播和反向传播相互依赖。 对于前向传播,我们沿着依赖的方向遍历计算图并计算其路…

# AutoSar一文概览

1.什么是AutoSar ​ AUTOSAR全称为“AUTomotive Open System ARchitecture”,译为“汽车开放系统体系结构”;AUTOSAR是由 全球各大汽车整车厂、汽车零部件供应商、汽车电子软件系统公司联合建立的一套标准协议、软件架构。 2.为什么汽车行业要定义一个…

DIDL5_数值稳定性和模型初始化

数值稳定性和模型初始化数值稳定性梯度不稳定的影响推导什么是梯度消失?什么是梯度爆炸?如何解决数值不稳定问题?——参数初始化参数初始化的几种方法默认初始化Xavier初始化小结当神经网络变得很深的时候,数值特别容易不稳定。我…

面试题67. 把字符串转换成整数

题目 写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。 当我们寻找到的第一个非空字符为正或者负号时&#xf…

密度峰值聚类算法(DPC)

密度峰值聚类算法目录DPC算法1.1 DPC算法的两个假设1.2 DPC算法的两个重要概念1.3 DPC算法的执行步骤1.4 DPC算法的优缺点matlab代码密度计算函数计算delta寻找聚类中心点聚类算法目录 DPC算法 1.1 DPC算法的两个假设 1)类簇中心被类簇中其他密度较低的数据点包围…