目录
(3)新建一个Java工程,导入需要的JAR包。新建一个WordCountMapper类
Hadoop中有两个重要的组件,一个是HDFS,另一个是MapReduce,HDFS用来存储大批量得数据,而MapReduce则是通过计算来发现数据中有价值得内容。
6.1MapReduce概述
hadoop作为开源组织下最重要得项目之一,最推出后得到了全球学术界和工业界的广泛关注、推广和普及。它是开源项目Lucene(搜索索引程序库)和Nutch(搜索引擎)的创始人Doug Cutting于2004年推出的,当时Doug Cutting 发现MapReduce正是其所需要解决大规模Web数据处理的重要计数,而因模仿Goole MapReduce,基于Java设计开发了一个成为hadoop的开源MapReduce并行计算框架和系统。
6.1.1MapReduce的特点
我们前面说过hadoop的HDFS用于存储数据,MapReduce用来计算数据。接着来介绍一下MapReduce的特点。MapReduce适合处理离线的海量数据,这里的“离线”可以理解为本地存储,非实时处理。首先计算往往需要一段时间,如几分钟或者几个小时们根据业务数据和业务复杂程度有所区别。MapReduce往往处理大批数据,比如PB级或者ZB级别。特点如下
易于编程:如果要编写分布式程序,只需要实现一些简单的接口,与编写普通程序类似,避免了复杂的过程。同时,编写的这个分布式程序可以部署到大批廉价的普通机器上运行。
具有良好的拓展性:是指当一台机器的计算资源不能满足存储或者计算的时候,可以通过增加机器来增加存储和计算能力。
具有高容错性:MapReduce设计的初衷是可以使程序部署运行在廉价的机器上,廉价的机器坏的概率相对较高,这就要求其具有良好的容错性。当一台机器“挂掉”以后,相应数据的存储和计算能力会被一直到另外一台机器上,从而实现容错性。
6.1.2MapRedcue的应用场景
MapReduce的应用场景主要变现在从大规模数据中进行计算,不要求即时返回结果的场景,比如以下典型应用:
单词统计
简单的数据统计,如网站PV和UV统计
搜索引擎建立索引
搜索引擎中,统计最流行的K个搜索词
统计搜索词频率,帮助优化搜索词提示
复杂数据分析算法实现
下面介绍MapReduce不适用的方面:
实时计算,MapReduce不适合在毫秒级或者秒级内返回结果。
流式计算,MapReduce的输入数据是静态的,不能动态变化,所以不适合流式计算。
DAG计算,如果多个应用程序存在一栏关系,并且后一个应用程序的输入为前一个的输出,这种情况也不适合。
6.2MapReduce执行过程
6.2.1单词统计实例
假设有一个非常大的文件,需求是统计文件中每个单词的出现的次数,MapReduce的执行过程如下图
图中主要分为Split、Map、Shuffle、和Reduce阶段,每个阶段在WordCount中的作用如下:
Split阶段:首先大文件被切成多分,假设这里被切成了3份,每一行代表一份
Map阶段:解析出每个单词,并在后面机上数字1
Shuffle阶段:将每一份中的单词分组到一起,并按照字母进行排序
Reduce阶段,将相同的单词进行累加
输出结果
6.2.2MapReduce执行过程
从WrodCount实例中,可以给予单词统计大概了解列MapReduce过程。接下来我们从理论层面面介绍一下
具体执行过程树下:
(1)数据会被切割成数据片段
(2)数据片段以key和value的形式被读进来,默认是以行的下标位作为key,以行的内容作为value
(3)数据会传入Map中进行处理,处理逻辑由用户自行定义,在Map中处理完后还是以key和value的形式输出。
(4)输出的数据传给列Shuffle(洗牌),Shuffle完成对数据的排序和合并等操作,但是Shuffle不会对输入的数据进行改动,所以还是key2、value2
(5)数据随后传给Reduce进行处理,Reduce处理完成后,生成key3、value3
(6)Reduce处理完成后数据会被写到HDFS某个目录
6.2.3Map Reduce的文件切片---Split
Split的大小默认与 block对应,也可以由用户任意控制。MapReduce的SPlit大小计算公式如下:
max(min.sp