Hadoop(五)Yarn

2023-11-12

一.Yarn基本理论

1.Yarn架构

Resource Manager

  • 整个集群资源的统一管理者
  • 处理客户端请求
  • 监控Node Manager
  • 资源的分配和调度

Node Manager

  • 单个节点服务器的资源管理者
  • 处理来自RM和AM的命令

App Mstr

  • 单个任务运行的管理者
  • 为应用程序申请资源并分配任务
  • 任务的监控和容错

Container

  • 相当于一台独立服务器,里面有任务运行所需要的资源,比如CPU、磁盘、网络等,运行MapTask、ReduceTask等

在这里插入图片描述

2.Yarn工作机制

1.job.waitForCompletion()产生YarnRunner,和RM申请运行一个应用,RM同意后返回一个路径,告知应用将资源(切片、job.xml、jar包)提交到HDFS上

2.RM将用户的请求初始化为一个Task,放到任务队列里

3.其中一个NodeManager领取到Task任务,该NodeManager创建容器Container生成进程MapReduceAppMaster,Container从HDFS上拷贝资源到本地,并且分析切片信息

3.MapReduceAppMaster向RM申请运行MapTask资源(如果多个MapTask,将根据情况运行在不同NodeManager)

4.MapReduceAppMaster向接收到任务的NodeManager发送程序启动脚本,NodeManager分别启动MapTask,MapTask对数据分区排序

5.MapReduceAppMaster等待所有MapTask运行完毕后,向RM申请容器,运行ReduceTask

6.ReduceTask向MapTask获取相应分区的数据

7.程序运行完毕后,MR会向RM申请注销自己

注:App Mstr、Map Task、Reduce Task都是运行在Container中

3.Yarn调度器

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

先进先出调度器(FIFO)

FIFO调度器(First In First Out):单队列,根据提交作业的先后顺序,先来先服务,生产环境一般不用

容量调度器(Capacity Scheduler)

在这里插入图片描述

  • 多队列FIFO
  • 以队列为单位划分资源,每个队列设定一定比例的资源最低保证使用上限,比如总资源只有60%资源,那么每一个队列都应该分配到一定资源(这里的资源指的内存资源)
  • 规定每个用户对每一个队列只有一定的资源使用上限,以防止资源滥用
  • 当一个队列的资源有剩余时,可暂时将剩余资源共享给其他队列,但是该队列有新的作业时,资源必须归还
  • 每一个队列会对前几个符合资源要求的应用分配资源,比如上述的Q1队列,作业A需要20%,作业B需要25%,那么该队列会把资源分给A和B

容量调度器资源分配算法

队列级别:首先优先选择资源占用最低的队列分配资源,如上面的Q2队列

作业级别:设置优先级,按照优先级;否则按照提交时间顺序

容器级别:设置优先级,按照优先级;否则按照数据本地性原则,任务和数据近的优先

公平调度器

  • 多队列FIFO
  • 以队列为单位划分资源,每个队列设定一定比例的资源最低保证和使用上限,比如只有60%资源,那么每一个队列都应该分配到资源
  • 规定每个用户对每一个队列只有一定的资源使用上限,以防止资源滥用
  • 当一个队列的资源有剩余时,可暂时将剩余资源共享给其他队列
  • 每个队列公平分布资源,如队列有20%资源,4个作业,每一个任务都会分配到5%资源

公平调度器资源分配算法

队列级别:二次分配:第一次绝对公平分,第二次资源多的队列再给少的队列,实现分配

作业级别

  • 不加权 第一次绝对公平,第二次将多的再平分分给少的,第三次再将多的再平分分给少的,直到没有空闲资源
  • 加权 根据权重分资源 多的给少的,循环直到没有空闲资源
    在这里插入图片描述

DRF(dominant resource fairness)

通常的资源都是单一的标准,例如只考虑内存的情况(YARN默认情况),但是多数情况是多种资源的复合,从而难以衡量两个应用应该分配的资源比例,我们就用DRF来决定如何调度,即看哪个资源需求占主导

4.Yarn常用命令

yarn application查看任务

列出所有的Application

yarn application -list

根据Application状态过滤

yarn application -list -appStates XXX(XXX - ALL、NEW、NEW_SAVING、SUBMITTED、ACCEPTED、RUNNING、FINISHED、FAILED、KILLED)

杀死程序

yarn application -kill application-id

yarn logs查看日志

查询Application日志

yarn logs -applicationId <ApplicationId>

查询Container日志

yarn logs -applicationId <ApplicationId> -containerId <ContainerId>

yarn applicationattempt查看尝试运行的任务

列出所有Application尝试的列表

yarn applicationattempt -list <ApplicationId>

打印ApplicationAttemp状态

yarn applicationattempt -status <ApplicationAttemptId>

yarn container查看容器

列出所有Container

yarn container -list <ApplicationAttemptId>

打印Container状态

yarn container -status <ContainerId>

只有在任务跑的途中才能看到container的状态

yarn node查看节点状态

列出所有节点

yarn node -list -all

yarn rmadmin更新配置

加载队列配置

yarn rmadmin -refreshQueues

yarn queue查看队列

打印队列信息

yarn queue -status <QueueName>
5.Yarn参数配置

**RM相关**

二 .tool接口

一个tool 接口用于支持处理普通的命令行参数

比如,我们在hadoop集群上输入命令行

yarn jar wc.jar com.gzhu.yarn.YarnDriver wordcount -Dxx /input /output

此时hadoop集群会把参数xx作为输入路径,/input作为输出路径,这样就会报错输出路径存在,为了让hadoop正确识别到输入路径和输出路径是第二个参数和第三个参数,tool接口的作用就来了

在这里插入图片描述

YarnDriver

package com.gzhu.yarn;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;

import java.util.Arrays;

public class YarnDriver {
    private static Tool tool;
    public static void main(String[] args) throws Exception {
        // 创建配置信息
        Configuration configuration = new Configuration();

        switch (args[0]){
            case "wordcount":
                tool = new YarnTool();
                break;
            default:
                throw new RuntimeException("no no no");
        }

        int run = ToolRunner.run(configuration,tool, Arrays.copyOfRange(args,1,args.length));

        System.exit(run);
    }
}

YarnTool

package com.gzhu.yarn;

import org.apache.hadoop.conf.Configuration;
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.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.Tool;

import java.io.IOException;

public class YarnTool implements Tool {
    private Configuration conf;
    @Override
    public int run(String[] args) throws Exception {
        // 1.获取job
        Job job = Job.getInstance(conf);

        // 2.设置jar路径
        job.setJarByClass(YarnDriver.class);

        // 3.关联mapper和reducer
        job.setMapperClass(YarnTool.WorldCountMapper.class);
        job.setReducerClass(YarnTool.WorldCountReduce.class);

        // 4.设置map输出的kv类型
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);

        // 5.设置最终输出的kv类型
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);

        FileInputFormat.setInputPaths(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));

        boolean b = job.waitForCompletion(true);
        return b ? 0 : 1;
    }

    @Override
    public void setConf(Configuration configuration) {
        this.conf = configuration;
    }

    @Override
    public Configuration getConf() {
        return conf;
    }

    // mapper
    public static class WorldCountMapper extends Mapper<LongWritable, Text,Text, IntWritable> {
        private Text text = new Text();
        private IntWritable intWritable = new IntWritable(1);
        @Override                  // 这里的value是每一行数据
        protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, IntWritable>.Context context) throws IOException, InterruptedException {
            // 1.根据原始数据获取一行,转换成字符串,例如 kun kun kun
            String string = value.toString();

            // 2.切割每一行单词  [kun,kun,kun]
            String[] words = string.split(" ");

            // 3.循环写出,每一个kun都为1 K-V kun-1,Mapper阶段不汇总,所以每一个都是1
            for (String word : words) {
                // 将String类型转换成Text类型
                text.set(word);
                // write里面的参数为输出的两个参数类型 Text, IntWritable
                // 这里输出三个kun-1
                context.write(text,intWritable);
            }
        }
    }
    // reduce
    public static class WorldCountReduce extends Reducer<Text, IntWritable,Text,IntWritable> {
        private IntWritable intWritable = new IntWritable();
        @Override
        // key代表每一个key,例如Kun,values是一个集合,里面存的是key对应的V值
        protected void reduce(Text key, Iterable<IntWritable> values, Reducer<Text, IntWritable, Text, IntWritable>.Context context) throws IOException, InterruptedException {
            int sum = 0;

            // 将每一个Key对应的value汇总
            for (IntWritable value : values) {
                sum += value.get();
            }
            intWritable.set(sum);

            context.write(key,intWritable);
        }
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hadoop(五)Yarn 的相关文章

  • 如果没有可用的指定分区路径,SPARK SQL 会失败

    我在 EMR 中使用 Hive Metastore 我可以通过 HiveSQL 手动查询表 但是当我在 Spark Job 中使用同一个表时 它说输入路径不存在 s3 导致 org apache hadoop mapred InvalidI
  • 将文件夹名称添加到输出 Pig Latin

    我在 HDFS 中有下一个目录结构 logs folder 2021 03 01 log1 log2 log3 2021 03 02 log1 log2 2021 03 03 log1 log2 日志由文本数据组成 数据中没有日期 因为它已
  • 如何获取hive中的数据库用户名和密码

    正在编写jdbc程序来连接hive数据库 我希望在连接 url 中提供用户名和密码 我不知道如何使用 hive QL 获取用户名和密码 有人可以帮我吗 Exception in thread main java sql SQLNonTran
  • HDFS 在大量小文件和 128 Mb 块大小上的行为

    我有很多 多达数十万个 小文件 每个文件 10 100 Kb 我的 HDFS 块大小等于 128 MB 我的复制因子等于 1 为每个小文件分配 HDFS 块有什么缺点吗 我见过相当矛盾的答案 答案说最小的文件占用整个块 https stac
  • MapReduce 排序和洗牌如何工作?

    我正在使用 yelps MRJob 库来实现映射缩减功能 我知道 MapReduce 有一个内部排序和洗牌算法 它根据键对值进行排序 所以如果我在地图阶段后得到以下结果 1 24 4 25 3 26 我知道排序和洗牌阶段将产生以下输出 1
  • Amazon MapReduce 日志分析最佳实践

    我正在解析 Apache Nginx Darwin 视频流服务器 生成的访问日志 并按日期 引用者 用户代理聚合每个交付文件的统计信息 每小时都会生成大量日志 而且这个数字在不久的将来可能会急剧增加 因此通过 Amazon Elastic
  • 远程执行hadoop作业时出现异常

    我正在尝试在远程 hadoop 集群上执行 Hadoop 作业 下面是我的代码 Configuration conf new Configuration conf set fs default name hdfs server 9000 c
  • Hive如何存储数据,什么是SerDe?

    当查询表时 SerDe 将将文件中的字节中的一行数据反序列化为 Hive 内部使用的对象来操作该行数据 执行 INSERT 或 CTAS 时 请参阅第 441 页上的 导入数据 表的 SerDe 将将 Hive 的一行数据的内部表示序列化为
  • Hadoop setInputPathFilter错误

    我正在使用 Hadoop 0 20 2 无法更改 并且我想向我的输入路径添加一个过滤器 数据如下 path1 test a1 path1 test a2 path1 train a1 path1 train a2 我只想处理所有文件trai
  • 如何使用新的 Hadoop API 来使用 MultipleTextOutputFormat?

    我想编写多个输出文件 如何使用 Job 而不是 JobConf 来执行此操作 创建基于密钥的输出文件名的简单方法 input data type key value cupertino apple sunnyvale banana cupe
  • Curl下载到HDFS

    我有这个代码 curl o fileName csv url xargs hdfs dfs moveFromLocal 1 somePath 当我执行此代码时 curl 将请求中的值放入 fileName csv 中 该文件将移动到 HDF
  • 将多个前缀行过滤器设置为扫描仪 hbase java

    我想创建一台扫描仪 它可以为我提供带有 2 个前缀过滤器的结果例如 我想要其键以字符串 x 开头或以字符串 y 开头的所有行 目前我知道只能使用一个前缀 方法如下 scan setRowPrefixFilter prefixFiltet 在
  • 如果 HBase 不是运行在分布式环境中,它还有意义吗?

    我正在构建数据索引 这将需要以形式存储大量三元组 document term weight 我将存储多达几百万个这样的行 目前我正在 MySQL 中将其作为一个简单的表来执行 我将文档和术语标识符存储为字符串值 而不是其他表的外键 我正在重
  • http://localhost:50070/ 的 hadoop Web UI 不起作用

    命令 jps 显示以下详细信息 第5144章 5464 节点管理器 5307 资源管理器 5800 Jps 显然namenode和datanode丢失了 网络用户界面位于http 本地主机 50070 http localhost 5007
  • 异常:java.lang.Exception:使用 master 'yarn' 运行时,必须在环境中设置 HADOOP_CONF_DIR 或 YARN_CONF_DIR。在火花中

    我是新的阿帕奇火花 我已经在spark独立模式下测试了一些应用程序 但我想运行应用程序yarn模式 我正在windows中运行apache spark 2 1 0 这是我的代码 c spark gt spark submit2 master
  • 将日期字符串转换为“MM/DD/YY”格式

    我刚刚看到这个例子 我该如何解决这个问题 Hive 元存储包含一个名为 Problem1 的数据库 其中包含一个名为 customer 的表 customer 表包含 9000 万条客户记录 90 000 000 每条记录都有一个生日字段
  • 如何通过Python访问Hive?

    https cwiki apache org confluence display Hive HiveClient HiveClient Python https cwiki apache org confluence display Hi
  • 猪参考

    我正在学习 Hadoop Pig 并且我总是坚持引用元素 请查找下面的示例 groupwordcount group chararray words bag of tokenTuples from line token chararray
  • Hive - 线程安全的自动递增序列号生成

    我遇到一种情况 需要将记录插入到特定的 Hive 表中 其中一列需要是自动递增的序列号 即在任何时间点都必须严格遵循 max value 1 规则 记录从许多并行的 Hive 作业插入到这个特定的表中 这些作业每天 每周 每月批量运行 现在
  • 在映射器的单个输出上运行多个减速器

    我正在使用地图缩减实现左连接功能 左侧有大约 6 亿条记录 右侧有大约 2300 万条记录 在映射器中 我使用左连接条件中使用的列来创建键 并将键值输出从映射器传递到减速器 我遇到性能问题 因为两个表中的值数量都很高的映射器键很少 例如分别

随机推荐

  • spring 三级缓存

    spring 三级缓存 Spring三级缓存是Spring框架用来解决循环依赖问题的一种机制 它包含三级缓存 singletonObjects earlySingletonObjects和singletonFactories singlet
  • 移植STM32官方加密库STM32Cryptographic

    感谢这位博主 文章具有很高的参考价值 STM32F1做RSA AES数据加解密 MD5信息摘要处理 我以为我爱了的博客 CSDN博客 概述 ST官方在很多年前就推出了自己的加密库 配合ST芯片用起来非常方便 支持ST的所有MCU 官方已经给
  • 怎样选择网站服务器带宽,如何选择云服务器带宽

    原标题 如何选择云服务器带宽 在一台正常使用的云服务器中 一般主要有CPU 内存 带宽 磁盘等几种配置 在云服务器运行中 带宽指在一定时间内从或向网站 服务器传输的数据量 带宽是一个量词 是指在规定时间 一般单位时间为1秒 内 从一端流到另
  • IT自由职业者的成功秘诀

    From http www csdn net article 1970 01 01 293774 导读 原文作者Greg Jorgensen是一位典型的程序员 他从1974年开始编程 曾在耐克和苹果等公司任职 他专攻修复和完善受损 被遗弃和
  • 阿里云k8s服务之间偶尔获取不到dns解析安装ACK NodeLocal DNSCache

    1 背景 feign RetryableException No route to host Host unreachable executing POST http osale thirdparty empty detect 服务突然会中
  • IT精英简历

    IT精英简历 马化腾眼下 一个34岁的中国人在世界和中国经济界可谓抢尽风头 在刚刚过去的2004年年底 他被美国 时代周刊 Time 和有线新闻网 CNN 评为2004年全球最具影响力的25名商界领袖之一 荣膺香港理工大学第四届紫荆花杯杰出
  • vue2.0 element-ui中的el-select选择器无法显示选中的内容

    我使用的是element ui V2 2 3 代码如下 当我选择值得时候 el select选择器无法显示选中的内容 但是能触发change方法 并且能输出选择的值 select vue文件
  • 动态修改iframe高度,从而自适应内容真实高度

    项目中遇到这样的情况 需要用到iframe iframe中的内容也是自己写的页面 由于页面中元素是异步加载出来的 并不能提前预知其高度 这样就不能设置iframe的高度 导致iframe会出现滚动条 用户体验不好 所以我需要能根据内容动态改
  • 41-C语言-蛇形矩阵-输出从1到n的矩阵

    问题 蛇形矩阵 构建蛇形矩阵 之后 根据条件相应输出 思路 蛇形矩阵 初始值a 0 0 为1 之后开始进行趟数变更 蛇形矩阵趟数 斜着来 斜杠 第一趟为a 0 1 和a 1 0 每一趟中的范围为0到tang次 如第一趟中a 0 1 已经赋值
  • 试题 算法训练 印章

    问题描述 共有n种图案的印章 每种图案的出现概率相同 小A买了m张印章 求小A集齐n种印章的概率 输入格式 一行两个正整数n和m 输出格式 一个实数P表示答案 保留4位小数 样例输入 2 3 样例输出 0 7500 数据规模和约定 1 n
  • 神舟电脑上的神器----“control center 管理软件”

    前言 现在有许许多多的人都爱上了神舟电脑的 物美价廉 那么在使用神舟电脑的时候 我们有哪些值得知道的事情 我认为用神舟电脑而不知道 神舟电脑上的控制中心 control center 管理软件 将没有比这个更加遗憾的事情了 正文 现在我们来
  • 2、ESXI安装出错

    ESXI安装错误提示 解决办法 按ALT F1健进入命令行模式 用户名为root 密码为空 然后输入 esxcli system settings advanced set o VSAN FakeSCSIReservations i 1 重
  • unity种四种光源

    unity 中的光 unity中一共有四种光源分别为 Directional light 方向光 类似太阳的日照效果 Point light 点光源 类似蜡烛 Spotlight 聚光灯 类似手电筒 Area Light 区域光 无法用作实
  • 【c++设计模式】——模板方法模式

    模板方法模式的定义 定义一个操作中的算法对象的骨架 稳定 而将一些步骤延迟到子类 定义一个虚函数 让子类去实现 template method使得子类可以不改变 复用 一个算法结构即可重定义该算法的某些步骤 在理解模板方法模式的时候 我们需
  • 深入 Docker:容器和镜像

    在本专栏往期的 Flux7 系列教程 里 我们已经简单地探讨了 Docker 的基本操作 而在那篇教程中 我们一直是简单地将容器当成是 正在运行的镜像 并没有深入地区分镜像和容器到底是什么 有什么区别 因此本次翻译 深入 Docker 容器
  • 服务器固态硬盘接口区别,s s d固态硬盘和服务器配件硬盘的区别

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 s s d固态硬盘 区别于机械硬盘 固态硬盘 Solid State Drives 简称固盘 固态硬盘 Solid State Drive 用固态电子存储芯片阵列而制成的硬盘 由控制单元 和存储
  • docker cgroups 资源限制

    cgroups资源限制技术 1 什么是cgroups cgroups是linux内核提供的一种机制 这种机制可以通过需求把一系列系统任务 及其子任务整合到按资源划分的不同组内 从而为系统资源管理提供统一的框架 通俗来说 cgroups可以限
  • nginx 301 Moved Permanently错误

    问题场景 今天在利用nginx的alias和index参数做实验时 问题描述 通过curl访问出现301错误 原因分析 起初我以为是路径写错了 然后把alias的路径更改 发现问题还是存在 我又以为是用户权限问题 我把运行nginx的用户修
  • ❤️DDOS攻击详解❤️——万物互联时代的巨大威胁!安全领域最棘手的问题之一

    DDOS全称Distributed Denial of Service 翻译成中文是 分布式拒绝服务 DDOS攻击是安全领域最难解决的问题之一 由于其攻击方式的特殊性 始终没有一个完美的解决方案 随着万物互联时代的临近 网络设备的数量呈指数
  • Hadoop(五)Yarn

    Hadoop 五 Yarn 一 Yarn基本理论 1 Yarn架构 2 Yarn工作机制 3 Yarn调度器 4 Yarn常用命令 5 Yarn参数配置 二 tool接口 一 Yarn基本理论 1 Yarn架构 Resource Manag