当前位置: 首页 > news >正文

【Hadoop】Hadoop概述与核心组件

目录

  • Hadoop概述
  • Hadoop 发展历史
  • Hadoop 三大发行版本
    • 1.Apache Hadoop(常用)
    • 2.Cloudera Hadoop
    • 3.Hortonworks Hadoop
    • 优势
      • 优势总结——4高(高可靠、高扩展、高效、高容错)
  • Hadoop组成
    • 1.==HDFS==
      • 管理者:NameNode(nn)
      • 工作者:DataNode(dn)
      • 辅助管理者:SecondaryNameNode(2nn)
      • HDFS的优缺点
        • 优点:
        • 缺点
      • HDFS的写数据流程
      • HDFS的读数据流程
    • 2.==YARN==
      • YARN工作机制
      • YARN作业提交过程
        • 1.作业提交
        • 2.作业初始化
        • 3.任务分配
        • 4.任务运行
        • 5.进度和状态更新
        • 6.作业完成
      • YARN调度器和调度算法
        • 1. FIFO调度器(First In First Out)
        • 2.容量调度器(Capacity Scheduler)
          • 特点
          • 资源分配算法
        • 3.公平调度器
          • 特点
          • 公平调度器队列资源分配方式:
    • 3.==MapReduce==
      • MapReduce核心思想
      • Mapper:
      • Reduce:
      • MapReduce优缺点
        • 优点:
        • 缺点:
      • MapReduce进程
      • MapReduce框架原理
        • 1.MapTask并行度决定机制
        • 2.FileInputFormat切片解析
        • 3.TextInputFormat实现类
          • TextInputFormat
          • KeyValueTextInputFormat
          • NLineInputFormat
          • CombineTextInputFormat
        • 4.CombineTextInputFormat切片机制
      • MapReduce工作流程
        • 1. mapTask阶段
        • 2.shuffle阶段
        • 3.reduce阶段
    • HDFS、YARN、MapReduce 三者关系
  • Hadoop生态体系
  • Hadoop的工作方式
  • Hadoop的守护进程

Hadoop概述

Hadoop 是使用 Java 编写,允许分布在集群,使用简单的编程模型的计算机大型数据集处理的Apache 的开源框架。

  • 主要解决,海量数据的存储和海量数据的分析计算问题。
  • 广义上来说,Hadoop通常是指一个更广泛的概念——Hadoop生态圈。

Hadoop 发展历史

  1. Hadoop创始人Doug Cutting,为 了实 现与Google类似的全文搜索功能,他在Lucene框架基础上进行优化升级,查询引擎和索引引擎。

  2. 2001年年底Lucene成为Apache基金会的一个子项目。

  3. 对于海量数据的场景,Lucene框架面对与Google同样的困难,存储海量数据困难,检索海量速度慢。

  4. 学习和模仿Google解决这些问题的办法 :微型版Nutch。

  5. 可以说Google是Hadoop的思想之源(Google在大数据方面的三篇论文)
    GFS —>HDFS
    Map-Reduce —>MR
    BigTable —>HBas

  6. 2003-2004年,Google公开了部分GFS和MapReduce思想的细节,以此为基础Doug Cutting等人用了2年业余时间实现了DFS和MapReduce机制,使Nutch性能飙升。

  7. 2005 年Hadoop 作为 Lucene的子项目 Nutch的一部分正式引入Apache基金会。

  8. 2006 年 3 月份,Map-Reduce和Nutch Distributed File System (NDFS)分别被纳入到 Hadoop 项目中,Hadoop就此正式诞生,标志着大数据时代来临。

  9. 名字来源于Doug Cutting儿子的玩具大象
    在这里插入图片描述

Hadoop 三大发行版本

Apache、Cloudera、Hortonworks。

  • Apache 版本最原始(最基础)的版本,对于入门学习最好。【2006】
  • Cloudera 内部集成了很多大数据框架,对应产品 CDH。【2008】
  • Hortonworks 文档较好,对应产品 HDP。【2011】现在已经被 Cloudera 公司收购,推出新的品牌 CDP。官网地址:https://www.cloudera.com/products/pricing.html
    在这里插入图片描述

1.Apache Hadoop(常用)

官网地址:http://hadoop.apache.org
下载地址:https://hadoop.apache.org/releases.html

2.Cloudera Hadoop

官网地址:https://www.cloudera.com/downloads/cdh
下载地址:https://docs.cloudera.com/documentation/enterprise/6/releasenotes/topics/rg_cdh_6_download.html

  • 2008 年成立的 Cloudera 是最早将 Hadoop 商用的公司,为合作伙伴提供 Hadoop 的
    商用解决方案,主要是包括支持、咨询服务、培训。
  • 2009 年 Hadoop 的创始人 Doug Cutting 也加盟 Cloudera 公司。Cloudera 产品主
    要为 CDH,Cloudera Manager,Cloudera Support
  • CDH 是 Cloudera 的 Hadoop 发行版,完全开源,比 Apache Hadoop 在兼容性,安
    全性,稳定性上有所增强。Cloudera 的标价为每年每个节点 10000 美元。
  • Cloudera Manager 是集群的软件分发及管理监控平台,可以在几个小时内部署好一
    个 Hadoop 集群,并对集群的节点及服务进行实时监控。

3.Hortonworks Hadoop

官网地址:https://hortonworks.com/products/data-center/hdp/
下载地址:https://hortonworks.com/downloads/#data-platform

  • 2011 年成立的 Hortonworks 是雅虎与硅谷风投公司 Benchmark Capital 合资组建。
  • 公司成立之初就吸纳了大约 25 名至 30 名专门研究 Hadoop 的雅虎工程师,上述
    工程师均在 2005 年开始协助雅虎开发 Hadoop,贡献了 Hadoop80%的代码。
  • Hortonworks 的主打产品是 Hortonworks Data Platform(HDP),也同样是 100%开
    源的产品,HDP 除常见的项目外还包括了 Ambari,一款开源的安装和管理系统。
  • 2018 年 Hortonworks 目前已经被 Cloudera 公司收购

优势

  • Hadoop 是专为从单一服务器到上千台机器扩展,每个机器都可以提供本地计算和存储。
  • Hadoop可以用单节点模式安装,但是只有多节点集群才能发挥 Hadoop 的优势,我们可以把集群扩展到上千个节点,而且扩展过程中不需要先停掉集群。

优势总结——4高(高可靠、高扩展、高效、高容错)

  1. 高可靠性:Hadoop底层维护多个数据副本,所以即使Hadoop某个计算元素或存储出现故障,也不会导致数据的丢失。
    在这里插入图片描述

  2. 高扩展性:在集群间分配任务数据,可方便的扩展数以千计的节点。
    在这里插入图片描述

  3. 高效性:在MapReduce的思想下,Hadoop是并行工作的,以加快任务处理速度。
    在这里插入图片描述

  4. 高容错性:能够自动将失败的任务重新分配。
    在这里插入图片描述

Hadoop组成

在这里插入图片描述

1.HDFS

HDFS :即 Hadoop 分布式文件系统(Hadoop Distribute File System),以分布式存储的方式存储数据。负责海量数据的存储

HDFS 也是一种 Master-slave 架构,NameNode 是运行 master 节点的进程,它负责命名空间管理和文件访问控制。DataNode 是运行在 slave 节点的进程,它负责存储实际的业务数据,如下图:
在这里插入图片描述

管理者:NameNode(nn)

存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限),以及每个文件的块列表和块所在的DataNode等。

作用:负责管理,管理集群内各个节点。

  • 维护管理文件系统的元数据(指的是数据的存放位置或存放路径)或名字空间
  • 负责确定指定的文件块到具体的Datanode结点的映射关系。
  • 维护管理 DataNode上报的心跳信息
  • 管理真实的数据的元数据(也就是文件、日志、视频、图片、等)
    在这里插入图片描述

工作者:DataNode(dn)

在本地文件系统存储文件块数据,以及块数据的校验和。
作用:主要进行负责真实数据的块存储,负责工作,进行读写数据。 周期向NameNode汇报。
在这里插入图片描述

  1. 执行数据的读写(响应的是客户端)
  2. 周期性向NameNode做汇报(数据块的信息、校验和)
    若datanode 10分钟没有向NameNode做汇报,表示已丢失(已宕机)
    心跳周期 3秒
  3. 执行流水线的复制(将一份大数据切成若干份,一份一份的复制到三个节点,复制完一份下一份才开始复制)

在这里插入图片描述

辅助管理者:SecondaryNameNode(2nn)

每隔一段时间对NameNode元数据备份。
作用:责辅助NameNode管理工作。主要是对NameNode进行数据的备份,一般要恢复数据时候才会用到这个的。

HDFS的优缺点

优点:
  1. 高容错性
     数据采用多副本保存方式,当集群中的某些机器宕机了,数据可以从其他正常运行的机器获取
  2. 适合处理大数据
      通过将大文件切分成小的数据块存储到不同服务器上,可以实现一个大文件的存储,同时通过联合多个服务器多块硬盘实现整个存储系统的大容量,大文件的分片存储,不同分片可以进行并行读写操作,进而实现数据的高速访问。
      NameNode负责文件元数据的操作,DataNode负责处理文件的读写请求,文件数据流不会经过NameNode的处理,只会跟存储在具体DataNode进行联系,因此NameNode不会成为系统的瓶颈,成百上千台DataNode节点应对文件内容数据流的读写,其吞吐量大大提高了。
  3. 可靠性
缺点
  1. 不适合做实时数据访问
  2. 无法对大量小文件进行存储。存储大量小文件会占用NameNode大量的内存去存储元数据信息。小文件存储的寻址时间会超过读取时间
最佳传输损耗理论:在一次传输中,寻址时间占用总传输时间的1%时,本次传输的损耗最小,为最佳性价比传输!
目前硬件的发展条件,普通磁盘写的速率大概为100M/S, 寻址时间一般为10ms!
(10ms / 1%) * 100M/S = 100M
  1. 不支持并发写入,文件随机修改。一个文件不允许多个线程同时写,仅支持追加,不支持修改

HDFS的写数据流程

  1. 客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在,并返回结果
  2. 客户端请求 Block上传到哪几个DataNode上,NameNode返回DataNode节点
  3. 客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成。dn1、dn2、dn3逐级应答客户端。
  4. 客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,dn1收到一个Packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答。
  5. 当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器。

HDFS的读数据流程

  1. 客户端通过DistributedFileSystem向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址。
  2. 就近原则挑选一台DataNode(然后随机)服务器,请求读取数据。
  3. DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)。
  4. 客户端以Packet为单位接收,先在本地缓存,然后写入目标文件。

2.YARN

Yet Another Resource Negotiator 简称 YARN :是一个资源管理系统,其作用就是把资源管理和任务调度/监控功分割成不同的进程,Yarn 有一个全局的资源管理器叫 ResourceManager,每个 application 都有一个 ApplicationMaster 进程。一个 application 可能是一个单独的 job 或者是 job 的 DAG (有向无环图)。

在 Yarn 内部有两个守护进程:

  1. ResourceManager :负责给 application 分配资源
  2. NodeManager :负责监控容器使用资源情况,并把资源使用情况报告给 ResourceManager。这里所说的资源一般是指CPU、内存、磁盘、网络等。

ApplicationMaster 负责从 ResourceManager 申请资源,并与 NodeManager 一起对任务做持续监控工作。在这里插入图片描述

  • ResourceManager(RM):整个集群资源(内存、CPU等)的老大
    • 处理客户端请求。
    • 监控 NodeManager。
    • 启动或监控 ApplicationMaster。
    • 资源的分配与调度。
  • ApplicationMaster(AM):单个任务运行的老大
    • 负责数据的切分。
    • 为应用程序申请资源并分配给内部的任务。
    • 任务的监控与容错。
  • NodeManager(N M):单个节点服务器资源老大
    • 管理单个节点上的资源。
    • 处理来自 ResourceManager 的命令。
    • 处理来自 ApplicationMaster 的命令。
    • 资源的分配与调度。
  • Container:容器,相当一台独立的服务器,里面封装了任务运行所需要的资源,如内存、CPU、磁盘、网络等。
    • Container 是 Yarn 中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等。

YARN工作机制

  1. MR程序提交到客户端所在的节点。
  2. YarnRunner向ResourceManager申请一个Application。
  3. RM将该应用程序的资源路径返回给YarnRunner。
  4. 将运行所需资源提交到HDFS上。资源提交完毕后,申请运行mrAppMaster。
  5. RM将用户的请求初始化成一个Task。
  6. 其中一个NodeManager领取到Task任务,并创建容器Container,产生MRAppmaster。
  7. Container从HDFS上拷贝资源到本地。MRAppmaster向RM 申请运行MapTask资源。
  8. RM将运行MapTask任务分配给另外两个NodeManager,并创建容器。
  9. MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动MapTask,MapTask对数据分区排序。
  10. MrAppMaster等待所有MapTask运行完毕后,向RM申请容器,运行ReduceTask。
  11. ReduceTask向MapTask获取相应分区的数据。
  12. 程序运行完毕后,MR会向RM申请注销。

YARN作业提交过程

1.作业提交

客户端向yarn提交一个作业

  • 第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。
  • 第2步:并申请一个作业id。
  • 第3步:RM给Client返回该job资源的提交路径和作业id。
  • 第4步:Client提交jar包、切片信息和XML文件到指定的资源提交路径。
  • 第5步:提交完资源后,向RM申请运行MrAppMaster。
2.作业初始化
  • 第6步:当RM收到Client的请求后,将该job添加到调度器中。
  • 第7步:空闲的NM领取到该Job,并创建Container,并产生MRAppmaster,并下载Client提交的资源到本地。
3.任务分配
  • 第10步:MrAppMaster向RM申请运行多个MapTask任务资源。
  • 第11步:RM将运行MapTask任务分配给另外两个NodeManager,另两个NodeManager分别领取任务并创建容器。
4.任务运行
  • 第12步:MR向两个接收到任务的NodeManager发送程序启动脚本。
  • 第13步:MrAppMaster等所有MapTask运行完毕后,向RM申请容器,运行ReduceTask。
  • 第14步:ReduceTask向MapTask获取相应分区的数据。
  • 第15步:程序运行完毕后,MR会向RM申请注销自己。
5.进度和状态更新
  • YARN中的任务将其进度和状态(包括counter)返回给应用管理器, 客户端每秒向应用管理器请求进度更新, 展示给用户。
6.作业完成
  • 除了向应用管理器请求作业进度外, 客户端每5秒都会通过调用waitForCompletion()来检查作业是否完成。作业完成之后, 应用管理器和Container会清理工作状态。作业的信息会被作业历史服务器存储以备之后用户核查。
    在这里插入图片描述

YARN调度器和调度算法

Hadoop作业调度器主要有三种:FIFO、容量(Capacity Scheduler)和公平(Fair Scheduler)。
Apache Hadoop3.1.3默认的资源调度器是容量调度器,
CDH框架默认调度器是公平调度器。

1. FIFO调度器(First In First Out)
  • 特点:FIFO调度器按照任务到达的时间排序,先到先服务, 在当前强调多租户和资源利用率的大环境下,FIFO的使用率并不高。
  • 优点:简单,不需要配置。
  • 缺点:不适合共享集群。如果有大的app需要很多资源,那么其他app可能会一直等待。

在这里插入图片描述

2.容量调度器(Capacity Scheduler)
  • 是Yahoo开发的多用户调度器。
  • 调度策略:优先学则资源利用率低的队列。
  • 每个队列可以单独设置资源分配方式:FIFO、DRF
特点
  • 多队列:每个队列可以配置一定的资源量,每个队列采用FIFO调度策略
  • 容量保证:管理员可以为每个队列设置资源,保证最低资源和资源使用上限
  • 灵活性:如果一个队列中的资源有剩余,可以把这些资源共享给需要资源的队列,如果该队列有新的应用程序提交,则会收回对应资源
  • 多用户:支持多用户共享集群和多应用程序同时运行。为了防止一个用户的作业独占资源,该调度器会对同一个用户提交的作业所占的资源量进行限定。

在这里插入图片描述

资源分配算法

队列资源分配: 从root开始使用深度优先算法,优先选择资源占用率最低的队列分配资源。
作业资源分配: 默认按照提交作业的优先级和提交时间的顺序分配资源。
容量资源分配: 按照容器的优先级分配资源,如果优先级相同则按照数据本地性原则

  • 任务和数据在同一节点
  • 任务和数据在同一机架
  • 任务和数据不在同一节点也不在同一机架
3.公平调度器
  • 公平调度器由FaceBook开发,其设计目的是在事件尺度上,所有作业获得公平的资源。
  • 核心调度策略:优先选择对资源缺额比较大的。
特点
  • 每个队列可以单独设置资源分配方式:FIFO、FAIR、DRF
  • 与Capacity Scheduler调度器具有相同的1~4点。
  • 缺额:某一时刻一个作业应获资源和实际资源的差距叫“缺额”。
    在这里插入图片描述在这里插入图片描述
公平调度器队列资源分配方式:
  1. FIFO策略
  • 采用此种方法则与容量调度器一致。公平调度器每个队列资源分配策略如果选择FIFO,则公平调度器相当于容量调度器。
  1. Fair策略
  • Fair策略是一种基于最大最小公平算法实现的资源多路复用方式,默认情况下,每个队列内部采用该方式分配资源。
  • FAIR策略默认情况下是一种基于最大最小公平算法实现的资源多路复用方式,默认情况下每个队列内部采用该方法来分配资源。这意味着,如果一个队列中有两个应用程序同时运行,则每个应用程序可以得到1/2的资源。具体资源分配流程和容器调度器一致:【选择队列——选择作业——选择容器】
  • 上述三个步骤都是按照公平策略分配资源:
    • 实际最小资源份额:mindshare = Min(资源需求量,配置的最小配额)
    • 是否饥饿:isNeedy = 资源使用量 < mindshare(实际最小资源份额)
    • 资源分配比:mindShareRatio = 资源使用量 / Max(mindshare, 1)
    • 资源使用权重比:useToWeightRatio = 资源使用量 /权重
      在这里插入图片描述在这里插入图片描述
  1. DRF策略
  • DRF(Dominant Resource Fairness),通常的资源都是单一的标准,例如只考虑内存的情况(YARN默认情况),但是多数情况是多种资源的复合,从而难以衡量两个应用应该分配的资源比例。
  • YARN中DRF的调度方式: 假设集群一共有100 CPU 和10T内存,而应用 A 需要(2 CPU ,300GB),应用 B 需要(6 CPU ,100GB)。则两个应用分别需要 A (2%CPU。3%内存)和 B (6%CPU,1%肉存)的资源,这就意味着 A 是内存主导的,,B 是 CPU 主导的,针对这种情况,可以选择 DRF 策略对不同应用进行不同资源,CPU和内存的一个不同比例的限制。

3.MapReduce

Hadoop MapReduce 是一种编程模型,它是 Hadoop 最重要的组件之一。它用于计算海量数据,并把计算任务分割成许多在集群并行计算的独立运行的 task。

MapReduce核心思想

MapReduce 是 Hadoop的核心,分布式的离线并行计算框架,对海量数据的处理。将计算过程主要分为Map和Reduce两个阶段,Map阶段并行处理输入数据,Reduce阶段对Map结果进行汇总。它会把计算任务移动到离数据最近的地方进行执行,因为移动大量数据是非常耗费资源的。

  1. 分布式的运算程序往往需要分成至少2个阶段,map阶段和reduce阶段。
  2. map阶段的MapTask并发实例,并行运行,互不相干。
  3. reduce阶段的ReduceTask并发实例互不相干,但是他们的数据依赖于上一个阶段的所有MapTask并发实例的输出。
  4. MapReduce编程模型只能包含一个Map阶段和一个Reduce阶段,如果用户的业务逻辑非常复杂,那就只能多个MapReduce程序,串行运行。

总结: 分析WordCount数据流走向深入理解MapReduce核心思想。

在这里插入图片描述

Mapper:

  1. 第一阶段是把输入文件进行分片(inputSplit)得到block。有多少个block就对应启动多少maptask
  2. 第二阶段是对输入片中的记录按照一定的规则解析成键值对。键(key)表示每行首字符偏移值,值(value)表示本行文本内容。
  3. 第三阶段是调用map方法。解析出来的每个键值对,调用一次map方法。
  4. 第四阶段是按照一定规则对第三阶段输出的键值对进行分区。
  5. .第五阶段是对每个分区中的键值对进行排序。首先按照键进行排序,然后按照值。完成后将数据写入内存中,内存中这片区域叫做环形缓冲区。

Reduce:

  1. 第一阶段(copy)reduce任务从Mapper任务复制输出的键值对。
  2. 第二阶段(sort)合并排序是把复制到Reduce本地数据,全部合并。再对合并后的数据排序
  3. 第三阶段是对排序后的键值对调用reduce方法。键相等的键值对调用一次reduce方法,每次调用会产生零个或者多个键值对,最后把这些输出的键值对写入到HDFS文件中。
    在这里插入图片描述

MapReduce优缺点

优点:
  1. 易于编程:简单的实现一些接口就可以完成分布式程序。
  2. 良好的拓展性:计算资源不足时可以通过增加机器提高能力。
  3. 高容错性:一台机器挂了,它可以把上面的计算任务转移到另外一个节点上运行,不至于这个任务运行失败,这个过程由hadoop内部完成。
  4. 适合PB级以上的海量数据的离线处理
缺点:
  1. 不擅长实时计算
  2. 不擅长流式计算:因为MapReduce自身的设计特点决定了数据源必须是静态的。
  3. 不擅长有向无环图计算:MapReduce不擅长后一个应用程序的输入为前一个的输出,因为每个MapReduce作业的输出结果都会写入到磁盘,会造成大量的磁盘IO,导致性能非常的低下。

MapReduce进程

一个完整的MapReduce程序在分布式运行时有三类实例进程:

  1. MrAppMaster:负责整个程序的过程调度及状态协调。
  2. MapTask:负责Map阶段的整个数据处理流程。
  3. ReduceTask:负责Reduce阶段的整个数据处理流程。

MapReduce框架原理

1.MapTask并行度决定机制

数据切片只是在逻辑上对输入进行分片,并不会在磁盘上将其切分成片进行存储。数据切片是MapReduce程序计算输入数据的单位,一个切片会对应启动一个MapTask。

  1. 一个job的map阶段并行度由客户端在提交job时的切片数决定
  2. 每个split切片分配一个mapTask并行实例处理
  3. 默认情况下切片大小=blocksize
  4. 切片针对每一个文件切片
2.FileInputFormat切片解析
  1. 程序先找到数据存储目录
  2. 遍历目录下的每个文件
  3. 遍历第一个文件
    (1)获取文件大小
    (2)计算切片大小(默认情况下切片大小=blocksize)
    (3)每次切片时要判断剩下的部分是否大于块的1.1倍,不大于则划分一块切片
    (4)将切片信息写到一个切片规划文件中
    (5)切片的核心过程在getSplit()方法中完成
    (6)InputSplit只记录了切片的元数据信息(起始位置,长度,所在节点等)
  4. 提交切片规划文件到yarn上,由yarn的MrAppMaster根据切片规划文件开启对应的mapTask。
3.TextInputFormat实现类

FileInputFormat常见的接口实现类包括:TextInputFormat、KeyValueTextInputFormat、NLineInputFormat、CombineTextInputFormat和自定义InputFormat等。

TextInputFormat
  • TextInputFormat是默认的FileInputFormat实现类。按行读取每条记录。键是存储该行在整个文件中的起始字节偏移量, LongWritable类型。值是这行的内容,不包括任何行终止符(换行符和回车符),Text类型。
    TextInputformat将每一行在文件中的起始偏移量作为 key,每一行的内容作为value。默认以\n或回车键作为一行记录。
KeyValueTextInputFormat
  • KeyValueTextInputFormat是FileInputFormat的一个实现类,每一行为一条记录,被分隔符分割为key,value。
  • 可以通过在驱动类中设置conf.set(KeyValueLineRecordReader.KEY_VALUE_SEPERATOR,“\t”)设置分割符。
    KeyValueTextInputFormat 适合处理输入数据的每一行是两列,并用 tab 分离的形式
NLineInputFormat
  • 如果使用NlineInputFormat,代表每个map进程处理的InputSplit不再按block块去划分,而是按NlineInputFormat指定的行数N来划分。
CombineTextInputFormat
  • CombineTextInputFormat用于小文件过多的场景,它可以将多个小文件从逻辑上规划到一个切片中,这样,多个小文件就可以交给一个MapTask处理。
4.CombineTextInputFormat切片机制

虚拟存储切片最大值设置:CombineTextInputFormat.setMaxInputSplitSize(job, 4194304);

  1. 虚拟存储过程:
      将输入目录下所有文件大小,依次和设置的setMaxInputSplitSize值比较,如果不大于设置的最大值,逻辑上划分一个块。如果输入文件大于设置的最大值且大于两倍,那么以最大值切割一块;当剩余数据大小超过设置的最大值且不大于最大值2倍,此时将文件均分成2个虚拟存储块(防止出现太小切片)。
      例如setMaxInputSplitSize值为4M,输入文件大小为8.02M,则先逻辑上分成一个4M。剩余的大小为4.02M,如果按照4M逻辑划分,就会出现0.02M的小的虚拟存储文件,所以将剩余的4.02M文件切分成(2.01M和2.01M)两个文件。
  2. 切片过程:
    (a)判断虚拟存储的文件大小是否大于setMaxInputSplitSize值,大于等于则单独形成一个切片。
    (b)如果不大于则跟下一个虚拟存储文件进行合并,共同形成一个切片。

MapReduce工作流程

MapReduce工作流程由submit阶段,mapTask阶段,shuffle阶段,reduce阶段组成

1. mapTask阶段
  1. 客户端提交切片,jar包,xml文件给yarn,由MrAppMaster获取切片信息打开对应数量的mapTask。
  2. mapTask通过InputFormat调用RecordReader的read()方法读取外部的数据,解析出key/value.
  3. 当数据处理完成后,调用OutputCollector.collect()输出结果。它会将生成的key/value分区,并写入环形内存缓冲区中。
2.shuffle阶段
  1. 当环形缓冲区达到80%后,MapReduce会将数据写到本地磁盘上,生成一个临时文件。
  2. ①在环形缓冲区内部,会对数据进行一次分区排序。利用快速排序算法对分区编号进行排序,然后再对key进行排序,这样可以保证同一分区内所有数据按照key有序。②按照分区编号由小到大依次将每个分区中的数据写入到任务工作目录下的临时文件spillN.out中,如果设置了Combiner,则写入文件前会对分区中的数据进行合并操作。③分区内元数据信息会写入到内存索引数据结构SpillRecord中,如果当前内存索引大小超过1MB,则将内存索引写到文件output/spillN.out.index中。
  3. 当所有数据处理完成后,MapTask将所有临时文件合并成一个大文件,同时生成相应的索引文件。
    MapTask以分区为单位进行合并。对于某个分区,它将采用多轮递归合并的方式。每轮合并10个文件,并将产生的文件重新加入待合并列表中,对文件排序后,重复以上过程,直到最终得到一个大文件。
3.reduce阶段
  1. Reduce会根据自己的分区,去maptask中拉取属于自己的数据,如果其大小超过一定阈值,则写到磁盘上,否则直接放到内存中。
  2. 在拉取数据的同时,ReduceTask启动了两个后台线程对内存和磁盘上的文件进行合并,以防止内存使用过多或磁盘上文件过多。
  3. 当合并完成后reduce()函数将计算结果写到HDFS上。

HDFS、YARN、MapReduce 三者关系

在这里插入图片描述

Hadoop生态体系

在这里插入图片描述

组件介绍
Hadoop HDFS(核心)Hadoop 分布式存储系统;
Yarn(核心)Hadoop 2.x版本开始才有的资源管理系统;
MapReduce(核心)并行处理框架;
HBase基于HDFS的列式存储数据库,它是一种 NoSQL 数据库,非常适用于存储海量的稀疏的数据集;
HiveApache Hive是一个数据仓库基础工具,它适用于处理结构化数据。它提供了简单的 sql 查询功能,可以将sql语句转换为 MapReduce任务进行运行;
Pig 它是一种高级脚本语言。利用它不需要开发Java代码就可以写出复杂的数据处理程序;
Flume它可以从不同数据源高效实时的收集海量日志数据;
Sqoop适用于在 Hadoop 和关系数据库之间抽取数据;
Oozie这是一种 Java Web 系统,用于Hadoop任务的调度,例如设置任务的执行时间和执行频率等;
Zookeeper用于管理配置信息,命名空间。提供分布式同步和组服务;
Mahout可扩展的机器学习算法库。

Hadoop的工作方式

Hadoop 以主从的方式工作,如图:
在这里插入图片描述

  1. 一个Master节点和多个Slave节点,Slave节点可以扩展到1000个;
  2. Master节点管理,维护和监控Slave节点,Slave节点是真正在干活的机器;
  3. Master节点应该部署在配置较高的机器上面,因为它是Hadoop集群的核心;
  4. Master存储元数据(即数据的数据),Slave是真正存储数据的机器;
  5. 客户端通过Master节点来分发任务。

Hadoop的守护进程

在这里插入图片描述
Hadoop主要有四个进程:

  • NameNode :它是HDFS运行在Master节点守护进程。
  • DataNode:它是 HDFS 运行在Slave节点守护进程。
  • ResourceManager:它是 Yarn 运行在 Master 节点守护进程。
  • NodeManager:它是 Yarn 运行在 Slave 节点的守护进程。

除了这些,可能还会有 secondary NameNode,standby NameNode,Job HistoryServer 等进程。

相关文章:

【Hadoop】Hadoop概述与核心组件

目录 Hadoop概述Hadoop 发展历史Hadoop 三大发行版本1.Apache Hadoop&#xff08;常用&#xff09;2.Cloudera Hadoop3.Hortonworks Hadoop优势优势总结——4高&#xff08;高可靠、高扩展、高效、高容错&#xff09; Hadoop组成1.HDFS管理者&#xff1a;NameNode&#xff08;n…...

3D地图在BI大屏中的应用实践

前言 随着商业智能的不断发展&#xff0c;数据可视化已成为一项重要工具&#xff0c;有助于用户更好地理解数据和分析结果。其中&#xff0c;3D地图作为一种可视化工具&#xff0c;已经在BI大屏中得到了广泛地应用。 3D地图通过将地理信息与数据相结合&#xff0c;以更加直观…...

JavaScript 进阶(二)

一、深入对象 1.1创建对象三种方式 1. 利用对象字面量创建对象 2. 利用 new Object 创建对象 3.利用构造函数创建对象 1.2 构造函数 构造函数 &#xff1a; 是一种特殊的函数&#xff0c;主要用来初始化对象。 使用场景&#xff1a; 常规的 {...} 语法允许创建一个对象。…...

基于ssm+layui的图书管理系统

基于ssmlayui的图书管理系统 账户类型分为&#xff1a;管理员&#xff0c;用户管理员私有功能用户私有功能公共功能技术栈功能实现图 视频演示 账户类型分为&#xff1a;管理员&#xff0c;用户 图书管理系统主要登录账户类型为管理员账户与用户账户 管理员私有功能 账户管理…...

2024年最新阿里云和腾讯云云服务器价格租用对比

2024年阿里云服务器和腾讯云服务器价格战已经打响&#xff0c;阿里云服务器优惠61元一年起&#xff0c;腾讯云服务器61元一年&#xff0c;2核2G3M、2核4G、4核8G、4核16G、8核16G、16核32G、16核64G等配置价格对比&#xff0c;阿腾云atengyun.com整理阿里云和腾讯云服务器详细配…...

双指针算法_复写零

题目&#xff1a; 给一个固定长度的数组arr&#xff0c;将数组中出现的每一个0都复写一遍&#xff0c;并且将其余元素都往右移动 且不要再超过数组长度的位置写入元素&#xff0c;在数组上直接修改 示例&#xff1a; 双数组模拟操作&#xff1a; 从示例来看&#xff0c;因为…...

自习室预订系统|基于springboot框架+ Mysql+Java+B/S架构的自习室预订系统设计与实现(可运行源码+数据库+设计文档+部署说明)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 学生功能模块 管理员功能登录前台功能效果图 系统功能设计 数据库E-R图设计 lunwen参…...

基于Java+SpringMVC+vue+element宠物管理系统设计实现

基于JavaSpringMVCvueelement宠物管理系统设计实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取源…...

用miniconda建立PyTorch、Keras、TensorFlow三个环境

一、配置清华镜像conda源 由于网络问题&#xff0c;直接使用conda默认的源下载包可能会非常慢。为了解决这个问题&#xff0c;可以配置国内镜像源来加速包的下载。清华大学TUNA协会提供了一个常用的conda镜像源。下面是如何配置清华镜像源的步骤&#xff1a; 1. 配置清华conda…...

【QT 5 +Linux下qt软件点击.sh脚本运行+Dconf编辑器+学习他人文章+番外篇:点击脚本运行软件】

【QT 5 Linux下qt软件点击.sh脚本运行Dconf编辑器学习他人文章番外篇&#xff1a;点击脚本运行软件】 1、前言2、实验环境3、自我学习总结-本篇总结1、说明&#xff1a;代替qt的快捷方式2、适用性更广3、了解工具&#xff1a;Dconf编辑器注意事项&#xff1a; 4、参考链接-感谢…...

多模态大模型Claude 3正式接入集简云与语聚!对标GPT-4且支持中文

自OpenAI发布GPT-4以来&#xff0c;引发了业务模式与应用使用的巨大变革&#xff0c;掀起了各大企业对于多模态大模型的研究热潮。3月初&#xff0c;AnthropicClaude在官网正式发布Claude 3系列多模态大模型&#xff0c;据了解&#xff0c;该模型在多个维度上超越了GPT-4&#…...

.NET后端返回File文件,及前端处理直接在浏览器下载

后端代码 [AllowAnonymous] public System.Web.Mvc.ActionResult ExportByteExcel(string datatab, string columnnames, string schemecode) { 返回excel。 string ReportName "ExcelTemplete" DateTime.Now.Ticks.ToString(); …...

如何压缩图片文件大小?教大家几种方法

当图片文件较大时&#xff0c;图片压缩可以有效的缩小图片kb&#xff0c;从而使图片储存起来更加方便&#xff0c;也可以解决上传时图片大小被限制的问题&#xff0c;那么我们有什么方法可以简单快速的将图片大小压缩呢&#xff1f;下面就来给大家分享几个如何修改照片大小kb的…...

Qt 如何搭建Lua的运行环境

一、Lua简介 Lua 是一种强大的、高效的、轻量级的、可嵌入的脚本语言。它支持过程&#xff08;procedural&#xff09;编程、面向对象编程、函数式编程以及数据描述。Lua 是动态类型的&#xff0c;运行速度快&#xff0c;支持自动内存管理&#xff0c;因此被广泛用于配置、脚本…...

产品推荐 - ALINX XILINX FPGA开发板 Artix-7 XC7A100T-2FGG484I

01开发板介绍 此款开发板采用核心板扩展板的模式&#xff0c;方便用户对核心板的二次开发利用。FPGA使用的是Xilinx公司的ARTIX-7系列的芯片&#xff0c;型号为XC7A100T-2FGG484I。在核心板使用了2片MICRON公司的MT41J256M16HA-125 DDR3芯片&#xff0c;组合成32bit的数据总线…...

Github 2024-03-16 开源项目日报Top10

根据Github Trendings的统计,今日(2024-03-16统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目5非开发语言项目2TypeScript项目1C++项目1Lua项目1Swift项目1《Hello 算法》:动画图解、一键运行的数据结构与算法教程 创建周期:4…...

【使用postman测试python接口】

打开python服务 设置postman如下&#xff0c;并发送&#xff1a; postman新建请求设置请求方式为post设置地址、raw、json方式、内容如下 结果&#xff1a; python如下&#xff1a; from flask import Flask, request, jsonifyapp Flask(__name__) # 实例化对象app.route…...

【C++ 】list 类

1. 标准库中的list类 list 类 的介绍&#xff1a; 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代 2. list与forward_list非常相似&#xff1a;最主要的不同在于forward_list是单链表 3. 与其他的序列式容器相比(a…...

Linux下的多线程编程:原理、工具及应用(2)

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;Flower of Life—陽花 0:34━━━━━━️&#x1f49f;──────── 4:46 &#x1f504; ◀️ ⏸ ▶️ ☰ …...

微信小程序-webview分享

项目背景 最近有个讨论区项目需要补充分享功能&#xff0c;希望可以支持在微信小程序进行分享&#xff0c;讨论区是基于react的h5项目&#xff0c;在小程序中是使用we-view进行承载的 可行性 目标是在打开web-view的页面进行分享&#xff0c;那就需要涉及h5和小程序的通讯问…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...