Hadoop的MapReduce

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值