Hadoop 原理介绍

news2024/11/26 12:44:18

1 文件系统和分布式文件系统

1.1 文件系统

  • 文件系统:一种存储和组织数据的方法
    • 实现了数据的存储、分级组织、访问、获取等操作
    • 使得用户对文件的访问和查找更容易
  • 使用树形目录的抽象概念代替了硬盘等物理设备中数据块的概念
    • ——>用户不必关系数据底层存在硬盘的哪里(物理位置),只需要知道这个文件的所属路径(逻辑位置)即可

1.1.1 传统文件系统

  • 单机文件系统
    • 底层不会横跨多台机器
    • 带有抽象的目录树结构,树都是从根目录开始向下蔓延
      • 树中节点:目录or文件
      • 从根目录开始,各节点路径唯一

1.2 数据 & 元数据

  • 数据:存储内容本身
    • 最终存在磁盘等存储介质上
  • 元数据
    • 解释性数据(记录数据的数据)
      • eg,文件大小、最后修改时间、属性、权限。。。

1.2.1 元数据记录

 1.2.2 分块存储+元数据记录

一个文件存在多个机器上

 1.2.3 副本机制+分块存储+元数据记录

  • 一个文件的一部分的副本存在多台机器上
    • 冗余存储
    • 防止万一一台机器坏了数据无法恢复

2 Hadoop 核心组件

  • HDFS(hadoop distributed file system)
    • 分布式文件存储系统
    • ——>解决海量数据存储     
  •  YARN
    • 集群资源管理和任务调度框架
    • ——>解决资源调度问题(整个集群多个程序同时执行,如何分配集群资源?)
  • MapReduce
    • 分布式计算框架
    • ——>解决海量数据计算

2.1 HDFS

  • 横跨多台计算机的存储系统
  • 使用统一的访问接口,像访问普通文件系统一样使用分布式文件系统

 

 2.1.1 设计目标

  • 硬件故障
    • ——>故障检测+自动快速恢复
  • 流式读取数据
    • ——>批处理数据,并非用户交互式处理
    • ——>相较于数据访问的反应时间(访问文件的延迟会很高),更注重数据访问的高吞吐量

2.1.2 一次写入多次读取(write-one-read-many)

  • 数据一旦创建、写入、关闭后不需要修改
    • HDFS不支持文件的直接编辑修改
    • ——>简化了数据一致性问题,使得高吞吐量的数据访问成为可能

2.1.3 应用场景

 2.1.4 主角色 NameNode

  • 维护和管理文件系统元数据
    • 名称空间目录树结构
    • 文件和块的位置信息
    • 访问权限
    • ——>仅储存元数据,不存储实际数据
  • ——>NameNode 是访问HDFS的唯一入口
  • NameNode 内部通过内存和磁盘文件两种方式管理元数据
    • 内存:
      • 交互和查找快
      • 但是一旦断电,数据就丢失了
    • 磁盘文件定期进行合并持久化,来保证元数据安全
    • 磁盘上的元数据包括:
      • Fsimage内存元数据镜像文件
      • edits log (Journal)编辑日志
  • NameNode不会持久化存储每个文件中各个块所在的DataNode的位置信息
    • 断电了就没有了
    • 重启之后需要从DataNode重建
      • ——>DataNode会将自己注册到NameNode,并汇报自己持有的块列表
  • NameNode所在机器需要配置大量内存
  • NameNode是Hadoop集群中的单点故障
    • ​​​​​​​单点故障:一个软件由多个模块组成,当中一个模块出问题导致了整体出问题

     

 2.1.5 从角色 DataNode

  • 负责具体的数据块存储
  • DataNode的数量决定了HDFS集群的整体数据存储能力
    • 扩容集群——扩容DataNode数量
  • 某个DataNode关闭时,不会影响数据的可用性
    • 默认DataNode是3副本冗余存储
    • NameNode会安排由其他DataNode管理的块进行副本复制
  • DataNode所在机器通常需要配置有大量的硬盘空间(大磁盘),因为实际数据存储在DataNode中

 2.1.6 主角色辅助角色 SecondaryNameNode

  • NameNode的辅助节点,但是不能替代NameNode(不是NameNode的备份)
  • 帮助主角色进行元数据文件的合并操作

2.1.7 HDFS写数据流程

  • 管道Pipeline
    • HDFS上传文件写数据时采用的一种数据传输方式
      • 冗余储存的多个副本,怎么写入?

         

        • ——>客户端将数据块写入第一个数据节点
        • ——>第一个数据节点保存数据之后再将数据块复制到第二个数据节点
        • ——>第二个数据节点保存数据之后再将数据块复制到第三个数据节点
        • (水流一样一次向下传递)
      • 为什么是采用pipeline线性传输,而不是客户端一次给三个DataNode拓扑式传输?
        • 数据以pipeline的方式,顺序地沿着一个方向传输的话,可以充分利用每台机器的带宽,避免网络瓶颈和高延迟连接
          • ——>最小化写入所有数据的延时
  • ACK 应答相应
    • ack ——acknowledge character

       

      • 确认字符
      • 数据通信的时候,接收方给发送方一种传输类字符,表示发送的数据已经确认无误
    • 在HDFS pipeline传输数据的过程中,传输的反方向会进行ACK校验,以保证数据传输准确+安全
      • 两两之间的校验
  • 默认3副本存储策略
    • 由BlockPlacementPolicyDefault决定
      • 第一块副本:优先客户端本地,否则随机
      • 第二块副本:不同于第一块副本的不同机架(rack)
      • 第三块副本:和第二块副本相同机架的不同机器
      •  

 

 2.2 MapReduce

 2.2.1 Map

  • Map
    • 拆分,把复杂的任务分解成若干个简单的子任务来并行处理
      • 多个进程、多个机器
    • 可以进行拆分的前提是这些小任务可以并行计算,且彼此之间几乎没有依赖关系

2.2.2 Reduce

  • Reduce
    • 合并
    • 对map阶段的结果进行全局处理
    •  

 2.2.3 Shuffle

  •  MapReduce的核心
    • 频繁涉及数据在内存、磁盘之间的多次往复
      • map完每个切片写到内存缓冲区、内存缓冲区数据Spill溢出到磁盘
      • reduce:copy数据现在内存,merge到磁盘
  • 这里的shuffle更像是“洗牌”的逆过程:将map端的无规则输出按照指定的规则“打乱”成具有一定规则的数据
    • ——>作用是方便reduce端处理
  • 一般把Map产生输出之后,到Reduce取得数据作为输入之前的过程称为shuffle

        Shuffle中的大部分步骤在Map和Reduce中都提到

2.3 YARN

2.3.0 介绍

  • Yet Another Resource Negotiator,另一种资源协调者
    • 另一种Hadoop资源管理器
      • 资源指的是集群的硬件资源:比如内存、CPU等【磁盘不归YARN管,由HDFS管】
    • 为上层应用提供统一的资源管理和调度
      • 不仅支持MapReduce,理论上支持各种计算程序(比如Spark) 
      • ——>通用、可迁移

2.3.1 组件​​​​​​​

  •  Yarn 3大组件
    • ​​​​​​​集群物理层面的组件(搭建机器必须要有的)
      • ​​​​​​​ResourceManager
        • ​​​​​​​YARN集群的主角色
        • 决定系统中所有应用程序之间资源分配的最终权限、
        • 接受用户(客户端Cient)的作业提交,通过NodeManager分配,管理各个机器上的计算资源
      • NodeManager
        • ​​​​​​​YARN集群的从角色
        • 一台机器一个,负责管理本机器上的计算资源
        • 根据ResourceManager 的命令,启动Container容器,监视容器的资源使用情况;同时向ResourceManager汇报资源使用情况
        • 程序运行完之后:释放容器,回收资源
    • APP层面的组件
      • ​​​​​​​​​​​​​​ApplicationMaster
        • ​​​​​​​用户(客户端)提交的每一个程序都需要包含一个ApplicationMaster
        • 负责程序内部各阶段的资源申请,监督程序的执行情况
          • ​​​​​​​​​​​​​​——>AM进程是任何程序在YARN上运行启动的第一个进程
  • 其他组件
    • ​​​​​​​Client:提交程序,让YARN给分配资源
    • Container容器:一台机器上硬件资源的抽象
      • ​​​​​​​​​​​​​​容器之间逻辑上是互相隔离的
      • 一个程序运行完之后将容器释放掉

2.3.2 流程

 2.3.3 资源调度器Scheduler

  • 根据一定的策略为应用程序分配资源
  • Hadoop提供三种调度器
    • FIFO 先进先出
      • 劣势:优先级无法调整,高优先级的程序需要等待
    • Capacity 容量(默认)
      • 集群划分不同的队列
        • 队列A专门提交大程度,队列B专门提交小程序
          • 如有需要,在队列中继续划分子队列

                     各个程序提交到指定队列上

      • —》多个组织共享整个集群资源,各获得集群的一部分计算能力,互不干扰
      • 缺点:假如当下全都是小程序,那么队列A就会一直空着
    • Fair 公平
        • eg:有两个用户A和B,每个用户都有自己的队列
          • 一开始A用户启动一个作业,由于没有B用户的需求,所以A用户分配了集群所有可用的资源
          • 过一会儿B用户启动了一个作业,此时A用户的作业还在运行
            • ——>经过一段时间的资源分配,A,B各自作业都使用了一半的资源
          • 再过一会儿B用户开始了第二个作业,那么B用户的两个作业共享B用户的资源,A用户继续拥有自己的 一半资源

       

3 Hadoop 集群

  • Hadoop集群主要包括两个集群
    • HDFS集群
      • 分布式存储
      • 包含三个组成部分:主角色(NameNode,NN)、从角色(DataNode,DN)、主角色辅助角色(SecondaryNameNode.SNN)【角色是各自独立的进程】
    • YARN集群
      • 资源管理与调度
      • 包括两个组成成分:主角色(ResourceManager,DM)、从角色(NodeManage,NM)【角色是各自独立的进程】
  • 两个集群都是标准的主从架构

  •  两个集群逻辑上分离、物理上在一起
    • 逻辑上分离:两个集群之间互相没有依赖、进程互不影响
    • 物理上在一起:两个集群的进程都部署在同一台机器上

3.1 HDFS 集群

4 Hadoop 命令

4.1 多种文件系统

  • HDFS shell 命令行支持操作多种文件系统
    • 本地文件系统:
      • hadoop fs -ls file:///
    • 分布式操作系统
      • hadoop fs -ls hdfs://node1:8020/

4.2 主要命令

和linux很像

创建文件夹
hadoop fs -mkdir [-p] (path)

-p:沿着路径创建父路径

查看指定目录下内容
hadoop fs -ls [-h][-R] (path)

-h 人性化显示

-R 递归查看

上传文件
hadoop fs -put [-f] [-p] (localsrc)  (dst)

-f 覆盖目标文件(如果已存在)

-p 保留访问和修改时间

查看文件
hadoop fs -cat (src)

读取指定文件全部内容,显示在标准输出控制台

!!对于大文件内容读取,需要慎重!!

下载文件
hadoop fs -get [-f] [-p] (src) (localdst)

-f 覆盖目标文件(如果已存在)

-p 保留访问和修改时间

拷贝
hadoop fs -cp [-f] (src) (dst)

-f 覆盖目标文件(如果已存在)

追加数据到HDFS
hadoop fs -appendToFile (localsrc) (dst)

这个是linux命令中没有的

将所有给定本地文件的内容追加到给定dst文件(尾部)

如果dst文件不存在,那么创建该文件

如果localsrc为-,那么从标准输入中获取

数据移动
hadoop fs -mv (src) (dst)

参考内容:01-课程内容大纲学习目标_哔哩哔哩_bilibili

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

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

相关文章

Java与分布式架构:微服务和RPC框架的应用和设计思路

章节一:引言 在当今互联网时代,大规模、高并发的应用成为了主流。为了应对这些挑战,软件架构趋向于分布式架构的设计。本文将重点讨论Java语言在分布式架构中的应用,以及微服务和RPC框架在设计中的关键思路和技术案例。 章节二&…

chatgpt赋能python:Python倒序排列的全面指南

Python倒序排列的全面指南 在Python中,几乎所有的数据结构都支持倒序排列。倒序排列是许多编程问题的解决方案,如查找最后一个元素,寻找最大值或最小值等等。在这篇文章中,我们将深入探讨Python中倒序排列的使用方法和技巧&#…

Flutter 笔记 | Flutter 核心原理(五)Box 布局模型和 Sliver 布局模型

根据前文我们已经从宏观上得知:Layout流程的本质是父节点向子节点传递自己的布局约束Constraints,子节点计算自身的大小(Size),父节点再根据大小信息计算偏移(Offset)。在二维空间中&#xff0c…

Android逆向猿人学2022年app比赛第五题双向验证SSLpinning(步步验证)

SSLpinnig 前言一、起步二、抓包三、分析四、验证第一种方法:第二种方法: 借鉴 前言 这题在抓包方面会有点小问题,但是最后结果是正确出来了,如果有了解后面这个问题的读者,请多指教,十分感谢。 一、起步…

C Primer Plus第十五章编程练习答案

学完C语言之后,我就去阅读《C Primer Plus》这本经典的C语言书籍,对每一章的编程练习题都做了相关的解答,仅仅代表着我个人的解答思路,如有错误,请各位大佬帮忙点出! 由于使用的是命令行参数常用于linux系…

串口通信简介

1. 数据通信的基础概念 1.1 数据通信方式 按数据通信方式分类,可分为串行通信和并行通信两种。串行和并行的对比如下图所示: 串行通信的基本特征是数据逐位顺序依次传输,优点是传输线少、 布线成本低 、 灵活度高等优点,一般用…

docker架构速看(2)-镜像

docker架构细看(2)-镜像 ​ 上一章讲了Docker服务端的启动,这一章我们来看Docker中的镜像,需要对容器镜像分层存储,容器存储驱动有一定了解,参考 容器技术原理(一):从根本上认识容器镜像 ​ Docker篇之镜像存储-OverlayFS和联合…

JDBC和数据库连接池-两个工具类-JDBCUtilsByDruid和BasicDAO

JDBC和数据库连接池-两个工具类-JDBCUtilsByDruid和BasicDAO 这是一篇总结文章。 文章目录 JDBC和数据库连接池-两个工具类-JDBCUtilsByDruid和BasicDAO1、学习技术的梳理1.1、jdbc的引入1.2、ResultSet[结果集]1.3API小结 2、数据库连接池3、Apache公司的DBUtils工具-BasicDAO…

在页面上画一个三角形然后点击内部触发事件

在HTML页面上创建一个canvas元素。使用JavaScript绘制三角形并将其填充。您可以使用canvas的API来绘制形状,例如beginPath()和lineTo()等。将一个事件监听器绑定到canvas元素上,以便在单击三角形时触发事件…

Rust每日一练(Leetday0017) 字母异位词分组、幂函数、N皇后

目录 49. 字母异位词分组 Group Anagrams 🌟🌟 50. 幂函数 Pow(x, n) 🌟🌟 51. N 皇后 N-Queens 🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日…

chatgpt赋能python:Python代码输出666——让你快速入门Python编程

Python代码输出666——让你快速入门Python编程 引言 Python是一种面向对象、解释型计算机程序设计语言。Python广泛应用于Web开发、科学计算、数据分析及人工智能等领域,具有优雅、明确、简单的特点,而且学习起来十分容易。如果你是一名初学者&#xf…

chatgpt赋能python:Python修改信息的方法和应用

Python修改信息的方法和应用 Python是一种简单易学、高效、功能强大的编程语言,被广泛应用于各种领域。其中,修改信息是Python最常用的功能之一。无论是在数据分析、网络爬虫还是Web开发中,我们都需要通过Python对数据进行修改、更新和删除等…

Jetson nano之ROS入门 - - 机器人建模与仿真

文章目录 前言一、URDF建模1. URDF语法详解a. robotb. linkc. joint 2. URDF机器人建模实操 二、Xacro宏优化1、 Xacro宏语法详解2、 Xacro建模实操 三、Rviz与Gazebo仿真1、Gazebo集成URDF建模语法基础2、Gazebo集成URDF实操 总结 前言 在ROS中,机器人建模和仿真是…

Spring(四)基于xml的自动装配

自动装配:根据指定的策略,在IOC容器中匹配某一个bean,自动为指定的bean中所依赖的类类型或接口类型属性赋值。 首先我们来熟悉三层架构的创建过程: 三层架构为controller层,service层,dao层。 在service层里面创建ser…

ShareX_一款好用的截图工具安装- Window

择心】向大家介绍and安装ShareX ShareX 免费、开源、轻量多区域截图无缝处理截图屏幕录制、文件共享各种实用工具(如拾色器,屏幕拾色器,尺子,图像编辑器,图像合并,图像分割器,生成图像缩略图&am…

mysql学+练

从开始到放弃! 开始 mysql -uroot -p123456退出命令 exit 或者 quit注释 # show databases; 单行注释 -- show databases; 单行注释 /* 多行注释 show databases; */DDL操作数据库 创建 /* 方式1 直接指定数据库名进行创建 */ CREATE DATABASE db1; /* 方式2 …

TerminalWorks TSPrint/TSScan/TSWebCam Crack

/ 远程桌面打印软件,TerminalWorks TSPrint Server/Client 从远程服务器打印到本地打印机的 简单方法 TSPrint 为您提供了一个简单的远程桌面打印软件,以及使 Windows 终端服务操作更容易的附加工具。有选择地启用或禁用功能,以便您可以完全…

Unity刚体

1、Dynamic:动态类型 受重力和力的影响移动和旋转 Material: 物理材质,在刚体上设置了物理材质,如果子物体有碰撞器但是没有设置材质则会通用刚体的物理材质 如果不设置,将使用在Physics 2D窗口中设置的默认材质(Physi…

python day1 函数

文章目录 前言一、python函数二、定义函数三、函数返回值四、实例五、变量作用域六、参数扩展1、默认值参数2、顺序参数,关键词参数3、可变参数4、可变关键词参数5、解包操作 七、函数类型的参数八、高阶函数九、匿名函数十、递归 前言 看深度学习的代码时&#xff…

SO21434 持续进行的网络安全(五)

目录 一、概要 二、目标 三、网络安全监控 3.1 输入 3.1.1 先决条件 3.1.2 进一步支持信息 3.2 要求和建议 3.3 输出 四、网络安全事件评估 4.1 输入 4.1.1 先决条件 4.1.2 进一步支持信息 4.2 要求和建议 4.3 输出 五、漏洞分析 5.1 输入 5.1.1 先决条件 5.…