首页 > 其他分享 >Lab1 记录

Lab1 记录

时间:2024-08-25 18:29:34浏览次数:14  
标签:Map 记录 Worker Reduce 任务 Lab1 mr JobProcessingList

一、非并行版本分析

1.非并行版本MapReduce流程

  1. 通过第一个参数,传入Map和Reduce 函数
  2. 之后的参数为待处理文件名
  3. 读取文件
  4. 调用Map函数,对文件内容进行处理,生成KV对
  5. 对KV对进行sort
  6. 按照Key进行分组,然后对每组数据调用Reduce
  7. 将结果写入文件

二、Lab思路

概述:Worker向Coordinator申请任务

1. Coordinator

代码位置: mr/coordinator.go

结构体介绍

type Coordinator struct {
	nReduce int32
	stage   int32

	workerCnt int32

	reduceJobIds []int

	mapJobPendingList    *HashSet
	reduceJobPendingList *HashSet
	jobProcessingList    *HashSet
}
  1. 启动

    1. 启动时,设置Coordinator状态为Map,
    2. 初始化Job List,map Job的名字为文件名,reduce Job的名字为nReduce的编号
  2. 初始化Worker

    有新Worker来时,为其分配编号,并传回nReduce

  3. 分发任务

    Worker会定时请求任务

    1. JobPendingList中选取Job
    2. 将这个Job放入JobProcessingList
    3. 如果任务完成,将任务从JobProcessingList彻底删除
    4. 发送任务后,注册一个回调函数,如果10s后这个任务还在JobProcessingList,说明任务超时,通过回调函数将任务放回JobWaitingList
  4. 任务完成

    Worker任务完成时,将Job从List中删除

  5. 状态转换

    如果所有任务都已完成,

任务名就是文件名:

  • Map的任务名是输入文件名
  • Reduce的任务名是nReduce编号
  1. 分发任务

    Worker会定时发来任务请求,

    1. JobWaitingList中选取任务给他

    2. 将这个任务放入JobProcessingList

    3. 如果任务完成,将任务从JobProcessingList彻底删除

    4. 发送任务后,注册一个回调函数,如果10s后这个任务还在JobProcessingList,说明任务超时,通过回调函数将任务放回JobWaitingList

  2. JobWaitingListJobProcessingList皆为空时,意味着任务完成,Coordinator可以退出

  3. 只有当Map完成时,才可进行Reduce

    1. Map阶段

    2. Reduce阶段

Worker

代码地址:mr/worker.go

1.Map Worer

读取文件,调用Map函数处理,将结果按照Hash值分配到nReduce个文件

中间文件名mr-X-Y

  • X:Map编号
  • Y:Reduce编号

2.Reduce Worker

结果文件名:mr-out-X

  • X:Reduce编号

注:为应对两个Worker同时处理某个任务、以及任务失败时的情况,Worker创建文件时,为其添加特殊后缀,比如mr-X-Y创建为mr-X-Y_123456。在任务处理完成,向coordinate汇报时,修改回正确文件名mr-X-Y

结果

代码地址:

Github

测试结果

image-20240825175144678

标签:Map,记录,Worker,Reduce,任务,Lab1,mr,JobProcessingList
From: https://www.cnblogs.com/INnoVationv2/p/18379265

相关文章

  • [RT-Thread记录]DFS虚拟文件系统文件夹操作异常
    项目场景:系统:RT-Thread5.0.2硬件:STM32H743问题描述1.文件系统打开文件夹再关闭后,申请的内存没有释放2.elm-fatFs文件系统重复操作同一个文件夹,如复制,会引起系统崩溃原因分析:        DFS虚拟文件系统文件打开关闭逻辑错误,文件系统版本升级更新后,dfs_file结......
  • Aqua使用记录
    JavaKotlinGroovyPython建议使用Poetry环境Poetryexecutable:/Users/wan/Library/ApplicationSupport/pypoetry/venv/bin/poetry安装依赖包poetryaddpackage或者在.toml文件添加依赖包信息SeleniumwithPythonSelenium生成html测试报告,打开终端......
  • 基于nodejs+vueUhome记录生活[程序+论文+开题]-计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着科技的飞速发展,智能家居与数字化生活已成为现代家庭的新常态。在这样的背景下,"Uhome记录生活"应运而生,旨在通过构建一个集用户管理、家庭成员互动、家庭......
  • go免杀学习记录
    题记最近剑来动漫上线,虽然观感不如我的预期,感觉节奏过快。但是也是一种进步了,愿各位道友都能找到自己的宁姚。"我喜欢的姑娘啊,她眉如远山,浩然天下所有好看的山,好看的水,加起来都不如她。她睫毛轻颤的模样,落在了我的心里。那万年不动的剑气长城,都好像轻轻晃了晃。"  ......
  • 基于Android的运动记录APP设计与实现(论文+源码)_kaic
      摘要随着人们生活水平和生活质量的提高,人们越来越关注自己的身体健康。而跑步成为人们最受欢迎的运动方式,运动软件可以在人们锻炼身体的时候提供极大的帮助。本文针对运动轨迹和计步,设计一款基于Android平台的运动软件。本系统通过使用百度鹰眼、重力传感器和数据库技术......
  • AtCoder Beginner Contest 368 补题记录(A~D,F,G)
    被伟大的G创似辣。Asignedmain(){intn,k;cin>>n>>k;F(i,1,n)cin>>a[i];queue<int>stk;G(i,n,1)stk.push(a[i]);while(k--){intt=stk.front();stk.push(t);stk.pop();}stack<int>......
  • 使用Appium执行自动化测试遇到的问题记录
    ‌Appium‌是一个开源的移动端自动化测试框架,它支持原生的、混合的以及移动端的web项目测试,并且能够测试iOS和Android应用程序。在使用中有时会遇到问题,特此记录:问题一:设备:Android一加问题描述:adb连接成功,执行测试脚本时AppiumDesktopsession报如下错误:settingsdeleteg......
  • 机器视觉学习笔记和过程记录:下载安装OpenCv
    下载安装opencv1、本机已经安装了anaconda,打开对应的环境下的命令行窗口,输入python后回车,会显示python版本,本机是3.8.3:2、打开链接:Linksforopencv-python ,在网页中查找与python版本和操作系统对应的opencv版本: 本机python是3.8,系统是64位win10,所以选择opencv_python-3......
  • 【CUDA编程笔记】thrust::device_vector<float> signal无法编译问题记录
    thrust::device_vectorsignal无法编译问题记录CUDA编程笔记一、问题记录正常编译时,无法编译二、源码#include<thrust/host_vector.h>#include<thrust/device_vector.h>#include<thrust/generate.h>#include<thrust/sort.h>#include<thrust/copy.h>#includ......
  • C++ STL源码个人学习与分析记录 ——空间配置器(allocator)
    STL源码个人学习与分析记录——空间配置器(allocator)1.为什么需要空间配置器?2.SGI-STL空间配置器的实现2.1一级空间配置器:malloc_alloc_template2.2二级空间配置器:default_alloc_template2.2.1.内存池技术2.2.2.自由链表(free-list)2.2.3Union2.3二级空间配置器的......