hadoop中slot简介(map slot 和 reduce slot)

Slots是Hadoop的一个重要概念。然而在Hadoop相关论文,slots的阐述难以理解。网上关于slots的概念介绍也很少,而对于一个有经验的Hadoop开发者来说,他们可能脑子里已经理解了slots的真正含义,但却难以清楚地表达出来,Hadoop初学者听了还是云里雾里。我来尝试讲解一下,以期抛砖引玉。

首先,slot不是CPU的Core,也不是memory chip,它是一个逻辑概念,一个节点的slot的数量用来表示某个节点的资源的容量或者说是能力的大小,因而slot是
Hadoop的资源单位。

Hadoop利用slots来管理分配节点的资源。每个Job申请资源以slots为单位,每个节点会确定自己的计算能力以及memory确定自己包含的slots总量。当某个Job要开始执行时,先向JobTracker申请slots,JobTracker分配空闲的slots,Job再占用slots,Job结束后,归还slots。每个TaskTracker定期(例如淘宝Hadoop心跳周期是5s)通过心跳(hearbeat)与Jobtracker通信,一方面汇报自己当前工作状态,JobTracker得够某个TaskTracker是否Alive;同时汇报自身空闲slots数量。JobTracker利用某个调度规则,如Hadoop默认调度器FIFO或者Capacity
Scheduler、FairScheduler等。(注:淘宝Hadoop使用云梯调度器YuntiScheuler,它是基于Fair Scheduler进行修改的)。

Hadoop里有 两种slots, map slots和reduce slots,map
task使用map slots,一一对应,reduce task使用reduce slots。注: 现在越来越多的观点认为应该打破map slots与 reduce slots的界限,应该被视为统一的资源池,they are all resource,从而提高资源的利用率。区分map
slots和reduce slots,容易导致某一种资源紧张,而另一个资源却有空闲。在Hadoop的下一代框架MapR中,已经取消了map
slots与reduce slots的概
,并将Jobtracker的功能一分为二,用ResourceManager来管理节点资源,用ApplicationMaster来监控与调度作业。ApplicationMaster是每个Application都有一个单独的实例,application是用户提交的一组任务,它可以是一个或多个job的任务组成。

Hadoop中通常每个tasktracker会包含多个slots,Job的一个task均对应于tasktracker中的一个slot。系统中map slots总数与reducer slots总数的计算公式如下:

Map slots总数=集群节点数×mapred.tasktracker.map.tasks.maximum

Reducer slots总数=集群节点数×mapred.tasktracker.reduce.tasks.maximum

本文出自 “点滴积累” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077/1697269

时间: 2024-08-01 13:30:25

hadoop中slot简介(map slot 和 reduce slot)的相关文章

深度分析如何在Hadoop中控制Map的数量

很多文档中描述,Mapper的数量在默认情况下不可直接控制干预,因为Mapper的数量由输入的大小和个数决定.在默认情况下,最终input占据了多少block,就应该启动多少个Mapper.如果输入的文件数量巨大,但是每个文件的size都小于HDFS的blockSize,那么会造成启动的Mapper等于文件的数量(即每个文件都占据了一个block),那么很可能造成启动的Mapper数量超出限制而导致崩溃.这些逻辑确实是正确的,但都是在默认情况下的逻辑.其实如果进行一些客户化的设置,就可以控制了.

Hadoop中通过ToolRunner和Configured实现直接读取命令行动态出入reduce task数量,jar文件等

一个典型的实现Tool的程序: /** MyApp 需要从命令行读取参数,用户输入命令如, $bin/hadoop jar MyApp.jar -archives test.tgz  arg1 arg2 -archives 为hadoop通用参数,arg1 ,arg2为job的参数 */ public class MyApp extends Configured implements Tool {          //implemet Tool's run          public in

Java FP: Java中函数式编程的Map和Fold(Reduce)

原文链接 作者:  Cyrille Martraire  译者: 李璟(jlee381344197@gmail.com) 在函数式编程中,Map和Fold是两个非常有用的操作,它们存在于每一个函数式编程语言中.既然Map和Fold操作如此强大和重要,但是Java语言缺乏Map和Fold机制,那么该如何解释我们使用Java完成日常编码工作呢?实际上你已经在Java中利用手动编写循环的方式实现了Map和Fold操作(译者注:许多动态语言如python都提供了内置的实现). 免责声明:本篇文章仅仅只是

《深入理解Hadoop(原书第2版)》——第2章 Hadoop中的概念 2.1 Hadoop简介

第2章 Hadoop中的概念 价格实惠的普通计算机经常满足不了应用程序的计算资源需求,很多企业的业务应用程序已经不再适合在单台廉价的计算机上运行.这时,一个简单昂贵的解决方案就是购买一些具有多CPU的高端服务器,这通常需要巨额资金.只要能买到最高端的服务器,这个解决方案就能够达到理想的效果,但预算往往是个大问题.另一个替代方案,就是搭建一个高可用的集群,这个集群经过专业的安装和精心的管理服务,使用起来就像一台计算机一样.很多高可用的集群都是企业专有的而且价格也十分贵. 为了获取所需的计算资源,一

hadoop中map处理多行数据,可以满足用于算法模型的输入。

问题描述 hadoop中map处理多行数据,可以满足用于算法模型的输入. 在分布式平台做算法研究,遇到一个map处理文件是以行为单位.怎么使map可以 读取多行数据然后可以在map中进行算法模型的训练. 以下是我的尝试: 1:NLineInputFormat 不行,还是单行输出数据. 2:重写 InputFormat函数. 数据集没有具体的切分标志,只能说一个map处理 100或200行数据.没有类似 {} " " -- 的切分标志. 解决方案 你重写函数后也总要有一个规则来定义你的m

Hadoop中的Context使用

Hadoop中的Context使用.简要截取: 本文以经典的wordcount程序为例来说明context的用法: 直接上代码: package MapReduce; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FileSystem; import

hadoop中OutputFormat 接口的设计与实现

OutputFormat 主要用于描述输出数据的格式,它能够将用户提供的 key/value 对写入特定格式的文件中. 本文将介绍 Hadoop 如何设计 OutputFormat 接口 , 以及一些常用的OutputFormat 实现. 1.旧版 API 的 OutputFormat 解析 如图所示, 在旧版 API 中,OutputFormat 是一个接口,它包含两个方法: RecordWriter<K, V> getRecordWriter(FileSystem ignored, Job

hadoop中combine,partition和shuffle的疑问

问题描述 hadoop中combine,partition和shuffle的疑问 这是我理解的hadoop函数调用过程,但还是有点疑惑,比如:每个map函数输出都调用一个partition函数(图中为此方式)还是一个partition函数处理所有的map输出,如果图中的过程正确,那么shuffle函数调用发生在哪里? 解决方案 http://dongxicheng.org/mapreduce/hadoop-shuffle-phase/ 解决方案二: 本图画得有问题,首先partitioner函数

4种常用压缩格式在Hadoop中的应用

目前在Hadoop中用得比较多的有lzo,gzip,snappy,bzip2这4种压缩格式,笔者根据实践经验介绍一下这4种压缩格式的优缺点和应用场景,以便大家在实践中根据实际情况选择不同的压缩格式. 1 gzip压缩 优点:压缩率比较高,而且压缩/解压速度也比较快;hadoop本身支持,在应用中处理gzip格式的文件就和直接处理文本一样;有hadoop native库;大部分linux系统都自带gzip命令,使用方便. 缺点:不支持split. 应用场景:当每个文件压缩之后在130M以内的(1个