1.MapReduce是一个分布式计算框架 1).它将大型数据操作作业分解为可以跨服务器集群并行执行的单个任务。 2).起源于Google 2.适用于大规模数据处理场景 1)每个节点处理存储在该节点的数据 3.每个job包含Map和Reduce两部分
1.分而治之 简化并行计算的编程模型 2.构建抽象模型:Map和Reduce 开发人员专注于实现Mapper和Reducer函数 3.隐藏系统层细节 开发人员专注于业务逻辑实现
1.易于编程 2.可扩展性 3.高容错性 4.高吞吐量
1.难以实时计算 2.不适合流式计算 3.不适合DAG(有向图)计算
1.MapReduce框架处理的数据格式是<K,V>键值对形式 2.Mapper Map端接收<k,v>键值对数据,经过处理输出新的<k,v>键值对 Map端处理逻辑写在Mapper类中map()方法中 3.Reduce Reduce端搜集多个Mapper端输出的<k,v>数据,进行汇总 Reduce的业务逻辑写在reduce()方法中 每一组相同k的<k,lterrator>组调用一次reduce()方法
数据定义格式 map: (K1,V1) → list (K2,V2) reduce: (K2,list(V2)) → list (K3,V3) MapReduce执行过程 Mapper Combiner Partitioner Shuffle and Sort Reducer
在map之前,根据输入文件创建inputSplit 每个InputSplit对应一个Mapper任务 输入分片存储的是分片长度和记录数据位置的数组 block和split的区别 block是数据的物理表示 split是块中数据的逻辑表示 split划分是在记录的边界处 split的数量应不大于block的数量(一般相等)
找到你输入数据存储的目录开始遍历目录下的每一个文件遍历第一个文件,wc.txt获取文件的大小计算切片的大小,默认情况下,切片的大小会等于块的大小开始切片(假设260M的文件,0-128M,128-256M,256-260M,判断剩下的部分是否大于块的1.1倍, 如果不大于1.1,就直接划分为一个切片)切片和HDFS的切块有什么区别?切片:MapReduce中的一个逻辑概念,一个切片就是Mapper任务切块:HDFS上的物理切割,是一个物理概念通常情况下,切块的个数等于切片的个数