传统数据处理理念: 数据向计算靠拢
MapReduce 理念: 计算向数据靠拢 , 即将应用程序分发到数据所在的机器
具体来讲就是当要处理数据块A的时候,将距离数据块A最近的map分配给数据块A,而每每它们是在同一块机器上的缓存
MapReduce 架构: Master/Slave微信
几个概念架构
一个大数据集分红多个片,每一个分片分配一个map执行任务,最后全部map的结果通过分区、排序、合并、归并等操做,称为shuffle,再进行reduce任务。大数据
分片只是逻辑上的分片,而这个分片可能会大于HDFS的一个块的大小,假如两个块不在一个机器上,则还须要跨机器读取,所以通常把分片大小设为一个HDFS块的大小.spa
Reduce任务数量的设置,取决于可用的reduce slot的数量,比可用的reduce slot少一点3d
map任务的结果不直接写入磁盘,而是先写入预先分配的缓存(通常是100MB),减小IO的消耗。
溢写是指,不能等缓存满了才写入磁盘,由于map一直在执行,是不会等写操做的,因此缓存快满的时候,达到一个阈值:溢写比(好比0.8),才会写入磁盘
达到溢写比时也不是直接写入,而是要通过blog
reduce端从每一个map那对应本身须要数据的分区拉取数据,
若是map shuffle没有通过合并则拿到的是<key,value-list>,如<'a',<1,1,1>>
若是通过合并则是<key, value>
而reduce 拿到map的输出,还会进行归并,把相同键值的value 归并成value-list。 如<'a',1>,<'a',1> 归并为<'a',<1,1>>排序
Master 对应 JobTracker
Worker对应 TaskTracker内存
MapReduce 产生的中间结果 如缓存,不会写到HDFS,而是直接写入Worker所在的机器的磁盘.资源