`
shixiaomu
  • 浏览: 388942 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hadoop-map-reduce执行流程调研报告

 
阅读更多
hadoop-map-reduce执行流程调研报告
参与者:
Client       简称:C
JobTracker   简称:JT
TaskTracker  简称:TT
DataNode   简称:DN
NameNode  简称:NN
流程描述:
简述:
作业的提交 -> Map任务的分配和执行 -> Reduce任务的分配和执行 -> 作业的完成
每个具体的任务又分: 准备输入-> 算法的执行 -> 输出结果,三个步骤.
作业的提交:
     1. /home/hadoop/hadoop-1.0.3/bin/hadoo jar  ~/learning-hadoop.jar  com.easou.mr.bookMark.BookMarkMR
     2. RunJar.java  -> main
     3.反射 -BookMarkMR->main
     4. org.apache.hadoop.mapreduce.Job ->waitForCompletion
//提交
i f (state == JobState.DEFINE) {
submit();
}
     5. org.apache.hadoop.mapred.JobClient -> submitJobInternal
     6.
/data/tmp/core/mapred/staging/hadoop/.staging/jobid/job.jar(执行jar)
/data/tmp/core/mapred/staging/hadoop/.staging/jobid/job.split(输入分片文件)
/data/tmp/core/mapred/staging/hadoop/.staging/jobid/job.splitmetainfo(分片meta)
/data/tmp/core/mapred/staging/hadoop/.staging/jobid/job.xml(jobconf配置信息)
7.
this.jobSubmitClient = createRPCProxy(JobTracker.getAddress(conf), conf);

JobID jobId = jobSubmitClient.getNewJobId();//jobid的生成方式

public JobStatus submitJob(JobID jobId, String jobSubmitDir, Credentials ts) throws IOException

synchronized (jobs) {
      synchronized (taskScheduler) {
        jobs.put(job.getProfile().getJobID(), job);
        for (JobInProgressListener listener : jobInProgressListeners) {
          listener.jobAdded(job);
        }
      }
    }
Map reduce任务的分配和执行:
C rpc 调用 addJob 触发监听:
JobQueueJobInProgressListener(用于监控job的运行状态)

EagerTaskInitializationListener;(用于对Job进行初始化)

public void run() {
      JobInProgress job = null;
      while (true) {
        try {
          synchronized (jobInitQueue) {
            while (jobInitQueue.isEmpty()) {
              jobInitQueue.wait();
            }
            job = jobInitQueue.remove(0);
          }
          threadPool.execute(new InitJob(job));
        } catch (InterruptedException t) {
          LOG.info("JobInitManagerThread interrupted.");
          break;
        }
      }
      LOG.info("Shutting down thread pool");
      threadPool.shutdownNow();
}
    //后台守护运行
jobInitManagerThread.setDaemon(true);
    this.jobInitManagerThread.start();
死循环等待job加入,并初始化.


JT初始化task
JobInProgress -> initTasks  
1.从HDFS中读取job.split文件从而生成input splits
2.map task的个数就是input split的个数
numMapTasks = splits.length;
3.为每个map tasks生成一个TaskInProgress来处理一个input split
4.对于map task,将其放入nonRunningMapCache,是一个Map<Node, List<TaskInProgress>>,也即对于map task来讲,其将会被分配到其input split所在的Node上。nonRunningMapCache将在JobTracker向TaskTracker分配map task的时候使用。
5.创建reduce task
6.reduce task放入nonRunningReduces,其将在JobTracker向TaskTracker分配reduce task的时候使用。
6.创建两个cleanup task,一个用来清理map,一个用来清理reduce.
7.创建两个初始化 task,一个初始化map,一个初始化reduce.

TT:
1. 一直运行
2. 每隔一段时间就向JobTracker发送heartbeat
3. 在heartbeat中要返回给JobTracker一些统计信息, 报告给JobTracker,此TaskTracker的当前状态
4. 发送Heartbeat到JobTracker,得到response
5. 从Response中得到此TaskTracker需要做的事情
6. 如果是运行一个新的Task,则将Action添加到任务队列中
7. 当满足下面的条件的时候,此TaskTracker请求JobTracker为其分配一个新的Task来运行:
当前TaskTracker正在运行的map task的个数小于可以运行的map task的最大个数
当前TaskTracker正在运行的reduce task的个数小于可以运行的reduce task的最大个数
8. 向JobTracker发送RPC调用Heartbeat

JT 分配 task:


根据数据所处的位置与Task Tracker的距离,有如下几种data locality级别:
0     node-local    输入分片就在Task Tracker本地
1     rack-local     输入分片在Task Tracker所在的rack内其它Task Tracker上
2     off-switch    输入分片在其它的rack内

  1.先调度优先级高的作业,统一优先级的作业则先进先出;
  2.尽量使集群每一个TaskTracker达到负载均衡(这个均衡是task数量上的而不是实际的工作强度);
  3.尽量分配作业的本地任务给TaskTracker,但不是尽快分配作业的本地任务给TaskTracker,最多分配一个非本地任务给TaskTracker(一是保证任务的并发性,二是避免有些TaskTracker的本地任务被偷走),最多分配一个reduce任务;
  4..为紧急的Task预留一定的slot;

作业的完成:
Map Clean Up Task(Map任务服务器的清理任务,用于清理相关的过期的文件和环境...) -> Map Setup Task(Map任务服务器的安装任务,负责配置好相关的环境...) -> Map Tasks -> Reduce Clean Up Task -> Reduce Setup Task -> Reduce Tasks

流程图:
整体分配流程:







Map的具体流程





Reduce的具体流程




  • 大小: 67.1 KB
  • 大小: 58.3 KB
  • 大小: 52 KB
分享到:
评论

相关推荐

    实训商业源码-单个商品销售系统源码-毕业设计.zip

    实训商业源码-单个商品销售系统源码-毕业设计.zip

    基于KEALC编程的变压器智能温度监控系统设计与实现

    内容概要:本文详细介绍了基于KEALC编程的变压器温度实时检测与报警系统的开发过程。系统采用51单片机为核心控制器,利用DS18B20传感器测量变压器顶层油温和绕组温度,并通过LCD显示屏实时显示温度值。当温度超过设定阈值时,系统将触发报警机制,包括点亮LED灯和启动蜂鸣器。若温度达到危险水平,则自动切断继电器进行保护。文中还讨论了Proteus仿真的具体步骤、Altium Designer (AD)绘制电路图的注意事项以及实际部署中的优化措施。此外,文章强调了温度阈值的可配置性和防误报的设计思路。 适合人群:具有一定电子电路和嵌入式系统基础知识的技术人员,特别是从事电力设备维护和自动化控制系统开发的专业人士。 使用场景及目标:适用于需要对变压器温度进行精确监控的应用场合,确保变压器安全稳定运行,预防因温度过高引发的安全事故。目标是提供一种高效可靠的温度监控解决方案,保障电力设备的长期可靠运行。 其他说明:文中提供的代码片段展示了关键的报警逻辑和温度采集算法,有助于读者理解和实现类似项目。同时,文中提到的实际部署经验和优化建议对于提高系统的稳定性和可靠性具有重要指导意义。

    nacos-server-2.2.2.tar包及使用

    环境准备:Nacos 依赖 Java 环境运行,需确保安装了 64 位 JDK 1.8+。 解压安装包:在 Linux 系统中,使用命令 tar -zxvf nacos-server-2.2.2.tar.gz 解压到指定目录,如 /usr/local/nacos

    Advanced RF Board Skills in ADS.pdf

    Advanced RF Board Skills in ADS

    你好你好是多少多少多少多少多少

    你好你好是多少多少多少多少多少

    地球物理勘探基于MATLAB的射线追踪算法实现:地质结构正向建模与数据保存系统设计

    内容概要:本文档主要描述了一个基于MATLAB的射线追踪实验流程。首先定义了射线追踪结果的输出文件名为'synthetic_rays.mat',并加载了必要的观测点几何数据和正向模型数据。接着设置了射线追踪的相关参数,包括标志位、步长以及最大追踪步数等。然后通过调用mFAST_raytracing函数执行射线追踪操作,获取计算时间、成功索引和射线轨迹等结果。最后将射线追踪结果保存为.mat文件,并将射线传播时间分别保存为.mat文件和文本文件。; 适合人群:具备一定MATLAB基础,从事地质勘探、地球物理等相关领域的科研人员或学生。; 使用场景及目标:①进行地下结构成像研究;②模拟地震波传播路径;③验证正向模型准确性。; 阅读建议:此文档详细记录了射线追踪实验的具体步骤,在阅读时应重点关注参数设置部分,并结合实际应用场景调整相关参数值,同时注意保存结果的不同格式以满足不同需求。

    实训商业源码-城市生活服务分类手机页面模板-毕业设计.zip

    实训商业源码-城市生活服务分类手机页面模板-毕业设计.zip

    三菱FX5U PLC四轴定位控制系统设计与实现:涵盖参数设定、触摸屏集成及多模式控制

    内容概要:本文详细介绍了三菱FX5U PLC在四轴定位控制项目中的应用,涵盖了从参数设定到触摸屏程序整合的完整流程。首先,项目概述了使用三菱FX5U PLC作为核心控制器,负责四个轴的定位控制,并通过威纶通触摸屏实现人机交互。接下来,文章逐步讲解了公共参数设定、回原点功能、JOG手动控制、绝对和相对定位控制、多种控制模式(手动、自动、暂停)、IO表与电气选型清单、威纶通触摸屏程序开发以及电路图(EPLAN)绘制。每个环节都体现了PLC在工业自动化中的关键作用。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是那些需要深入了解PLC编程和四轴定位控制的人群。 使用场景及目标:适用于需要设计和实现四轴定位控制系统的工程项目,帮助工程师掌握PLC编程技巧,提高系统稳定性和精度。同时,也为实际项目提供了一个完整的参考模板。 其他说明:本文不仅提供了理论指导,还包括具体的实现细节和实例,有助于读者更好地理解和应用相关技术。

    蓝牙技术蓝牙4.2无线连接技术升级:速度、距离、功耗与安全性能提升及应用场景扩展综述

    内容概要:本文详细介绍了蓝牙4.2技术的发展背景、主要性能提升及其广泛应用场景。蓝牙技术自1994年由爱立信公司启动探索,经历了多个版本的迭代升级。蓝牙4.2在2014年底发布,在数据传输速度、传输距离、功耗和安全性能四个方面实现了显著提升,最大传输速度达到2.5Mbps,传输距离扩展到50米,功耗进一步降低,并引入了AES-CCM算法和数字签名等安全功能。这些改进使得蓝牙4.2在智能穿戴设备、智能家居、物联网等多个领域得到广泛应用。此外,文章还对比了蓝牙4.2与蓝牙4.0、蓝牙5.0及更高版本的差异,指出了如何挑选合适的蓝牙4.2设备,并展望了其未来在智能家居、工业物联网、虚拟现实等领域的应用前景。; 适合人群:对无线通信技术感兴趣的科技爱好者、智能家居和物联网从业者、以及希望了解蓝牙技术发展历程和最新进展的普通用户。; 使用场景及目标:①了解蓝牙技术的历史和发展趋势;②掌握蓝牙4.2相较于其他版本的具体改进;③学习如何根据需求选择合适的蓝牙4.2设备;④探索蓝牙4.2在不同领域的应用潜力。; 其他说明:蓝牙4.2虽然在某些性能上不如后续版本,但在许多对性能要求适中的场景中仍具有重要地位。未来,蓝牙4.2将继续在智能家居、工业物联网等领域发挥重要作用,并随着技术进步不断拓展新的应用场景。

    .1- 2025-5-09

    .1- 2025-5-09

    【嵌入式系统】STM32F407ZET6 GPIO接口详解:输入输出模式与应用实例介绍文档的主要内容

    内容概要:本文档详细介绍了STM32F407ZET6的GPIO(通用输入输出接口)。GPIO在输出模式下能控制端口输出高低电平,适用于驱动LED、控制蜂鸣器等;在输入模式下可读取端口的高低电平或电压,如读取按键输入、ADC电压采集等。每个通用I/O端口包含多个32位配置寄存器、数据寄存器等。文档列举了GPIO的八个功能模式,重点解析了输出状态中的推挽输出和开漏输出,以及输入状态中的下拉电阻和上拉电阻的概念与工作原理。推挽输出可输出高低电平,由两个互补的晶体管提供较大电流驱动;开漏输出通常只能输出低电平,适合电平转换。输入状态方面,下拉电阻将信号初始化为低电平,上拉电阻则初始化为高电平,其本质分别是输出和注入电流。; 适合人群:嵌入式系统开发人员、电子工程师、对STM32微控制器有兴趣的学习者。; 使用场景及目标:①帮助开发者理解STM32F407ZET6的GPIO工作机制;②为实际项目中GPIO的应用提供理论指导,如控制外部设备、读取传感器数据等。; 其他说明:文档提供了详尽的寄存器配置信息和功能模式介绍,有助于深入理解和灵活运用GPIO接口。建议读者结合实际硬件操作进行学习,以加深理解。

    PHP编程PHP语言教程与项目实战:从基础语法到进阶开发全流程指南

    内容概要:本文全面介绍了PHP语言,涵盖从基础知识到项目实战的多个方面。首先概述了PHP的特点及其在Web开发领域的应用,接着详细讲解了环境搭建的方法,包括Web服务器、PHP安装和数据库配置。文档深入浅出地阐述了PHP的基础语法,如变量、数据类型、控制结构、函数和数组操作。通过用户登录系统和数据展示页面两个实战案例,展示了PHP在实际项目中的应用,涉及数据库交互、会话管理和页面渲染。进一步探讨了进阶项目的开发流程,强调了需求分析、技术选型、MVC模式的重要性,并介绍了部署与优化的技巧。最后,推荐了主流框架(如Laravel、Symfony)、开发工具以及学习资源,帮助读者提升PHP开发技能。 适合人群:初学者以及有一定编程经验、希望深入学习PHP的开发者。 使用场景及目标:①快速搭建PHP开发环境,掌握PHP基础语法;②通过实战案例理解PHP在Web开发中的具体应用;③学习项目开发流程,提高代码质量和开发效率;④了解PHP框架和工具,拓宽技术视野。 阅读建议:阅读时应结合实际操作练习,按照文档步骤搭建环境、编写代码,同时参考提供的学习资源,逐步深入理解PHP的各项特性。

    智能车竞赛学习资料:机器人操作系统ROS原理与应用.pdf

    智能车竞赛学习资料:机器人操作系统ROS原理与应用.pdf

    实训商业源码-WordPress主题-图片摄影作品展示自适应主题-毕业设计.zip

    实训商业源码-WordPress主题-图片摄影作品展示自适应主题-毕业设计.zip

    小程序 叮咚活动报名高级版V5.2.8+前端.zip

    叮咚活动报名高级版小程序V5.2.8 前端 版本号:5.2.8 – 普通版 备注:需要重新上传小程序 1、修复票券上地址显示错误问题 2、修复其他小的BUG

    威纶通MT6103IP触摸屏与台达VFD-M变频器Modbus RTU通讯实现及操作指南

    内容概要:本文详细介绍了威纶通MT6103IP触摸屏与两台台达VFD-M变频器通过Modbus RTU进行通讯的具体实现方法和操作步骤。首先讲解了硬件连接方式,强调了正确的接线对于确保通讯正常的重要性。接着阐述了通讯参数的设置,包括波特率、数据位、停止位以及校验方式的选择,并指出这些参数在所有设备间的一致性至关重要。随后提供了具体的编程实例,如读取运行频率和发送启动命令的关键代码片段,同时解释了Modbus地址到实际寄存器地址之间的转换规则。此外还讨论了一些常见的调试技巧,例如解决RS485信号衰减的方法,在触摸屏界面上添加通讯状态监测等功能,以及针对台达变频器特有的参数写入机制进行了说明。 适用人群:工业自动化领域的工程师和技术人员,特别是那些负责PLC编程、人机界面(HMI)开发以及现场设备维护工作的专业人士。 使用场景及目标:适用于希望深入了解并掌握如何将威纶通触摸屏与台达变频器集成在一起的应用场合。主要目的是帮助用户顺利完成两者间的通信配置,确保能够可靠地监控和控制变频器的工作状态。 其他说明:文中不仅包含了理论性的指导,还有大量实用的操作提示和经验分享,有助于提高工作效率,减少调试过程中可能出现的问题。

    MATLAB R2019a中两级式三相LCL并网逆变器谐振抑制策略的Simulink仿真研究

    内容概要:本文详细介绍了基于MATLAB R2019a的两级式三相LCL并网逆变器谐振抑制策略的Simulink仿真研究。首先,文中描述了系统的整体架构,包括前级BOOST升压电路配合扰动观察法MPPT实现最大功率跟踪控制,以及后级三相桥式逆变器中LCL滤波器采用无源或有源阻尼的方法。接着,针对LCL滤波器容易出现的谐振问题,提出了双闭环控制策略,即电压外环和电流内环控制,确保直流侧电压稳定并实现单位功率因数控制。此外,还探讨了不同阻尼方式的效果,如无源阻尼导致约1.5%的效率损失,而有源阻尼则通过虚拟阻抗实现更好的性能。最后,通过PWM生成模块中的死区补偿进一步优化了系统性能,使得总谐波失真(THD)控制在1.5%以内,远低于国家标准。 适合人群:电力电子工程师、科研人员、高校师生等对并网逆变器及其谐振抑制策略感兴趣的群体。 使用场景及目标:适用于需要进行并网逆变器设计与仿真的场合,旨在解决LCL滤波器带来的谐振问题,提高并网质量,降低THD值,满足并网标准。 其他说明:文中提供了具体的MATLAB/Simulink代码片段和参数设置,有助于读者理解和复现实验结果。同时提醒实际硬件调试时还需考虑更多因素,如采样延时、开关管非线性等。

    COMSOL模拟铌酸锂波导倍频PPLN技术解析及实操经验分享

    内容概要:本文详细介绍了利用COMSOL进行铌酸锂波导倍频(PPLN)仿真的方法和技术难点。首先讨论了材料设置中非线性系数d33的空间调制方式,推荐使用tanh函数代替sign函数以提高收敛性。接着阐述了波导结构的选择和模式分析的关键步骤,强调了正确设置边界条件的重要性。对于网格划分提出了在极化周期交界处局部加密的方法,并解释了分步求解策略以节省内存。最后,作者提醒注意相位匹配条件以及考虑实际器件制造中的工艺误差对转换效率的影响。 适合人群:从事非线性光学研究、光子学器件设计的研究人员和工程师。 使用场景及目标:帮助读者掌握COMSOL软件中针对PPLN结构的仿真技巧,优化仿真流程,提升仿真准确性,解决实际项目中可能遇到的问题。 阅读建议:由于文中涉及大量具体的操作细节和技术要点,建议读者结合自己的项目背景仔细研读每个部分的内容,并尝试将所学应用到实践中去。

    FLAC3D边坡地震模型:自由场边界下瑞利阻尼与阪神、鲁甸地震波应用

    内容概要:本文详细介绍了利用FLAC3D软件进行边坡地震响应模拟的方法。首先,明确了模型的目标和准备工作,包括设定边坡的几何形状和材料属性,并采用自由场边界条件以更好地模拟地震波的传播。接着,引入瑞利阻尼来模拟能量耗散,提高模拟的真实性。然后,通过输入阪神地震波和鲁甸波等实际地震数据,展示了不同地震波对边坡响应的影响。最后,进行了代码实现和简单分析,探讨了边坡在地震作用下的位移变化和应力分布,并进行了敏感性分析。 适合人群:从事地质工程、地震工程及相关领域的研究人员和工程师。 使用场景及目标:适用于需要深入了解边坡地震响应机制的研究项目,以及希望通过模拟优化边坡设计和提高抗震性能的实际工程项目。 其他说明:本文不仅提供了具体的建模步骤和代码实现,还强调了参数选择对模拟结果的重要影响,鼓励读者进行更多实验和探索。

    MATLAB环境下基于变分模态分解与Cramer von Mises检验的时间序列信号降噪方法及其应用

    内容概要:本文探讨了一种创新的信号降噪方法,该方法结合了变分模态分解(VMD)和Cramer von Mises检验,在MATLAB R2018a环境中实现了对一维时间序列信号的有效降噪。文中详细介绍了算法的工作流程,从数据准备到最终的降噪处理,包括VMD分解和Cramer von Mises检验的具体步骤。此外,还提供了简化的MATLAB代码示例,帮助读者理解其实现方式。该方法适用于多种类型的信号,如金融时间序列、地震信号、机械振动信号等,展现了广泛的应用潜力。 适合人群:从事信号处理、数据分析的研究人员和技术人员,尤其是那些对MATLAB有一定了解并希望提升信号降噪效果的专业人士。 使用场景及目标:本方法旨在解决一维时间序列信号中存在的噪声问题,提高信号质量,增强数据的可用性和准确性。适用于金融、地质、机械工程、生物医学等领域的一维时间序列信号处理任务。 其他说明:文中提供的代码片段仅作示例,实际应用时需根据具体情况调整参数设置和处理逻辑。建议结合最新文献和官方文档深入学习VMD和Cramer von Mises检验的相关知识。

Global site tag (gtag.js) - Google Analytics