您的位置:首页 > 大数据

大数据学习笔记(十七)-MapReduce

2018-01-04 18:25 253 查看
1.在MapReduce中被分成了两类,map操作和reduce操作,1个job是由若干次map操作和1次reduce操作组成的。

在MapReduce中,最重要的就是理解数据在处理时都是以Key/Value形式输入输出的(在数据初始读入时,也是以Key/Value形式读入的)

2.对map、reduce操作的理解

①map是映射:简单理解的话可以理解成遍历原有数据集中的所有数据,针对每一条数据都用相同的逻辑对数据进行处理,然后再产生新的数据集。因为是遍历操作,所以每条数据都是独立的,所以是可以并行的,分布在不同机器上进行运算。

②reduce是归约:所谓的归约可以理解成框架将数据集按照Key值生成一个Value的List,在reduce回调方法中,可以这些数据进行处理。因为要将Key值相同的数据集中在一起进行处理,所以会有网络IO/磁盘IO,也就是shuffle,因此并行度低,执行速度慢。

3.使用MapReduce处理数据

①初学MapReduce,学习的是WordCount Example,在这个例子里的job是由1次map和1次reduce组成的,对于比较简单的逻辑这样就可以了,但是一个job实际上是可以由多次map和1次Reduce组成的。

②处理更复杂的逻辑需要在reduce前执行多次map操作或者再reduce操作后也需要使用map操作对reduce产生的结果进行处理,这个时候就可以使用ChainMapper来实现reduce前的多次map操作,reduce之后要执行map操作可以使用ChainReducer来实现。

③在更复杂的一些情况下,可能需要经过多次reduce,这个时候只需要在写Driver时顺序的写多个job设置前一个job的输出为后一个job的输入就可以了,每个job间以

job.waitForCompletion(true);


提交作业就可以顺序的执行多个job了。

我自己的感觉是,MapReduce可以用来做数据的初次ETL,将数据完成整理之后,使用Hive来做后续的处理,因为HQL能够提供更好更简单的数据处理方法。比如group by和join,实现起来还是挺复杂的。

但是这就看出MapReduce的局限了。Spark就提供了对应的算子,可以实现复杂的数据运算。

4.使用MapReduce实现连接操作时,需要两个映射器(Mapper),此时可以使用MultipleInputs类来达到使用多个映射器,如果只有一个映射器则是用之前的job.setMapperClass()来实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  大数据 mapreduce