Hadoop学习笔记(八)MapReduce深入分析

来源:互联网 发布:怎么封游戏端口 编辑:程序博客网 时间:2024/05/17 12:04

MapReduce深入分析

Hadoop中MapReduce提供的主要是离线端的数据分析。根据其原理,可以将其分为两个阶段
1. Map
2. Reduce阶段

Hadoop在MapReduce设计方面主要有两个重要思想:

  1. 化整为零,分而治之。
  2. 数据加工终端化。数据在终端加工要比数据传输后再加工节省资源。

输入输出分析

InputFormat

InputSplit是Hadoop定义的用以 传送每个单独的map的数据,InputSplit存储一个分片长度和一个记录数据位置的数组。当数据传送给map时,map 将分片信息传送到InputFormat。InputFormat.RecordReader( )生成RecordReader,RecorderReader.createKey( ).createValue( )生成map可以处理的< k, v >。

InputFormat子类主要有

  • BaileyBorweinPlouffe.BbpinputFormat
  • ComposableInputFormat
  • CompositeInputFormat
  • DBInputFormat
  • DisSum.Macine.AbstractInputFormat
  • FileInputFormat *

其中FileInputFormat是Hadoop默认的输入方式,其子类包括
- CombineFileInputFormat
- KeyValueTextInputFormat
- NLineInputFormat
- SequenceFileInputFormat
- TeraInputFormat
- TextInputFormat

TextInputFormat以及其子类数据记录格式为

OutputFormat

OutputFormat类似于InputFormat,默认为TextOutputFormat,
输出格式为

Mapper 工作方式

Mapper通常用来处理输入格式转化、投影、过滤等。例如在Hadoop-examples.wordcount,Mapper将输入分割之后的TextInputFormat进行本地化的数据清洗和加工

MapReduce优化

  1. 任务调度。将任务优先分配给空闲的机器,将map任务分配给InputSplit所在的机器,减少I/O消耗。
  2. 数据处理和InputSplit。MapReduce擅长处理少量的大数据,处理大量小数据时会消耗较多时间。因此可以在MapReduce任务前对数据进行整合,从而提升MapReduce执行效率。Map任务通常来说,最佳运行时间在1min左右比较合适。可以通过设置Map输入数据的大小调解Map运行时间。FileInputFormat会处理每个block后将其作为一个InputSplit。合理调解block块大小也可以提升执行效率。合理设置Map任务数量也可以提升性能
  3. Map和Reduce任务数量。Map/Reduce任务槽是这个集群能同时运行Map/Reduce任务的最大数量。如:一个1200机器集群,每台机器最多同时运行10个map任务,5个reduce任务,这个集群map任务槽为1200,Recue任务槽为600。可以通过设置Reduce任务数量均衡负载,Reduce任务数量提高,资源利用率提高;Reduce任务数量降低,任务响应效率提高。
  4. combine。MapReduce处理后的文件输出在本地。*combine可以在本地将中间数据*合并,可以极大降低网络I/O消耗。job.setCombinerClass(combine.class)
  5. 压缩。计算机处理能力>网络传输效率。可以有效减少网络上数据传输量。
  6. 自定义Comparator.可以二进制比较,省区数据序列化和反序列化时间。

MapReduce一般用于处理一些较为简单的数据,若处理过程复杂,有必要考虑Pig,Hive或Cascading。

0 0
原创粉丝点击