Hadoop 原理介绍

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

1.1 文件系统

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

1.1.1 传统文件系统

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

1.2 数据 & 元数据

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

1.2.1 元数据记录

Hadoop 原理介绍_第1张图片

 1.2.2 分块存储+元数据记录

一个文件存在多个机器上

Hadoop 原理介绍_第2张图片

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

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

Hadoop 原理介绍_第3张图片

2 Hadoop 核心组件

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

2.1 HDFS

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

Hadoop 原理介绍_第4张图片

 Hadoop 原理介绍_第5张图片

 2.1.1 设计目标

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

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

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

2.1.3 应用场景

Hadoop 原理介绍_第6张图片

 2.1.4 主角色 NameNode

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

     

Hadoop 原理介绍_第7张图片

 2.1.5 从角色 DataNode

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

 2.1.6 主角色辅助角色 SecondaryNameNode

  • NameNode的辅助节点,但是不能替代NameNode(不是NameNode的备份)
  • 帮助主角色进行元数据文件的合并操作
    • Hadoop 原理介绍_第9张图片

2.1.7 HDFS写数据流程

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

         

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

       

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

Hadoop 原理介绍_第13张图片 

 2.2 MapReduce

Hadoop 原理介绍_第14张图片

 2.2.1 Map

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

2.2.2 Reduce

  • Reduce
    • 合并
    • 对map阶段的结果进行全局处理
    • Hadoop 原理介绍_第16张图片 

 2.2.3 Shuffle

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

Hadoop 原理介绍_第17张图片

        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 流程

Hadoop 原理介绍_第18张图片

 2.3.3 资源调度器Scheduler

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

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

            • Hadoop 原理介绍_第21张图片
      • —》多个组织共享整个集群资源,各获得集群的一部分计算能力,互不干扰
      • 缺点:假如当下全都是小程序,那么队列A就会一直空着
    • Fair 公平
      • Hadoop 原理介绍_第22张图片
        • 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)【角色是各自独立的进程】
  • 两个集群都是标准的主从架构

Hadoop 原理介绍_第23张图片

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

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

你可能感兴趣的:(计算机其他,hadoop,大数据,hdfs)