Mapreduce核心知识点

MapReduce核心知识点

一、基本概念
  1. 编程模型:分布式计算框架,用于处理海量数据
  2. 核心思想
    • 分而治之:将任务分解为$Map$和$Reduce$两个阶段
    • 数据本地化:计算节点靠近数据存储位置
二、核心组件

$$Map(k1, v1) → list(k2, v2)$$ $$Reduce(k2, list(v2)) → list(v3)$$

组件功能描述
InputFormat数据分片与解析
Mapper处理原始数据生成中间键值对
Partitioner确定中间结果分配到哪个Reducer
Combiner本地Reduce操作(可选优化)
三、工作流程
  1. 输入分片:将输入数据划分为$block_size=128MB$的块

  2. Map阶段

    # 伪代码示例
    def map(key, value):
        for word in value.split():
            emit(word, 1)
    

  3. Shuffle阶段:网络传输中间结果,执行归并排序

  4. Reduce阶段

    def reduce(key, values):
        total = sum(values)
        emit(key, total)
    

四、关键特性
  1. 横向扩展:通过增加节点提升计算能力
  2. 容错机制
    • 心跳检测(Heartbeat)
    • 任务重试(Task Retry)
  3. 数据流优化
    • 数据压缩:减少网络传输量
    • 推测执行(Speculative Execution)
五、典型应用场景
  1. 词频统计(Word Count)
  2. 网页索引构建
  3. 日志分析
  4. 机器学习特征处理
六、性能优化公式

$$总时间 = max(map_time) + shuffle_time + max(reduce_time)$$

七、优缺点分析

优势

  • 自动并行化处理
  • 隐藏分布式系统细节

局限

  • 不适合迭代计算
  • 中间结果写磁盘影响性能
八、代码实现示例(伪代码)
# Map函数
def mapper(line):
    for word in line.split():
        yield (word, 1)

# Reduce函数        
def reducer(word, counts):
    yield (word, sum(counts))

九、扩展知识
  1. 任务调度:采用Master-Worker架构
  2. 计数器:统计全局事件
  3. 数据倾斜处理
    • 使用Combiner预聚合
    • 自定义分区策略

注:实际工程实现建议参考Hadoop、Spark等框架的具体实现细节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值