hadoop之yarn事件驱动模型

本文介绍了Hadoop YARN中采用的事件驱动模型,通过简化代码来帮助理解其工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

YRAN编程有很多地方采用了事件驱动模型,把代码简化,方便理解它。


1.定义一个事件:

import org.apache.hadoop.yarn.event.AbstractEvent;

public class TaskEvent extends AbstractEvent<TaskEventType> {
	
	private String taskID;
	
	public TaskEvent(String taskID, TaskEventType type) {
		super(type);
		this.taskID=taskID;
	}

	public String getTaskID() {
		return taskID;
	}

}


2.这个事件有2个类型:
public enum TaskEventType {
	T_KILL,
	T_SCHEDULE
}


3.定义一个调度器,测试代码也写进去:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.service.CompositeService;
import org.apache.hadoop.service.Service;
import org.apache.hadoop.yarn.conf.YarnConfiguration;
import org.apache.hadoop.yarn.event.AsyncDispatcher;
import org.apache.hadoop.yarn.event.Dispatcher;
import org.apache.hadoop.yarn.event.EventHandler;
										
public class SimpleMRAppMaster extends CompositeService {//单事件服务可以继承AbstractService,该如何使用?

	private Dispatcher dispatcher;
	
	public Dispatcher getDispatcher() {
		return dispatcher;
	}
	
	public SimpleMRAppMaster(String name) {
		super(name);
	}

	@Override
	protected void serviceInit(Configuration arg0) throws Exception {
		dispatcher = new AsyncDispatcher();
		dispatcher.register(TaskEventType.class, new TaskEventDisptacher());
		addService((Service)dispatcher);
		super.serviceInit(arg0);
	}
	
	private class TaskEventDisptacher implements EventHandler<TaskEvent>{

		@Override
		public void handle(TaskEvent arg0) {
			if(arg0.getType() == TaskEventType.T_KILL){
				System.out.println("run kill");
			}else if(arg0.getType() == TaskEventType.T_SCHEDULE){
				System.out.println("run schedule");
			}
		}
		
	}
	
	//测试入口
	public static void main(String[] args) throws Exception {
		SimpleMRAppMaster   master =  new SimpleMRAppMaster("SimpleMRAppMaster");
		YarnConfiguration conf = new YarnConfiguration();
		master.serviceInit(conf);
		master.serviceStart();//必须是子类才可以调用,所以main方法写入这个类里面,main方法写入其他类,需要反射。
//		master.init(conf);  这2组方法测试效果貌似一样,
//		master.start();     有空去看下API解释
		master.getDispatcher().getEventHandler().handle(new TaskEvent("task1",TaskEventType.T_SCHEDULE));
		master.getDispatcher().getEventHandler().handle(new TaskEvent("task1",TaskEventType.T_KILL));
	}
}

还有些问题,没有弄明白,先做一个记录吧。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值