《Hadoop权威指南》---关于MapReduce

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hy_coming/article/details/82820681

一、概述

MapReduce是一种用于数据处理的编程模型,Hadoop可以运行各种语言版本的MapReduce,并且这种程序还是并行运行的,因此可以将大规模的数据分析任务分发给任何一个拥有足够多机器的数据中心。

二、数据集

MapReduce的优势就是能够处理大规模的数据集。比如说气象数据集,需要收集全球各地的气象传感器每隔一个小时收集气象数据和收集大量的日志数据,这种大数据就适合用MapReduce来分析。比如说像找出最近一个世纪的最高气温,传统的就是利用脚本程序和awk(传统按行存储数据的工具)来完成,原理就是遍历比较、交换值、最后输出最大值。后来的做法就是利用并行处理程序来数据分析,按照不同年份的划分分配不同的线程运行,但是由于数据量和线程处理的问题还是会导致有些线程处理得缓慢,但是时间确实取决于这个最慢的线程时间,为了更好的缩短时间,我们可以把数据分割成固定大小的块,如果一个线程能够处理更多的块,那就给他更多的块数据,数据处理完就能得到每块的最大值,最后后就是对这些最大值进行处理,加入一个年份的数据分割成几块,就需要找出这几个块中的最大值作为这一年的最大值,但是受限于单台计算机的处理能力,为了更好的提高处理速度,多台计算机处理模式是我们考虑的方向,但是如何保证协调性和可靠性是一个问题,这就要使用Hadoop这样的框架来解决了。

三、Hadoop分析数据

其实MapReduce的处理过程是分为map阶段和reduce阶段,前者主要获取并刷选需要分析的数据,后者是对这些数据进行分析得出结果。

  • Java MapReduce:主要是基于org.apache.hadoop.io包,其中map函数是基于mapper类实现的,reduce函数是基于reduce类类来实现的,当然为了运行这两个类需要一个负责运行的main方法。(现在所说的都是新的API,是基于Hadoop 0.20.0中发布的,对于新旧API中的区别,请自行查询)

四、横向扩展

MapReduce作业(Job)是客户端需要执行的一个工作单元:包括输入数据、MapReduce程序和配置信息。MapReduce将作业分成若干个小任务(task)来执行,其中包括map任务和reduce任务。其中两类节点控制着作业执行过程:一个jobtracker以及一些列的tasktracker。jobtracker通过调度tasktracker上的任务来协调所有的运行在系统上的作业。同时Hadoop将MapReduce的输入数据划分为等长的小数据块,称为输入分片,hadoop为每个分片构建一个map任务。

集群上的可用宽带限制了MapReduce作业的数量,因此尽量避免map和reduce任务之间的数据传输是有利的。Hadoop允许用户针对map任务的输出指定一个combiner-combiner函数的输出作为reduce函数的输入,但是并不是针对所有的情况,使用的时候需要慎重考虑。

猜你喜欢

转载自blog.csdn.net/hy_coming/article/details/82820681