1 Star 1 Fork 0

陈桐 / mapreduce-go

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

自己实现MapReduce

作者:陈桐
参考:MIT 6.824 Lab1

简介

  1. 项目是对MIT 6.824 Lab1的完整实现
  2. MapReduce是Hadoop生态下的一个分布式计算框架
  3. MapReduce把任务的输入和输出分别看成是一组Key-Value
  4. MapReduce任务执行分为Map阶段和Reduce阶段
  5. Map阶段是对文件进行加载、切分等,输出中间结果文件
  6. Reduce阶段是对Map输出的中间结果文件进行处理,输出最终的结果文件
  7. 通过Master-Worker的模式进行工作
  8. Master负责任务调度、Worker负责任务的具体处理
  9. Master和Worker之间的通信采用RPC的方式

模块说明

模块 说明
call 封装RPC
common 公共模块
master 集群master实现
worker 集群worker实现
schedule worker调度模块

流程说明

  1. 指定输入文件、reduce并行处理数量
  2. 根据map分割规则,对文件进行切分
  3. map阶段并行任务数量由输入文件数量决定
  4. map阶段通过对key值进行hash取余写入到中间文件
  5. master轮询将任务分配给worker,进行负载均衡
  6. reduce阶段进行分片合并,输出到reduce结果文件中
  7. 由master进行最终合并,输出结果文件

测试

词频统计

  • main.go中提供了词频统计的案例

配置文件

config.json

{
  "job_name": "test",
  "master": "10.10.10.1:8000",
  "worker": [
    "10.10.10.1:8001",
    "10.10.10.1:8002",
    "10.10.10.1:8003"
  ],
  "in_file": [
    "./example/pg-being_ernest.txt",
    "./example/pg-dorian_gray.txt",
    "./example/pg-frankenstein.txt",
    "./example/pg-grimm.txt",
    "./example/pg-huckleberry_finn.txt",
    "./example/pg-metamorphosis.txt",
    "./example/pg-sherlock_holmes.txt",
    "./example/pg-tom_sawyer.txt"
  ],
  "n_reduce": 3,
  "random": {
    "n_number": 100,
    "count": 5,
    "rand_to": 30
  }
}

参数解释

参数名 解释 是否必填
job_name 任务名 ×
master master地址
worker worker地址
in_file 输入文件 ×
n_reduce reduce并行任务数量
random 生成随机测试数据 ×
参数名 解释 是否必填
n_number 数据量
count 文件数量
rand_to 随机数范围

注意事项

  1. example目录下提供了测试文档
  2. in_filerandom配置其中一项
  3. 若配置in_filerandom不生效
  4. 中间结果文件将生成在out目录下

空文件

简介

自己实现MapReduce 展开 收起
Go
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Go
1
https://gitee.com/stewiechen/mapreduce-go.git
git@gitee.com:stewiechen/mapreduce-go.git
stewiechen
mapreduce-go
mapreduce-go
master

搜索帮助