一、MapReduce介绍
MapReduce是一种编程模型式,它是与处理/产生海量数据集的实现相关。用户指定一个map函数,通过这个map函数处理key/value(键/值)对,并且产生一系列的中间key/value对,并且使用reduce函数来合并所有的具有相同key值的中间键值对中的值部分。
1、MapReduce处理大数据的基本构思:
A、对付大数据处理----分而治之
对相互间不具有计算依赖关系的大数据,实现并行计算最有效的办法,就是采取分而治之的策略
B、构建抽象模型----Map和Reduce
实现并行计算的编程模型
C、上升到构架----自动并行化,并隐藏低层细节实现
一般的并行化处理,程序员需要考虑数据存储、划分、分发、结果收集、错误恢复等诸多细节。MapReduce设计并提供了统一的计算框架,为程序员隐藏了绝大多数系统层面的处理细节。
2、如何提供统一的计算框架
A、主要需求和目标
-
实现自动并行化计算
-
为程序员隐藏系统层面的细节
-
需要考虑的细节技术问题:
-
如何管理和存储数据?如何划分数据?
-
如何调度计算任务并分配map和reduce节点?
-
如果节点间需要共享或交换数据,怎么办?
-
如何考虑数据通信和同步?
-
如何掌控节点的执行完成情况?如何收集中间和最终的结果数据?
-
节点失效如何处理?如何恢复数据?如何恢复计算任务?
-
节点扩充后,如何保证原有程序仍能正常运行并保证系统性能提升?
B、提供统一的计算框架,可完成:
-
计算任务的划分和调度
-
数据的分布存储和划分
-
处理数据与计算任务的同步
-
结果数据的收集整理
-
系统通信、负载平衡、计算性能优化处理
-
处理系统节点出错检测和失效恢复
C、最大亮点:
-
通过抽象模型和计算框架,把需要做什么与具体怎么做分开了,为程序员提供一个抽象和高层的编程接口和框架
-
程序员仅需要关心其应用层的具体计算问题,仅需编写少量的处理应用本身计算问题的程序代码
-
如何具体完成这个并行计算任务所相关的诸多系统层细节被隐藏起来,交给计算框架去处理:从分布代码的执行,到大到数千小到单个节点的自动调试使用
二、MapReduce 1.0基本组成结构介绍
1、JobTracker:
JobTracker是整个MapReduce计算框架中的主服务,相当于集群的管理者,负责整个集群的作业控制和资源管理。
1)作业控制模块,负责作业的分解和状态的监控。
其中,最重要的是状态的监控,主要包括TaskTracker状态监控、作业状态监控、任务状态监控等。其最主要的作用有两个:容错和为任务调度提供决策依据。
2)资源管理模块,是通过一定的策略,将各个节点上的计算资源分配给集群中的任务。
2、TaskTracker:
TaskTracker是HADOOP集群中运行于各个节点上的服务。负责任务的执行和汇报心跳;
1) 任务执行:从JobTracker端接收并执行各种命令(如:启动任务、提交任务、杀死任务、杀死作业、重新初始化等);
2) 汇报心跳:周期性地将所在节点上的各种信息,通过心跳机制汇报给JobTracker。信息包括:节点健康信息、资源使用情况、任务执行进度、任务运行状态等.
三、MapReduce作业运行流程
1.在客户端启动一个作业。
2.向JobTracker请求一个Job ID。
3.将运行作业所需要的资源文件复制到HDFS上,包括MapReduce程序打包的JAR文件、配置文件和客户端计算所得的输入划分信息。这些文件都存放在JobTracker专门为该作业创建的文件夹中。文件夹名为该作业的Job ID。
4.客户端提交作业,JobTracker接收到作业请求。
5. JobTracker将其放在一个作业队列里,等待作业调度器对其进行调度。
6.当作业调度器根据自己的调度算法调度到该作业时,会根据输入划分信息为每个划分创建一个map任务,并将map任务分配给TaskTracker执行。
7.TaskTracker每隔一段时间会给JobTracker发送一个心跳,告诉JobTracker它依然在运行,同时心跳中还携带着很多的信息,比如当前map任务完成的进度等信息。
8. 对于map和reduce任务,TaskTracker根据主机核的数量和内存的大小有固定数量的map槽和reduce槽。这里需要强调的是:map任务不是随随便便地分配给某个TaskTracker的,这里有个概念叫:数据本地化(Data-Local)。意思是:将map任务分配给含有该map处理的数据块的TaskTracker上,同时将程序JAR包复制到该TaskTracker上来运行,这叫“运算移动,数据不移动”。而分配reduce任务时并不考虑数据本地化。
9.当JobTracker收到作业的最后一个任务完成信息时,便把该作业设置成“成功”。当JobClient查询状态时,它将得知任务已完成,便显示一条消息给用户。
四、MapReduce编程模型
Map Task分解成Read、Map、Collect、Spill、Combine五个阶段,Reduce Task分解成Shuffle、Merge、Sort、Reduce、Write五个阶段。
1、MapReduce编程模型
根据运行顺序,主要由以下五部分组成:
1 InputFormat
主要用于描述输入数据的格式。
提供以下两个功能:
1) 数据切分:按照某个策略将输入数据切分成若干个split,以便确定Map Task个数以及对应的split;
2) 为Mapper提供输入数据:给定某个split,能将其解析成一个个key/value对。
包含算法:
1) 文件切分算法:用于确定InputSplit的个数,以及每个InputSplit对应的数据段;
2) Host选择算法:确定每个InputSplit的元数据信息;
2 Map
1) 初始化:对Map的运行,进行初始化处理;
2) Map操作:调用用户实现的Map方法,对一个个key/value对进行处理;
3) 清理:对Mapper进行清理;
3 Partitioner
对Mpaaer产生的中间结果进行分片,以便将同一分组的数据交给同一个Reduce处理,它直接影响到Reduce阶段的负载均衡;
4 Reduce
1) 初始化:对Reduce的运行,进行初始化处理;
2) Map操作:调用用户实现的Reduce方法,对各个key/value组对进行处理;
3) 清理:对Reduce进行清理;
5 OutputFormat
主要用于描述输出数据的格式,它能够将Reduce输出的key/value对写入特定格式的文件中。
1) 实现checkOutputSpecs接口:检查用户配置的输出目录是否存在,如果存在则抛出异常,以防止之前的数据被覆盖;
2) 处理side-effect file:对于运行缓慢的任务,会在另外一个节点上启动一个相同的任务,当其中一个完成任务时,会kill掉另外一个还没完成的任务。任务运行过程中,会把输出结果先写在side-effect file中,当任务完成时,才把结果移动到用户指定的输出目录中。
2、Map Task整体流程
1) Read阶段:Map Task通过用户编写的RecordReader,从输入InputSplit中解析出一个个key/value;
2) Map:将解析出的key/value交给用户编写的map()函数处理,并产生一系列新的key/value;
3) Collect:当Map处理完数据后,一般会调用OutputCollector.collect()输出结果。在该函数内部,它会将生成的key/value分片(通过调用Partitioner),并写入一个环形内存缓冲区中;
4) Spill:即“溢写”,当环形内存缓冲区满后,MapReduce会将数据写到本地磁盘上,生成一个临时文件。需要注意的是,将数据写入本地磁盘之前,先要对数据进行一次本地排序,并在必要时对数据进行合并、压缩等操作;
5) Combine:当所有数据处理完成后,Map Task对所有临时文件进行一次合并,以确保最终只会生成一个数据文件;
3、Reduce Task整体流程
1) Shuffle阶段:也称为copy阶段,Reduce Task从各个Map Task上远程拷贝一片数据,对针对某一片数据,如果其大小超过一定的阈值,则写到磁盘上,否则直接放到内存中;
2) Merge:在远程拷贝数据的同时,Reduce Task启动了两个后台线程对内存和磁盘上的文件进行合并,以防止内存使用过多或磁盘上文件过多;
3) Sort:为了将key相同的数据聚在一起,采用了基于排序的策略。由于各个Map Task已经实现对自己的处理结果进行了局部排序,因此,Reduce Task只需对所有数据进行一次归并排序即可;
4) Reduce:将每组数据依次交给用户编写的reduce()函数处理;
5) Write:将计算结果写到hdfs上;
相关推荐
hadoop-mapreduce-examples-2.0.0-alpha.jar
Hadoop 1.0是该框架的最初版本,它主要由两个核心组件构成:HDFS(Hadoop Distributed File System,分布式文件系统)和MapReduce。HDFS负责可靠地存储大数据,而MapReduce则用于处理这些数据。在这个版本中,...
在Hadoop 1.0中,核心组件主要包括HDFS(Hadoop Distributed File System)和MapReduce。HDFS是一种分布式文件系统,它将大文件分割成多个数据块,并将这些数据块分布在多台服务器上,以实现高容错性和高吞吐量的...
这个名为“hadoop-1.0源代码(全)”的压缩包包含的是一整套Hadoop 1.0版本的源代码,这对于开发者来说是一个宝贵的资源,可以深入理解Hadoop的工作原理和实现细节。 在压缩包中,我们可以看到以下几个关键目录: ...
使用eclipse和maven的Hadoop Mapreduce示例:日志文件分析:本文简要概述了如何使用Eclipse和maven应用map reduce来计算每天发生的日志消息类型的数量。 先决条件: • 虚拟机上的Hadoop 设置。 • Java 版本 6 ...
2. **MapReduce操作**:实现了对Hadoop MapReduce编程模型的封装,让Python开发者能用Python编写Mapper和Reducer函数,处理大规模数据集。 3. **数据处理函数**:可能包含一系列预定义的数据处理和计算函数,如统计...
- 虽然MapReduce最初由Google提出,但Apache Hadoop项目实现了开源版本的MapReduce,使得更多组织和个人能够利用这个强大的工具处理大数据。 10. **扩展性与可伸缩性**: - MapReduce的设计允许轻松扩展到数千台...
它提供了一套完整的工具和组件,包括Hadoop分布式文件系统(HDFS)、YARN资源管理器、MapReduce计算框架、Hive数据仓库、HBase分布式数据库等。HDP还支持其他开源工具和技术,如Apache Spark、Apache Kafka、Apache ...
Hadoop创始人Goug Cutting根据这三篇论文开发出Hadoop中的HDFS,MapReduce,以及Yarn。三篇论文是Hadoop大数据的开端,可以说Google是Hadoop的思想之源。可以根据这三篇论文去了解底层源码。
The MongoDB Connector for Hadoop is a library which allows MongoDB (or backup files in its data format, BSON) to be used as an input source, or output destination, for Hadoop MapReduce tasks....
hdfs dfs -rm -r / user / huangzehai / wordcount / output hadoop jar target / hadoop-example-1.0-SNAPSHOT.jar huangzehai.mr.wordcout.WordCount / user / huangzehai / wordcount / input / user / ...
阿里云E-MapReduce是一个基于Hadoop和Spark的大数据处理服务,它提供了高效、便捷的集群管理和计算任务调度。E-MapReduce API手册是开发者和管理员进行自动化操作和集成的重要工具,通过API可以轻松地创建、管理和...
温度排序,实现自定义分组分区排序,到出来的jar
Hadoop 代码使用方式 ...hadoop jar hadoop-mapreduce-custom-inputformat-1.0-SNAPSHOT.jar org.apache.hadoop.mapreduce.sample.SmallFileWordCount -Dmapreduce.input.fileinputformat.split.maxsize=10
本教程全面地介绍了 Hadoop MapReduce 框架的所有用户界面方面,并作为学习该框架的指导文档。通过本教程,用户能够掌握如何利用 Hadoop MapReduce 来处理大规模数据集(多太字节级别)。 #### 二、预备条件 在...
3. **数据处理框架**:可能会用到Apache Spark或Hadoop MapReduce等大数据处理框架,理解它们的工作原理和API使用。 4. **数据库与缓存**:如MySQL、Redis等,用于存储元数据、任务状态等。 5. **并发编程**:多...
这一层可能包含多种工具,如Flume、Kafka或Logstash,用于实时数据流的捕获,以及Hadoop的MapReduce或Apache Nifi进行批量数据导入。 2. 数据存储层:大数据平台需要能够处理PB级别的数据,因此存储系统通常由...
在Hadoop 2.0版本中,YARN作为核心组件引入,取代了原有的MR1(MapReduce 1.0)中的JobTracker,实现了资源管理和作业调度的分离。 YARN的核心思想是将JobTracker的功能拆分为ResourceManager(RM)和...
3. 数据处理与计算:利用Apache Hadoop MapReduce进行批处理计算,以及Spark进行实时流处理,提供快速的计算能力。此外,可能还会使用Hive进行数据仓库建模,方便数据分析。 4. 数据治理:确保数据的质量、一致性和...
这通常涉及到分布式文件系统(如Hadoop HDFS)、NoSQL数据库(如HBase、Cassandra)和数据仓库(如Hive、Greenplum)等技术。 3. 数据处理与计算:为了进行分析,数据需要经过预处理、清洗和转化。这通常使用...