MapReduce
MapReduce
AlexMapReduce
- 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
- 分:map
- 分治思想
###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
- Map(in_key,in_value)
两个重要的进程
- JobTracker
- 主进程,负责接收客户作业提交,调度任务到作业节点上运行,并提供诸如监控工作节点状态及任务进度等管理功能,一个MapReduce集群有一个Jobtracker,一般运行在可靠的硬件上
- tasktracker是通过周期性的心跳来通知jobtracker其当前的健康状态,每一次心跳包含了可用的map和reduce任务数目,占用的数目以及运行中的任务详细信息,Jobtracker利用一个线程池来同时处理心跳和客户请求
- TaskTracker
- 由jobtracker指派任务,实例化用户程序,在本地执行任务并周期性地向jobtracker汇报状态,在每一个工作节点上永远只会有一个tasktracker
- JobTracker一直在等待JobClient提交作业
- TaskTracker每隔3秒向JobTrakcer发送心跳询问有没有任务可做,如果有,让其派发任务给它执行
- Slave主动向master拉生意
- 图解
- client —>>>
- JobTracker
- —-> TaskTracker
- —> TaskTracker
- —-> TaskTracker
- JobTracker
- client —>>>
- 默认先进先出队列调度模式(FIFO)
- 优先级(very_hight,high,normal,low,very low)