勿忘初心做自己 发表于 2025-1-13 15:11:30

Yarn工作机制?思维导图 代码示例(java 架构)

YARN 工作机制

YARN(Yet Another Resource Negotiator)是Hadoop生态体系中的资源管理和调度框架,它负责管理集群中的所有资源,并为应用步伐提供调度服务。以下是关于YARN工作机制的详细介绍:
YARN 架构组件


[*] ResourceManager (RM):

[*]管理整个集群的资源分配。
[*]负责启动和监控ApplicationMaster。

[*] NodeManager (NM):

[*]每个节点上的代理,负责容器的生命周期管理。
[*]监控并陈诉节点健康状况给ResourceManager。

[*] ApplicationMaster (AM):

[*]每个应用步伐都有一个ApplicationMaster实例。
[*]向ResourceManager请求资源,并与NodeManager通信以启动和监控使命。

[*] Container:

[*]由NodeManager管理的资源隔离环境。
[*]包罗CPU、内存等资源,用于运行详细的使命。

YARN 工作流程


[*] 客户端提交作业:

[*]用户通过命令行或API提交作业到ResourceManager。

[*] ResourceManager分配Container给ApplicationMaster:

[*]ResourceManager根据可用资源为ApplicationMaster分配一个Container。

[*] 启动ApplicationMaster:

[*]NodeManager在分配的Container中启动ApplicationMaster进程。

[*] ApplicationMaster注册到ResourceManager:

[*]ApplicationMaster向ResourceManager注册自己,并开始请求更多资源。

[*] ApplicationMaster请求资源:

[*]ApplicationMaster根据应用步伐需求向ResourceManager请求更多Container来运行使命。

[*] ResourceManager分配Container给ApplicationMaster:

[*]ResourceManager将Container分配给ApplicationMaster,用于运行Map/Reduce使命或其他类型的使命。

[*] ApplicationMaster启动使命:

[*]ApplicationMaster在得到的Container中启动详细使命。

[*] 使命执行:

[*]Map/Reduce使命在NodeManager上执行,处理数据并将结果写入HDFS。

[*] 状态更新和进度陈诉:

[*]使命定期向ApplicationMaster陈诉进度,ApplicationMaster汇总后向ResourceManager陈诉。

[*] 完成作业:

[*]当所有使命完成后,ApplicationMaster清理工作并向ResourceManager注销自己。

[*] 关照客户端:

[*]ApplicationMaster告知客户端作业已完成。

思维导图结构化表现

YARN Work Mechanism
├── Architecture Components
│   ├── ResourceManager (RM)
│   │   └── 管理集群资源分配,启动和监控ApplicationMaster
│   ├── NodeManager (NM)
│   │   └── 节点上的代理,管理容器生命周期,监控节点健康状况
│   ├── ApplicationMaster (AM)
│   │   └── 请求资源并与NodeManager通信启动和监控任务
│   └── Container
│       └── 资源隔离环境,包含CPU、内存等资源
└── Work Flow
    ├── 客户端提交作业
    ├── ResourceManager分配Container给ApplicationMaster
    ├── 启动ApplicationMaster
    ├── ApplicationMaster注册到ResourceManager
    ├── ApplicationMaster请求资源
    ├── ResourceManager分配Container给ApplicationMaster
    ├── ApplicationMaster启动任务
    ├── 任务执行
    ├── 状态更新和进度报告
    ├── 完成作业
    └── 通知客户端
Java代码示例:提交YARN应用

以下是一个简化版的Java代码片断,演示了如何使用YARN API提交一个简朴的MapReduce作业。请留意,这只是一个框架性的示例,实际应用中需要实现详细的Mapper和Reducer逻辑。
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
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;

public class YarnAppSubmitter {

public static void main(String[] args) throws Exception {
    // 设置作业配置
    Configuration conf = new Configuration();
    Job job = Job.getInstance(conf, "word count");
    job.setJarByClass(YarnAppSubmitter.class);
   
    // 设置Mapper和Reducer类
    job.setMapperClass(TokenizerMapper.class);
    job.setReducerClass(IntSumReducer.class);

    // 设置键值对类型
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);

    // 设置输入输出路径
    FileInputFormat.addInputPath(job, new Path(args));
    FileOutputFormat.setOutputPath(job, new Path(args));

    // 提交作业并等待完成
    System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
这段代码展示了如何创建和配置一个MapReduce作业,并将其提交给YARN集群。TokenizerMapper和IntSumReducer是用户界说的Mapper和Reducer类,它们实现了详细的数据处理逻辑。如果您想相识更详细的代码实现,请提供更多的细节大概指定您想要相识的详细部分。
进一步优化和高级特性

对于更复杂的场景,您可以思量以下几点来进一步优化YARN应用步伐:


[*]调整资源配置:根据作业需求调整Container大小(如内存、CPU核心数),确保合理分配资源。
[*]启用压缩:对中间数据启用压缩可以减少磁盘I/O和网络传输的数据量。
[*]使用Combiner:如果大概的话,在Mapper端应用Combiner来预先汇总数据,从而减少传输到Reducer的数据量。
[*]配置调度器计谋:选择得当的调度器(如Capacity Scheduler或Fair Scheduler),并根据业务需求进行参数调优。
[*]管理数据当地性:尽量让计算靠近数据存储的位置执行,以减少网络传输开销。
这些优化措施可以帮助进步YARN应用步伐的性能和服从。如果您有特定的需求或遇到的题目,请提供更多细节以便给出更有针对性的建议。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Yarn工作机制?思维导图 代码示例(java 架构)