hadooper-深入hadoop的调度器

2024-04-14 19:48
文章标签 深入 hadoop 调度 hadooper

本文主要是介绍hadooper-深入hadoop的调度器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Hadoop有两个大版本

0.20.x,1.x通常为hadoop 1版本,运行环境依赖JobTracker和TaskTracker,运行资源通过作业表示模型MapTask和ReduceTask来组成;运行资源通过槽位Slot来表示。

0.23.x,2.x称之为hadoop 2版本,在开发模型上类似1,都有新旧两套MapReduce API来完成;针对JobTracker的职责有YARN来管理;包括

a:资源管理 ResourceManager ,以及NodeManager

b:作业调度 ApplicationManager,跟RM协商获取应用所需资源,与NM合作完成执行和监控TASK的任务。

针对资源的管理在这里不做过多分析,重点分析作业调度,这个是Hadoop的核心中枢。

Hadoop1代中的调度器

TaskScheduler,JobTracker,TaskTracker

这里需要关注:JobTracker和TaskTracker直接的交换机制通过heartbeat

heartbeat

TaskTracker周期性(默认为3s)调用RPC向JobTracker汇报信息,形成heartbeat

汇报信息包括TaskTracker状态信息、Task运状况等.

同事关注资源的划分单位:Slot
分为map slot和reduce slot两种
由参数mapred.tasktracker.[map|reduce].tasks.maximum设置

调度器的作业流程:

1:首先client通过submitJob提交作业未JobTracker

2:JobTracker通知TaskScheduler,有新的Job提交作业了

3:TaskScheduler开始初始化作业

4:JobTracker跟TaskTracker通过heartbeat获取具体的TaskTracker的资源情况,获取TaskTrackerStatus.

当然如果一个TaskTracker空闲时,也主动申请JobTracker分配任务;

5:JobTracker根据自己对资源的管理情况,请求TaskScheduler分配作业,TaskScheduler根据对应的资源情况和任务数,分配作业列表

6:JobTracker收到分配的作业列表,再通过HeartBeat将任务下发给具体的TaskTracker.

7:TaskTracker执行作业。

Hadoop的作业包括三个层次:

a:JobInProgress

b:TaskInProgress

c:TaskAttempt

Hadoop的调度包括三级调度

空闲的slot依次选择一个队列、作业和任务。

Queue:用户被划分到某个队列,每个队列分配一定的资源

Job:具体的一个Map/Reduce Job,关注提交时间和优先级

Task:通常具体的一个MapTask,ReduceTask,只在本地执行。

Hadoop已有的调度器

FIFO 批处理调度器 按到达时间排序,先来先服务
Capacity Scheduler 多用户调度器 根据用户分配不同的队列,在每个队列里面根据FIFO来处理
Fair Scheduler 多用户调度器 按照缺额排序,缺额大者优先,保证各个队列直接的负载均衡。

基于最小资源量(min share)与公平共享量(fair share)进行调度,作业优先级越高,分配到的资源越多

自己定制调度器

步骤1 编写JobInProgressListener
步骤2 编写调度器类,继承抽象类TaskScheduler
步骤3 配置并启用Hadoop调度器

abstract class JobInProgressListener {
public abstract void jobAdded(JobInProgress job) throws IOException; //添加Job
public abstract void jobRemoved(JobInProgress job); //删除Job
public abstract void jobUpdated(JobChangeEvent event); //响应JobUpdate
}

实现JobInProgressListener

class CustomerJobListener extends JobInProgressListener {
private List<JobInProgress> jobQueue = new ArrayList<JobInProgress>();

public void jobAdded(JobInProgress job) {
synchronized (jobQueue) {
jobQueue.add(job);
tt.initJob(job);
sortJobs();
}
}

public void jobRemoved(JobInProgress job) {
synchronized (jobQueue) {
jobQueue.remove(job);
}
}

}

实现调度器

TaskScheduler的抽象方法

public abstract List<Task> assignTasks(TaskTrackerStatus taskTracker) throws IOException;

实现TaskScheduler

public class CustomerScheduler extends TaskScheduler {
private CustomerJobListener customerJobListener;

public void start() {
this.customerJobListener = new CustomerJobListener();
this.customerJobListener.setTaskTrackerManager(taskTrackerManager );
taskTrackerManager.addJobInProgressListener(customerJobListener);
}

public synchronized List<Task> assignTasks(TaskTrackerStatus tracker) throws IOException {
if(customerJobListener.getJobs().size() > 0)
JobInProgress job = customerJobListener.getJobs().get(0);
return job.obtainNewMapTask(…);
}

}

配置TaskScheduler

(1)在mapred-site.xml中配置
<property>
<name>mapred.jobtracker.taskScheduler</name>
<value>org.apache.hadoop.mapred.CustomerScheduler</value>
</property>
(2)重新启动mapreduce或者jobtracker
bin/start-mapred.sh
bin/hadoop-daemon.sh start jobtracker

这篇关于hadooper-深入hadoop的调度器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/903856

相关文章

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的

深入理解Redis大key的危害及解决方案

《深入理解Redis大key的危害及解决方案》本文主要介绍了深入理解Redis大key的危害及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、背景二、什么是大key三、大key评价标准四、大key 产生的原因与场景五、大key影响与危

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

hadoop开启回收站配置

开启回收站功能,可以将删除的文件在不超时的情况下,恢复原数据,起到防止误删除、备份等作用。 开启回收站功能参数说明 (1)默认值fs.trash.interval = 0,0表示禁用回收站;其他值表示设置文件的存活时间。 (2)默认值fs.trash.checkpoint.interval = 0,检查回收站的间隔时间。如果该值为0,则该值设置和fs.trash.interval的参数值相等。

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3