Hadoop的MapReduce

来源:互联网 发布:lr监控windows资源 编辑:程序博客网 时间:2024/05/17 08:02

1: 键值对成为hadoop任务的基础

hadoop中的数据包含与相关值关联的值,这些数据的存储方式允许数据集的不同值根据建进行分类和重排。
键是唯一的,但是值不一定唯一,每个值必须与键想关联,但键可能没有值,对建的明确定义很关键。

MapReduce只能处理以键值对形式描述的数据


2: MapReduce作业的多个阶段:{k1,v1} -> {k2,List<v2>}->{k3,v3}

map方法的输入时一系列键值对,称为k1,v1

map方式的输出是一系列键以及关联的值列表,称为k2,v2 ,每个mapper仅仅输出一系列单个键值对,他们是通过shuffle方法组合成建与值得列表

mapReduce作业的最终输出是另一个键值对,称为k3,v3


3: MapReduce Jave API

mapper类提供mapper方法,该类以键/值数据作为输入和输出类型,map方法以输入的键值对作为参数

void map(k1 key,v1 value mapper.Context context) throws IOException,InterruptedException

reducer类提供reduce方法

void reduce(k2 key,Iterable<v2> values,Reducer.Context context) throws IOException,InterruptException


4:综述mapreduce的工作原理

(1)启动时,jobTracker与NameNode通信,并对存储在HDFS上的数据相关的所有交互进行管理

(2)将大的数据块进行分块,并确定将每小数据块分配给一个map任务

(3)任务分配,jobTracker确定map任务数

(4)任务启动,每个TaskTracker开启一个独立的java虚拟机来执行任务

(5)mapper的输入: 

 有两行文字 This is a test 

                    Yes this is

(6) mapper的执行:拆分,mapper输出由单词本身组成的键和值1 如(This ,1) , (is ,1),(a,1),(test,1),(Yes,1),(it,1),(is,1)

   这些从mapper输出的键值对并不会直接传给reducer,还需要一个shuffle过程,与给定键相关的所有值都会被提交到同一reducer。所以需要将键值以key Iterable的方式。

 (7)reducer类的输出,最后合并一个文件。


 注意:文件被切分为split,split中的数据被送往mapper,数据在文件中如何存储,以及单个键值如何传给mapper

使用InputFormat和OutputFormat的概念将文件作为整体进行处理,并使用RecordReader将数据格式转化为键值对,然后使用RecordWriter将数据格式从建值对转换为所需格式









0 0
原创粉丝点击