MapReduce

MapReduce

  • MapReduce它是属于并发计算,MapReduce是一个海量数据分流处理技术,自身是基于hadoop平台

###传统Hash应用 流量分发

  • 选择key对象(cookie、随机值等)
  • Hash() % max

  • 对应到不同机器

  • 一致性哈希算法设计目标是为了解决英特网中的热点(hot spot)问题

  • 分而治之 最基本的海量技术思想
    • 大数据两—按数据划分

      • 早起搜索引擎中的网页存储系统,单机存储数千万网页,几十亿的网页需要通过几百台单机服务器存储,url为key
      • 分布式文件系统,按block(64-256M)来话费组织文件
    • 大流量—按流量划分

      • 覆盖的大流量互联网服务
      • 南方流量分到电信机房,北方流量分到联通机房
      • 搜索引擎将query作为key来划分
    • 大计算—按输入数据,划分计算任务

      • MapReduce按输入数据来划分

###云计算技术难点

  • 单机系统变为分布式集群系统
  • 稳定性和容错能力
  • 数据一致性
    • 弱一致
    • 强一致
  • 难点:
    • 任何消息存在丢失的可能
    • 任何单机存在故障的风险

MapReduce简介

  • MapReduce是一个用于处理海量数据的分布式计算框架
  • 解决:
    • 数据分布式存储
    • 作业调度
    • 容错
    • 机器间通信等复杂问题
  • HDFS
    • 系统可靠性
    • 可扩展性
    • 并发处理
  • MapReduce分治思想
    • 分治思想
      • 分解
      • 求解
      • 合并
    • MapReduce映射
      • 分:map
        • 把负责的问题分解为若干“简单的任务”
      • 合:reduce

###MapReduce计算框架-执行流程

  • inputFormat :
    • 从HDFS数据读取、数据切分

  • 归并排序:
    A
  • buffer in memory : 默认100M,写到80M就开始往硬盘写
  • merge on disk: 使用到归并排序

编程模型

  • 借鉴函数式的编程方式
  • 用户只需要实现两个函数接口
    • Map(in_key,in_value)
      • -> (out_key,intermediate_value)list
    • Reduce(out_key,intermediate_value list)
      • ->out_value list

两个重要的进程

  • JobTracker
    • 主进程,负责接收客户作业提交,调度任务到作业节点上运行,并提供诸如监控工作节点状态及任务进度等管理功能,一个MapReduce集群有一个Jobtracker,一般运行在可靠的硬件上
    • tasktracker是通过周期性的心跳来通知jobtracker其当前的健康状态,每一次心跳包含了可用的map和reduce任务数目,占用的数目以及运行中的任务详细信息,Jobtracker利用一个线程池来同时处理心跳和客户请求
  • TaskTracker
    • 由jobtracker指派任务,实例化用户程序,在本地执行任务并周期性地向jobtracker汇报状态,在每一个工作节点上永远只会有一个tasktracker
  • JobTracker一直在等待JobClient提交作业
  • TaskTracker每隔3秒向JobTrakcer发送心跳询问有没有任务可做,如果有,让其派发任务给它执行
  • Slave主动向master拉生意
  • 图解
    • client —>>>
      • JobTracker
        • —-> TaskTracker
        • —> TaskTracker
        • —-> TaskTracker

  • 默认先进先出队列调度模式(FIFO)
    • 优先级(very_hight,high,normal,low,very low)