学习笔记-MapReduce

推荐系统:
    offline层:对海量数据离线计算。 MapReduce spark
    Nearline层:利用流式处理对海量数据进行实时加工 storm
    online 层:负责在线计算处理,相对简单的逻辑运算。WebPy。

一致性hash算法:为了解决因特网中的热点HostPot问题

最基本的海量数据思想:分而治之思想:
  1. 按数据量划分。传统的hash:分布式mysql
  2. 按流量划分。    一致性hash算法:新浪网流量例子
  3. 按大计算。   MapReduce。

一个Map对应一个split分片

MapReduce 是一个处理海量数据的分布式计算框架,该框架解决了:
  1. 数据分布式存储
  2. 容错性
  3. 作业调度
  4. 机器间通信等复杂问题

MapReduce 不负责存储数据,数据存储在HDFS上,HDFS的特点:
  1. 可扩展
  2. 可靠行
  3. 并发处理

MapReduce 的思想是什么:分而治之的思想,该思想解决了数据可以切割计算的应用问题;

Map:分 ,把复杂的问题分解为若干个简单任务
Reduce :合

MapReduce计算框架的流程:

学习笔记-MapReduce_第1张图片


InputFormat(MR最基础的类库之一):
  1. 计算框架中的split包含后一个Block中的开头的部分的数据(解决记录跨Block的问题)
  2. recordReader 每读取一条记录,调用一次map函数。
Shuffle :
    包含partion,sort,spill,Meger,Combiner 性能优化大有可为的地方
  1.  Partitioner是整个Shuffle中的一个部分,该部分决定数据又哪个Reducer处理,从而分区,比如采取Hash法,有n个reducer ,数据{“are”,1} 对key “are” 去做hash 即 对n取模生成m 那么生成{m, key,value},该partion就是m,决定去哪个桶
  2. Spill 溢写,每次溢写都会生成文件,溢出的数据到磁盘前对数据进行key排序sort,以及合并combiner。把数据从内存搬到磁盘
  3. Sort 缓冲区数据按照key排序
  4. Combiner 数据合并,相同的key数据,vlaue值合并,减少输出传输量。相当于部分reducer功能在memoryBuffer中做了。不能乱用该功能。

MapReduce :
  1. JobTracker 主进程,负责接收客户作业,提供监控工作节点功能,一个MapReduce集群只有一个JobTracker 
  2. TaskTracker 工作节点,由jobtracker提供任务,并周期性向jobtracker提供工作状态,每个工作节点只有一个taskTracker,但是一个集群有多个taskTracker ,只有一个jobTracker
MapReduce 默认先进先出的队列调度模式(FIFO模式):
  1. 先看优先级
  2. 在看开始时间
  3.  最后看JOBid号

MapReduce 采用多进程的并发方式,优点:多进程的并发方式这种模型便于每个任务占用资源进行控制调配,进程空间是独享的,缺点:多进程这种方式很大一部分限制了那些低延迟的任务,适合用于批量操作,高吞吐离线的。

MapReduce 物理配置:
  1. 合适的slot(map/reducer个数,默认都是2),设置的时候可以设置成cpu核数-1
  2. 磁盘情况 

MapReduce Map 注意⚠️
  1. map的个是split的份数,而split的份数是record的个数
  2. 压缩文件是不需要做split的,不可切分
  3. 非压缩文件和sequence文件可以切分
  4. dfs.block.size决定block的大小

对于单个MapReduce
    Map的个数最好为集群slot的倍数
    Reduce的个数最好为集群slot的个数、倍数 

MapReduce 和HDFS 同时部署在一个集群中,因为使数据本地化,就近原则
通常一个集群包含三个角色(master,slave,client)
多副本,目的是容错,数据层面做到高可用



你可能感兴趣的:(大数据)