大数据学习笔记(十七)-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了。
我自己的感觉是,MapReduce可以用来做数据的初次ETL,将数据完成整理之后,使用Hive来做后续的处理,因为HQL能够提供更好更简单的数据处理方法。比如group by和join,实现起来还是挺复杂的。
但是这就看出MapReduce的局限了。Spark就提供了对应的算子,可以实现复杂的数据运算。
4.使用MapReduce实现连接操作时,需要两个映射器(Mapper),此时可以使用MultipleInputs类来达到使用多个映射器,如果只有一个映射器则是用之前的job.setMapperClass()来实现。
在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()来实现。
相关文章推荐
- 大数据学习笔记2-MapReduce
- hadoop学习笔记之mapreduce 基于hbase日志数据的最频繁访问ip统计
- Hadoop学习笔记—4.初识MapReduce 一、神马是高大上的MapReduce MapReduce是Google的一项重要技术,它首先是一个编程模型,用以进行大数据量的计算。对于大数据
- 大数据学习笔记之十七 Google技术之MapRduce和BigTable
- 大数据学习笔记3--HDFS扩展和mapreduce工作过程
- 大数据学习笔记之二十九 Hadoop的第二代MapReduce YARN
- 大数据学习笔记——hadoop1.2.1 MapReduce简介
- MapReduce学习笔记之数据连接(六)
- oracle9i学习笔记之十七 分级取回数据
- 大数据学习笔记:编写Mapreduce代码并运行
- 大数据学习笔记之MapReduce
- 大数据之hadoop[MapReduce]学习 笔记
- Chap 4 学习笔记-使用C#存储变量数据
- Flash/Flex学习笔记(4):如何打开网页及Get/Post数据
- 学习笔记——XML Schema内置数据类型
- WinApi学习笔记-简单的数据类型
- Android(java)学习笔记251:ContentProvider使用之添加数据到联系人(掌握)
- 设计模式学习笔记--数据访问对象模式
- Python学习笔记----数据类型