mapreduce与yarn

news2024/11/28 18:46:49

文章目录

  • 一、MapReduce
    • 1.1、MapReduce思想
    • 1.2、MapReduce实例进程
    • 1.3、MapReduce阶段组成
    • 1.4、MapReduce数据类型
    • 1.5、MapReduce关键类
    • 1.6、MapReduce执行流程
      • 1.6.1、Map阶段执行流程
      • 1.6.2、Map的shuffle阶段执行流程
      • 1.6.3、Reduce阶段执行流程
      • 1.7、MapReduce实例WordCount
  • 二、YARN
    • 2.1、YARN简介
    • 2.2、功能说明
    • 2.3、YARN架构、组件
    • 2.4、YARN执行流程
    • 2.5、YARN资源调度器Schedule

一、MapReduce

1.1、MapReduce思想

  • MapReduce的思想核心是“先分再合,分而治之”。
  • 所谓“分而治之”就是把一个复杂的问题,按照一定的分解方法分为等价的规模较小的若干部分,然后逐个解决,分别找出各部分的结果,然后把各部分的结果组成整个问题的最终结果。
  • Map表示第一阶段:负责拆分:即把复杂的任务分解为若干个“简单的子任务”来进行并行处理。可以进行拆分的前提是这些小人物可以并行计算,彼此之间几乎没有依赖关系。
  • Reduce表示第二阶段,负责合并:即对map阶段的结果进行全局汇总。

1.2、MapReduce实例进程

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

  • MRAppMaster: 负责整个MR程序的过程调度及状态协调。
  • MapTask: 负责map阶段的整个数据处理流程。
  • Reduce:负责reduce阶段的整个数据处理流程。

1.3、MapReduce阶段组成

  • 一个MapReduce编程模型中只能包含一个Map阶段和一个Reduce阶段,或者只有Map阶段。
  • 如果业务逻辑复杂,只能使用多个MapReduce查询串行运行。
    在这里插入图片描述

1.4、MapReduce数据类型

  • 整个MapReduce程序中,数据都是以KV键值对的形式流传的。

1.5、MapReduce关键类

  • GenericOptionsParser是为Hadoop框架解析命令行参数的工具类。
  • InputFormat接口,实现类包括:Fileinputformat 等,主要作用于文件为输入及切割。
  • Mapper将输入的kv对映射成中间数据kv对集合。Maps将输入记录转变为中间记录。
  • Reducer根据key将中间数据集合处理合并为更小的数据结果集。
  • Partitioner对数据安装key进行分区。
  • OutputCllector文件的输出。
  • Combiner本地聚合,本地化的reduce。

1.6、MapReduce执行流程

在这里插入图片描述在这里插入图片描述

1.6.1、Map阶段执行流程

  1. 在MapReduce程序读取文件的输入目录上存放相应文件。
  2. 按照一定的标准逐个进行逻辑切片,形成切片规划
    默认Split size = Block size(128M),每一个切片由一个MapTask处理。
    切片会有1.1的冗余(每次切片时,都要判断切完剩下的部分是否大于块的1.1倍,不大于1.1配就会划分为一块切片)
  3. 提交信息给yarn
    包含(切片,jar包,以及job运行相关参数)。
  4. yarn启动MRAPPmaster根据切片个数计算出需要的MapTask数量。
  5. 使用客户端指定的InputFormat来读取数据,返回对应的<k,v>键值对
    InputFormat默认使用子类TextInputFormat的createRecordReader(规则为LineRecordReader)来逐行读取数据。
    返回的<k,v>键值对:k为偏移量,v为偏移量的内容。
  6. 将<k,v>键值对传给客户端定义的map方法,做逻辑运算。

1.6.2、Map的shuffle阶段执行流程

  1. map运算完后将结果<k,v>写入环形缓冲区
    环形缓冲区默认100M(内存)
  2. 进行分区、排序
  3. 溢出到文件(分区且区内有序)
    到达80%进行溢写到磁盘,在缓冲区中数据进行反向写。
  4. Merge归并排序。
    把所有溢出的临时文件进行一次合并操作,以确保一个MapTask最终只产生一个中间数据文件。
  5. Combiner合并。
    在程序中可以选用,在reduce前进行预先处理数据。

1.6.3、Reduce阶段执行流程

  1. 在MapTask任务完成后,启动相应数量的ReduceTask,并告知ReduceTask处理数据分区。
  2. ReduceTask进程启动后,从MapTask拉取数据
  3. 进行归并排序,按照相同key的KV为一组,调用客户端定义的reduce()方法进行逻辑运算。
  4. 运算完毕后,使用OutPutFormat将结果输出到文件。
    默认为TextOutputFormat的RecordWriter方法

1.7、MapReduce实例WordCount

WordCountDriver

package org.example.workcount;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import java.io.IOException;

/**
 * @program: hadoopstu
 * @interfaceName WordCountDriver
 * @description:
 * @author: 太白
 * @create: 2023-02-06 12:16
 **/
public class WordCountDriver {

    public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {
        Configuration configuration = new Configuration();
        Job job = Job.getInstance(configuration);

        job.setJarByClass(WordCountDriver.class);

        job.setMapperClass(WordCountMapper.class);

        job.setMapOutputKeyClass(Text.class);

        job.setMapOutputValueClass(IntWritable.class);

        job.setReducerClass(WordCountReduce.class);

        job.setOutputKeyClass(Text.class);

        job.setOutputValueClass(LongWritable.class);
//      指定map输入的文件路径
        FileInputFormat.setInputPaths(job, new Path("E:\\lovejava\\student\\hadoopstu\\in\\workcount.txt"));
//        指定reduce输出的文件路径
        Path path = new Path("E:\\lovejava\\student\\hadoopstu\\in\\out1");

        FileSystem fileSystem = FileSystem.get(path.toUri(), configuration);

        if (fileSystem.exists(path)) {
            fileSystem.delete(path, true);
        }
        FileOutputFormat.setOutputPath(job,path);

        job.waitForCompletion(true);
    }
}

WordCountMapper

package org.example.workcount;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;

/**
 * @program: hadoopstu
 * @interfaceName WordCountMapper
 * @description:
 * @author: 太白
 * @create: 2023-02-06 12:16
 **/
public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
    Text text = new Text();
    IntWritable intWritable = new IntWritable();

    @Override
    protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, IntWritable>.Context context) throws IOException, InterruptedException {
        System.out.println("WordCountMapper stage key:"+key+"value:"+value);
        String[] words = value.toString().split(" ");

        for (String word : words) {

            text.set(word);
            intWritable.set(1);
            context.write(text,intWritable);
        }



    }
}

WordCountReduce

package org.example.workcount;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

/**
 * @program: hadoopstu
 * @interfaceName WordCountReduce
 * @description:
 * @author: 太白
 * @create: 2023-02-06 12:16
 **/
public class WordCountReduce extends Reducer<Text, IntWritable, Text, LongWritable> {

    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Reducer<Text, IntWritable, Text, LongWritable>.Context context) throws IOException, InterruptedException {
        System.out.println("reduce stage key:"+key+"values:"+values.toString());
        int count = 0;
        for (IntWritable value : values) {
            count += value.get();
        }

//        LongWritable longWritable = new LongWritable();
//        longWritable.set(count);
        LongWritable longWritable = new LongWritable(count);
        System.out.println("key:"+key+"resultValue:"+longWritable.get());

        context.write(key,longWritable);
    }
}

二、YARN

2.1、YARN简介

  • Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)是一种新的Hadoop资源管理器。
  • 是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度。
  • 它的引入为集群在利用率、资源同一管理和数据共享等方面带来巨大好处。
    在这里插入图片描述
  • 可以把Hadoop YARN理解为一个分布式的操作系统平台,而MapReduce等计算程序则相等于云星宇操作系统之上的应用程序,YARN为这些程序提供运算所需的资源。

2.2、功能说明

  • 资源管理系统:集群的硬件资源,和程序运行相关。比如内存、CPU等。
  • 调度平台:多个程序同时申请计算资源如何分配、调度的规则(算法)。
  • 通用:不仅仅支持MapReduce程序,理论上支持各种计算程序。YARN不关心你干什么,只关心你要资源,在有的情况下给你,用完之后还我。

2.3、YARN架构、组件

  • ResourceManager(RM)
    YARN中的主角色,决定系统中所有应用程序之间资源分配的最终权限,即最终仲裁者。
    接收用户的作业提交,并通过NM分配、管理各个机器上的计算资源。
  • NodeManager(NM)
    YARN中的从角色,一台机器上一个,负责管理本机器上的计算资源。
    根据RM命令,启动Container容器(资源的抽象)、件事容器的资源使用情况。并且向RM主角色会报资源使用情况。
  • ApplicationMaster(AM)
    用户提交的每个应用程序均包含一个AM。
    负责程序内部各阶段的资源申请,监督程序的执行情况。
    在这里插入图片描述

2.4、YARN执行流程

在这里插入图片描述

  1. 用户通过客户端向YARN中ResourceManager提交应用程序。
  2. ResourceManager为该应用程序分配第一个Container(容器),并与对应的NodeManager通信,要求
    它在这个Container中启动这个应用程序的ApplicationMaster。
  3. ApplicationMaster启动成功之后,首先向ResourceManager注册并保持通信,这样用户可以直接通过ResourceManage查看应用程序的运行状态(处理了百分之几)。
  4. AM为本次程序内部的各个Task任务向RM申请资源,并监控它的运行状态。
  5. 一旦 ApplicationMaster 申请到资源后,便与对应的 NodeManager 通信,要求它启动任务。
  6. NodeManager 为任务设置好运行环境后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。
  7. 各个任务通过某个 RPC 协议向 ApplicationMaster 汇报自己的状态和进度,以让 ApplicationMaster 随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster 查询应用程序的当前运行状态。
  8. 应用程序运行完成后,ApplicationMaster 向 ResourceManager 注销并关闭自己。

2.5、YARN资源调度器Schedule

  • 在理想情况下,应用程序提出的请求将立即得到YARN批准。但是实际中,资源是有限的,并且在繁忙的群集上,应用程序通常将需要等待其某些请求得到满足。YARN调度程序的工作是根据一些定义的策略为应用程序分配资源。

  • 在YARN中,负责给应用分配资源的就是Scheduler,它是ResourceManager的核心组件之一。Scheduler完全专用于调度作业,它无法跟踪应用程序的状态。

  • 一般而言,调度是一个难题,并且没有一个“最佳”策略,为此,YARN提供了多种调度器和可配置的策略供选择。

  • 三种调度器
    FIFO Scheduler(先进先出调度器)、Capacity Scheduler(容量调度器)、Fair Scheduler(公平调度器)。

  • Apache版本YARN默认使用Capacity Scheduler。

  • 如果需要使用其他的调度器,可以在yarn-site.xml中的yarn.resourcemanager.scheduler.class进行配置。

关于资源调度器详情请查看

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

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

相关文章

版本控制软件SVN

SVN学习 1 版本控制软件定义及用途 版本控制软件是为适应软件配置管理的需要&#xff0c;控制软件的修改&#xff0c;减少混乱&#xff0c;提高软件生产效率&#xff0c;其是软件质量保证的重要环节软件配置管理是对软件修改进行标识、组织和控制的技术&#xff0c;用来协调和…

MASA MAUI Plugin (八)Android相册多选照片(Intent 方式)

背景 MAUI的出现&#xff0c;赋予了广大.Net开发者开发多平台应用的能力&#xff0c;MAUI 是Xamarin.Forms演变而来&#xff0c;但是相比Xamarin性能更好&#xff0c;可扩展性更强&#xff0c;结构更简单。但是MAUI对于平台相关的实现并不完整。所以MASA团队开展了一个实验性项…

代码随想录NO49 | 动态规划 _LeetCode1143.最长公共子序列 1035.不相交的线 53. 最大子序和

动态规划 _LeetCode1143.最长公共子序列 1035.不相交的线 53. 最大子序和今天继续子序列问题&#xff01; 1143.最长公共子序列 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符…

docker全解

目录说明docker简介为什么是docker容器与虚拟机比较容器发展简史传统虚拟机技术容器虚拟化技术docker能干什么带来技术职级的变化开发/运维&#xff08;Devops)新一代开发工程师Docker应用场景why docker&#xff1f;docker的优势docker和dockerHub官网Docker安装CentOS Docker…

10 种 Spring事务失效场景

10 种 Spring事务失效场景 1.概述 Spring针对Java Transaction API (JTA)、JDBC、Hibernate和Java Persistence API(JPA)等事务 API&#xff0c;实现了一致的编程模型&#xff0c;而Spring的声明式事务功能更是提供了极其方便的事务配置方式&#xff0c;配合Spring Boot的自动…

supervisor看守进程

supervisor可以用于看守正在运行的服务&#xff0c;如果服务以外停止&#xff0c;他会在设置的时间间隔内重新启动该服务。 本测试使用的系统是TencentOS3.1. 安装supervisor最简单方法是使用yum。 yum install supervisor supervisor需要python3支持&#xff0c;因此请先确…

【Android玩机】跟大家聊聊面具Magisk的使用(安装、隐藏)

目录:1、Magisk中文网2、隐藏面具和Root&#xff08;一共3种方法&#xff09;1、Magisk中文网 &#xff08;1&#xff09;首先Magisk有一个中文网&#xff0c;对新手非常友好 &#xff08;2&#xff09;这网站里面主要包含&#xff1a;6 部分 &#xff08;3&#xff09;按照他给…

c++常用stl算法

1、头文件 这些算法通常包含在头文件<algorithm> <functional> <numeric>中。 2、常用遍历算法 for_each(v.begin(),v.end(), 元素处理函数/仿函数) 注意&#xff1a;在使用transform转存时&#xff0c;目标容器需要提取开辟合适的空间。 void printfunc(…

【C++】类和对象入门必知

面向过程和面向对象的初步认识类的引入类的定义类的访问限定符封装类的作用域类的实例化类对象模型this指针C语言和C实现Stack的对比面向过程和面向对象的初步认识 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解…

【归一化小记】,batchnorm,layernorm,IN,GN,分布式归一化...

BatchNorm 最早在全连接网络中被提出&#xff0c;对每个神经元的输入做归一化。扩展到 CNN 中&#xff0c;就是对每个卷积核的输入做归一化&#xff0c;或者说在 channel 之外的所有维度做归一化。 BN 带来的好处有很多&#xff0c;这里简单列举几个&#xff1a; 防止过拟合&am…

【HTML】HTML 表单 ④ ( textarea 文本域控件 | select 下拉列表控件 )

文章目录一、textarea 文本域控件二、select 下拉列表控件一、textarea 文本域控件 textarea 文本域 控件 是 多行文本输入框 , 标签语法格式如下 : <textarea cols"每行文字字符数" rows"文本行数">多行文本内容 </textarea>实际开发中 并不…

聚观早报 | 嘀嗒出行重启赴港IPO;饿了么到店业务将与高德合并

点击蓝字 / 关注我们今日要闻&#xff1a;嘀嗒出行重启赴港 IPO&#xff1b;饿了么到店业务将与高德合并&#xff1b;美团香港骑手月收入高达3.5万港元&#xff1b;腾讯或引进Meta旗下VR眼镜Quest 2&#xff1b;苹果将阻止用户免费装开测版iOS 17 嘀嗒出行重启赴港 IPO 港交所文…

Java企业开发学习笔记(2)利用组件注解符精简Spring配置文件

该文章主要为完成实训任务&#xff0c;详细实现过程及结果见【http://t.csdn.cn/iSeSH】 文章目录一、 利用组件注解符精简Spring配置文件1.1 创建新包1.2 复制四个类1.3 修改杀龙任务类1.4 修改救美任务类1.5 修改勇敢骑士类1.6 修改救美骑士类1.7 创建Spring配置文件1.8 创建…

【数据库】redis数据持久化

目录 数据持久化 一&#xff0c; RDB 1&#xff0c; 什么是RDB 2&#xff0c;持久化流程 3&#xff0c; 相关配置 案例演示&#xff1a; 4&#xff0c; 备份和恢复 1、备份 2、恢复 3&#xff0c;优势 4&#xff0c; 劣势 二&#xff0c;AOF 1&#xff0c;什么是A…

Java笔记026-集合/数组、Collection接口、ArrayList、Vector、LinkedList

集合集合的理解和好处保存多个数据使用的是数组&#xff0c;分析数组的弊端数组1、长度开始必须指定&#xff0c;而且一旦指定&#xff0c;不能更改2、保存的必须为同一类型的元素3、使用数组进行增加/删除元素的示意代码-比较麻烦Person数组扩容示意代码Person[] pers new Pe…

ChatGPT三个关键技术

情景学习&#xff08;In-context learning&#xff09; 对于一些LLM没有见过的新任务&#xff0c;只需要设计一些任务的语言描述&#xff0c;并给出几个任务实例&#xff0c;作为模型的输入&#xff0c;即可让模型从给定的情景中学习新任务并给出满意的回答结果。这种训练方式能…

论文笔记:How transferable are features in deep neural networks? 2014年NIP文章

文章目录一、背景介绍二、方法介绍三、实验论证四、结论五、感想参考文献一、背景介绍 1.问题介绍&#xff1a; 许多在自然图像上训练的深度神经网络都表现出一个奇怪的共同现象&#xff1a;在第一层&#xff0c;它们学习类似于Gabor过滤器和color blobs的特征。这样的第一层特…

c++提高篇——list容器

一、基本概念 功能:将数据进行链式存储 链表&#xff08;(list)是一种物理存储单元上非连续的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接实现的&#xff0c;链表由一系列结点组成。 结点的组成:一个是存储数据元素的数据域&#xff0c;另一个是存储下一个…

3DVR营销是什么?是否成为市场热门?

在当今市场经济环境中&#xff0c;营销对于在企业发展中的作用至关重要。市场是企业发展的战场&#xff0c;谁能在市场营销方面做得更好&#xff0c;就能够吸引公域平台流量、占据主流市场、开拓新局面从而稳定现有规模。这将确保企业不被市场淘汰&#xff0c;而是能够可持续性…

CSS(配合html的网页编程)

续上一篇博客,CSS是前端三大将中其中的一位,主要负责前端的皮,也就是负责html的装饰.一、基本语法规则也就是:选择器若干属性声明(选中一个元素然然后进行属性声明)CSS代码是放在style标签中,它可以放在head中也可以放在body中 ,可以放到代码的任意位置.color也就是设置想要输入…