MapReduce心得

mapreduce心得:

1、mapreduce 最基础的这是一种并行编程框架,最基本的构成:Map函数和Reduce函数。当然在实际的数据分析的过程中,我们需要为不同的客户制定不同的Map和Reduce函数,再一个就是Driver程序,为整个Mapper和Reducer进行统一的配置(如java会将输入输出的class文件引入工程)

2、为何会出现MapReduce编程框架:

  • 大数据到来:我们现在所处的时代属于数据爆发的高涨期。对于海量的数据我们虽然已经有了很多的算法处理数据,但是数据的运行时间远远超出了我们的想象,时间价值超过了物质价值。
  • 代码的冗杂性:我们在处理数据的时候,用户的需求永远都是在不断变化的,如何去处理数据,处理数据在计算过程中的失误,我们都需要一步一步的考虑到。最基本的算法往往也会变得更加的冗杂
  • 机器的性能:现在在各大计算机排行榜上,数据的增长速度远远超过了计算机计算能里的增长,机器的性能已经达到了一个瓶颈,单一的机器无法在去提升自己的性能,急需要某一种框架可摆脱单机运算

3、mapreduce核心思想:分而治之。

  • Mapper:在map阶段中,数据可以从一些底层框架如Hive、Hbase等获取数据的数据输入流(InputStream,有可能是在本地运行,有可能是在yarn上运行),输入到Mapper进程中后,我们会将数据文件进行按片划分(一般为128M每片,性能好一点的电脑可以设置为256M,可以在FileInpurFormat中设置,每一个文件之间的划分都互不影响,当一个文件划分剩余为默认切片大小的0.2被以内的时候,自动化分到上一块片中),map进程会为每一个切片划分开启一个MapTask,将输入文件通过submit()函数提交给MapTask。统计字符时候,MapTask会进行逻辑运算,将统计结果分为两类:a-p,q-z一类。写入context中,输出格式
  • shuffle机制:在传递给reduce函数之前,mapper所输出的数据会在内存缓冲区中写入一遍 。不同的文件会写到不同的分区中(partition,分区大小:key.hashcode()%ReduceNumber)这样有两个作用:
    • 1、写入的是内存的缓冲区,加快了数据传输速度,内存的io比磁盘快得多
    • 2、再写入内存分区时候我们会对数据进行一次排序,然后在进行一次combiner
  • Reducer:shuffle机制最后一步会进行一次Merge归并排序,输出的结果为键值对,作为Reducer的输入数据需要在reduce函数中写入规定的数据的数据类型  reduce;Reduce过程中同样会根据mapTask开启相应数量的ReduceTask,将同一类型来自不同MapTask的数据下载到磁盘,进行归类排序,然后写入context,outputformat(默认TextOutputFormat)写出到part-00000中

4、mapreduce优缺点:

  • 优点:易于编程(封装好了api接口)、良好的拓展性(集群性能可不断增加)、高容错性(有副本机制,保证了数据可靠性)、大数据集(PB)离线处理
  • 缺点:不擅长实时、流式和有向图计算

你可能感兴趣的:(Hadoop)