3.1 为什么用MapReduce
分布式+海量数据
3.2 MapReduce计算模型
JobTracker,用户管理和调度工作
TaskTracker,用于执行工作
Job,每个个MapReduce任务被初始化为一个Job,每个Job又分为两个阶段,分别用Map函数和Reduce函数表示这两个阶段
InputSplit,存储的不是数据本身,而是一个分片长度和一个记录数据位置的数据
新的API包为org.appache.hadoop.mapreduce,旧API包为org.appache.hadoop.mapred
新/旧版API区别:
1、新,Mapper/Reducer为类,方便扩展,旧,Mapper/Reduce为接口
2、新API中广泛使用Context对象,并使用MapContext进行MapReduce间的通信
3、Job的配置统一由Configuration完成
4、Job类负责Job的控制,JobClient类被删除
WordCount程序执行流程图
1、按照TextInputFormat被处理成两个InputSplit,然后输入到两个Map中,Map程序会读取InputSplit指定位置的数据,然后交由Map函数处理
2、处理后的数据写入到本地磁盘,而不是HDFS,Map的数据在Job完成后可以删除
3、Reduce读取Map的输出作为自己的输入,合并value然后写入HDFS
参照图3-2来对照图3-3WordCount程序
简单控制流:JobTracker调度任务给TaskTracker,TaskTracker执行任务时会把进度返回给JobTracker,JobTracker会记录进度的进行状况,如果某个TaskTracker上任务失败,JobTracker会把这个任务分配给另一个TaskTracker,知道任务完成。
3.3 MapReduce任务的优化
1、任务调度
优先将任务分配给空闲的机器,尽量将Map任务分配给InputSplit所在的机器,减少网络I/O消耗
2、数据预处理与InputSplit大小
MapReduce擅长处理少量大数据,不擅长处理大量小数据。在提交MapRedcue任务前可以先对数据进行一次预处理,将数据合并为少量大数据。一个block作为一个InputSplit,合理的设置block块大小。一个Map任务在一分钟左右比较合适
3、Map和Reduce任务的数量
Map/Reduce任务槽,是这个集群能够同时运行Map/Reduce任务的最大数量。例如:1200台的集群,设置每台机器可以运行10个Map任务,5个Reduce任务,这个集群的Map任务槽书为12000,Reduce任务槽为6000。一般Reduce任务数量是Reduce任务槽数的0.95或1.75倍,0.95时,如果一个Reduce任务失败,可以迅速找到一台空闲的机器重新运行这个任务,1.75时,执行速度快的机器可以获得更多的Reduce任务。
4、Combine函数
这是一个本地合并函数,WordCount程序中,词频最高的可能是“the”,每个Map任务肯那个产生千万个<the,1>记录,这些记录如果一一的传递给Reduce任务将会很耗时。可以通过Combine函数合并这些数据,减少网络I/O操作。可以使用Combine函数计算出这个block块中“the”的数量。
5、压缩
可以选择对Map的输出或最终的输出进行压缩
6、自定义comparator
实现自定义类型时,自定义comparator来进行二进制流的比较,省去数据的反序列化
3.4 Hadoop流
通过流的方式Hadoop可以支持任何语言编写Map/Reduce函数
P49
3.5 Hadoop Pipes
在Hadoop上运行C++程序的方法, Hadoop的流使用的是标准的输入/输出,Pipes使用的是Sockets
相关推荐
MapReduce计算模型详讲(结合源码深入解读) MapReduce是Hadoop中的一种编程模型,用于处理大规模数据。它主要由两部分组成:Map和Reduce。Map阶段负责将输入数据分割成小块,并对每个小块进行处理;Reduce阶段负责...
编写MapReduce程序涉及Mapper、Reducer和Driver三个部分: 1. Mapper:自定义Mapper类,实现map()方法,处理输入数据并生成中间键值对。 2. Reducer:自定义Reducer类,实现reduce()方法,对Mapper输出的中间键值对...
MapReduce计算模型为五个阶段:数据输入、Map任务、Shuffle任务、Reduce任务和结果输出。在数据输入阶段,数据被拆分成多个片段,并分配到不同的节点上进行处理。Map任务对数据进行处理,并生成中间键值对。Shuffle...
在大数据处理领域,MapReduce是一种广泛使用的编程模型,尤其适合处理和存储大规模数据集。本话题将深入探讨如何使用Hadoop MapReduce实现两个矩阵相乘的算法,这在数据分析、机器学习以及高性能计算中有着重要应用...
3. **分布式计算的认识**:认识到分布式计算的局限性与优势,在实际应用中需要权衡数据规模和计算需求。 4. **Hadoop框架的理解**:对Hadoop框架有了更全面的认识,为进一步学习Hadoop生态系统打下基础。 5. **编程...
在第二轮MapReduce中,可能会有新的Mapper对地区级别的数据进行进一步分析,如计算平均活动时间或活跃用户数。 ### 小结 MapReduce编程模型提供了一种高效且易于实现的分布式计算方式,尤其适用于批处理任务。...
MapReduce是一种分布式计算模型,由Google提出,用于处理和生成大规模数据集。它主要由两个阶段组成:Map阶段和Reduce阶段,分别对应于数据的映射和规约过程。 第2章:MapReduce2.0架构 这一章深入解析了Hadoop ...
在大数据处理领域,Hadoop MapReduce 是一种广泛使用的并行计算框架,用于处理和存储海量数据。本主题将深入探讨如何使用Hadoop MapReduce来实现MatrixMultiply,即矩阵相乘,这是一个基础且重要的数学运算,尤其在...
基于MapReduce框架的集群系统,提出了1种新 的计算模型用于大规模图形的3-clique计算,来实现图挖掘. 计算的基本步骤是:首先获取每个节点的第1跳信息,然 后是第2跳信息,最后得到所有基于该节点的3-clique. 该计算模型...
### 高级软件人才培训专家-Hadoop课程资料-3-第三章 - MapReduce & YARN入门 #### 知识点一:分布式计算概述 - **定义**:分布式计算是一种计算模型,它通过网络将任务分配到多台计算机上并行处理,以提高计算效率...
本文主要介绍了如何使用Java编写MapReduce程序,并运行第一个MapReduce作业,包括遇到的问题和解决方案。 首先,环境搭建是使用Hadoop MapReduce的重要步骤。本文的环境基于CDH5(Cloudera's Distribution ...
程序和参数两个层面实现优化的可选项很多,本文在第三章对此作了详细阐述。 Hadoop在管理资源中将内存和CPU两种计算资源捆绑在一起,然后再根据任务类型分为Map Slot和Reduce Slot两种资源模型。这种管理机制实现简单,...
MapReduce是一种分布式计算模型,由Google在2004年提出,主要用于处理和生成大规模数据集。它将复杂的并行计算任务分解成两个主要阶段:Map(映射)和Reduce(化简)。在这个"MapReduce项目 数据清洗"中,我们将探讨...
MapReduce 编程模型和分布式计算框架 MapReduce 是一种面向大规模数据并行处理的编程模型,也是一种并行分布式计算框架。它主要由两个处理阶段:Map 阶段和 Reduce 阶段,每个阶段都以键值对作为输入和输出,键值对...
MapReduce是一种编程模型,由Google提出,用于大规模数据集的并行计算。Hadoop是Apache开源项目,实现了MapReduce模型,并结合HDFS(Hadoop分布式文件系统)提供了一个可扩展、容错性强的大数据处理框架。在这个项目...
MapReduce是由Google提出的用于大规模数据处理的编程模型,它将复杂的数据处理任务分解为两个主要阶段:Map(映射)和Reduce(归约)。Map阶段将原始数据分割成可管理的小块,然后并行地应用函数;Reduce阶段则聚合...
MapReduce是Hadoop生态系统中的核心处理模块,它是一种分布式计算框架,特别适合处理和分析海量数据。这个框架的灵感来源于函数式编程中的map和reduce概念,最初由Google在2004年提出,随后在Hadoop中得到广泛应用。...
MapReduce是一种分布式编程模型,由Google开发,用于处理和生成大数据集。在Hadoop框架下,MapReduce将大型任务拆分成一系列可并行处理的小任务,从而高效地运行在大规模集群上。本案例中,我们关注的是如何使用...