做网站的注意点,wordpress 群站,网站如何做词,免费精准客户软件MapReduce MapReduce思想实现思路感受 6.5840/6.824 Lab与笔记汇总 本文对应的Lab版本为MIT6.5840-Spring2024的Lab1 本博客只提供思路#xff0c;不会公开任何代码 本lab耗时约6h#xff0c;码量约500行
MapReduce思想
MapReduce的思想属于是比较简单的#xff0c;分为两… MapReduce MapReduce思想实现思路感受 6.5840/6.824 Lab与笔记汇总 本文对应的Lab版本为MIT6.5840-Spring2024的Lab1 本博客只提供思路不会公开任何代码 本lab耗时约6h码量约500行
MapReduce思想
MapReduce的思想属于是比较简单的分为两个阶段 Map阶段将用户指定的输入文件通常存放于分布式文件系统中不过本Lab使用本地文件系统来代替利用用户编写的map函数将输入文件拆分为keyvalue形式输出到若干个中间文件中这些中间文件存放在map函数所运行的机器中假设后面运行reduce函数的worker有nReduce个那么每个运行map函数的worker就需要把拆分出来的kv对分为nReduce个中间文件来存放可在key上做hash来划分kv对到对应的中间文件中 Reduce阶段将中间文件读取出来并按照key进行排序然后调用用户提供的reduce函数将相同key的所有value进行聚合最后输出到文件中。假设存在nReduce个reduce任务那么最后会产生nReduce个输出文件。 MapReduce框架中存在一个coordinator论文里也叫master用于协调map任务与reduce任务同时需要考虑任务crash的问题重启任务。
实现思路
代码主要分为两部分coordinator.go和worker.go coordinator主要用于回应worker的rpc请求分为两种请求分配任务与任务反馈。coordinator需要维护每一个任务的状态可使用map当收到分配任务的请求时它找出一个未完成的任务并分配给worker也是通过rpc指定该任务的类型并传输所需参数当收到worker的任务反馈时判断任务是否成功并更新任务状态。 同时coordinator需要监控worker如果一个worker超过10s还没有回复那么认为该worker已经crash了需要重新分配这个worker所运行的任务。 worker则是打工人需要不断询问coordinator是否有任务做对于map任务与reduce任务进行不同的逻辑处理按照MapReduce框架的思想进行实现就可以了。
感受
第一次使用go2小时就可以速成变量声明与赋值都很方便像python但它是类型安全的编译型语言不会产生运行时的类型错误写起来非常方便。同时不像C一样需要内存管理因为存在gc机制。 当然目前看到的只是冰山一角还需要继续深入学习思考。