网站描述样本,做版式的网站,网页设计网站欣赏,seo服务外包价格目录 1. MapReduce概述2. MapReduce的功能2.1 数据划分和计算任务调度2.2 数据/代码互定位2.3 系统优化2.4 出错检测和恢复 3. MapReduce处理流程4. MapReduce编程基础参考 1. MapReduce概述 MapReduce是面向大数据并行处理的计算模型、框架和平台: 1. 基于集群的高性能并行… 目录 1. MapReduce概述2. MapReduce的功能2.1 数据划分和计算任务调度2.2 数据/代码互定位2.3 系统优化2.4 出错检测和恢复 3. MapReduce处理流程4. MapReduce编程基础参考 1. MapReduce概述 MapReduce是面向大数据并行处理的计算模型、框架和平台: 1. 基于集群的高性能并行计算平台它允许使用市场上普通的商用服务器构成一个包含数十、数百甚至数千个节点的分布式并行计算集群。 2. 并行计算与运行软件框架它提供了一个庞大但设计精良的并行计算软件框架能自动完成计算任务的并行化处理自动划分计算数据和计算任务在集群节点上自动分配和执行任务以及收集计算结果。 3. 并行程序设计模型与方法它借助于函数式程序设计语言Lisp的设计思想提供了一种简便的并行程序设计方法用Map和Reduce两个函数编程实现基本的并行计算任务提供了抽象的操作和并行编程接口。 MapReduce通过把对数据集的大规模操作分发给网络上的每个节点实现可靠性每个节点会周期性地返回它所完成的工作和最新的状态。如果一个节点保持沉默超过一个预设的时间间隔主节点将标记这个节点状态为死亡并把分配给这个节点的数据发到别的节点上。
2. MapReduce的功能
2.1 数据划分和计算任务调度 系统自动将一个作业待处理的数据划分成很多个数据块每个数据块对应于一个计算任务并自动调度计算节点来处理相应的数据块。作业和任务调度功能主要负责分配和调度计算节点同时负责监控这些节点的执行状态并负责Map节点执行的同步控制。
2.2 数据/代码互定位 1. 本地化数据处理一个计算节点尽可能处理其本地磁盘上所分布存储的数据实现了代码向数据的迁移。 2. 无法本地化数据处理寻找其他可用节点并将数据从网络上传送给该节点但将尽可能从数据所在的本地机架上寻找可用节点以减少通信延迟实现了数据向代码的迁移。
2.3 系统优化 中间结果数据进入Reduce节点前会进行一定的合并处理一个Reduce节点所处理的数据可能来自多个Map节点为了避免Reduce计算阶段发生数据相关性Map节点输出的中间结果需使用一定的策略进行适当的划分处理以保证相关性数据发送到同一个Reduce节点。 此外系统还进行一些计算性能优化处理如对最慢的计算任务采用多备份执行、选最快完成者作为结果。
2.4 出错检测和恢复 以低端商用服务器构成的大规模MapReduce计算集群中节点硬件出错和软件出错是常态因此MapReduce需要能检测并隔离出错节点调度分配新的节点接管出错节点的计算任务。同时系统还将维护数据存储的可靠性用多备份冗余存储机制提高数据存储的可靠性并能及时检测和恢复出错的数据。
3. MapReduce处理流程 MapReduce处理流程可以分为三个阶段Map、Shuffle和Reduce。 Map是映射负责数据的过滤分发将原始数据转换成键值对Shuffle将Map的输出进行排序与分割后再交给ReduceReduce是合并将具有相同key值的value进行处理后再输出新的键值对作为最终结果。MapReduce的处理流程如下图所示。 Map和Reduce操作需要开发人员自己定义相应Map类和Reduce类而Shuffle是系统自动实现的。Shuffle过程发生在Map和Reduce两端Map端的Shuffle是对单个Map的结果进行分区、排序、分割然后将属于同一分区的输出合并在一起并写在磁盘上(分区有序的含义是Map输出的键值对按分区进行排列具有相同分区值的键值对存储在一起每个分区里面的键值对又按key值进行升序排列)。Reduce段的Shuffle是从多个Map上拉取属于自己分区的数据然后在保持数据排序的情况下将多个Map上的数据按照键值进行合并同时将多个合并后的数据写入磁盘最后将多个合并后的数据按照键值进行分组来作为Reduce的输入。
4. MapReduce编程基础 Hadoop内置数据类型如下表所示。
类型名含义BooleanWritable标准布尔类型ByteWritable单字节数值DoubleWritable双精度浮点数FloatWritable单精度浮点数IntWritable整型LongWritable长整型Text使用UTF-8格式存储的文本NullWritable当key, value中的key或value为空时使用ArrayWritable存储属于Writable类型值的数组 下面是maven项目中pom.xml中依赖部分的配置。 dependenciesdependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.11/versionscopetest/scope/dependencydependencygroupIdorg.apache.hadoop/groupIdartifactIdhadoop-common/artifactIdversion3.3.6/versionexclusionsexclusiongroupIdorg.slf4j/groupIdartifactIdslf4j-log4j12/artifactId/exclusion/exclusions/dependency/dependencies下面是简单使用Hadoop中内置数据类型的代码。
import org.apache.hadoop.io.ArrayWritable;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.MapWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.Writable;public class App {public static void testText() {System.out.println(testText);Text text new Text(hello hadoop!);System.out.println(text.getLength());System.out.println(text.find(ll));System.out.println(text.toString());}public static void testArrayWritable() {System.out.println(testArrayWritable);ArrayWritable arr new ArrayWritable(IntWritable.class);IntWritable year new IntWritable(2025);IntWritable month new IntWritable(1);IntWritable day new IntWritable(29);arr.set(new Writable[] {year, month, day});System.out.printf(year%s, month%s, day%s%n, arr.get()[0], arr.get()[1], arr.get()[2]);}public static void testMapWritable() {System.out.println(testMapWritable);MapWritable map new MapWritable();Text k1 new Text(name);Text v1 new Text(tonny);Text k2 new Text(password);map.put(k1, v1);map.put(k2, NullWritable.get());System.out.println(map.get(k1).toString());System.out.println(map.get(k2).toString());}public static void main(String[] args) {testText();testArrayWritable();testMapWritable();}
}运行结果如下。
参考
吴章勇 杨强著 大数据Hadoop3.X分布式处理实战