Hadoop中MapReduce的一些关键词理解

 Map-Reduce几个输入格式的理解:

1 当执行hadoop任务的时候FileInputFormat会得到一个文件夹的路径(需要分析的文件在这个路径中,hadoop默认不会读取子目录)

2 把这些文件进行分片(input split),分片的个数决定Map执行对象的个数,Map越多消耗资源越多

(文件越大,速度越快原因:hdfs有个默认的块大小,一个文件小于默认值,则分为一片如果,文件大小大于默认值,根据块大小进行分块)

3 setInputFormat 设定输入文件内容的分隔格式。

4 几种文件内容格式分隔

输入格式

描述

TextInputFormat

默认格式,读取文件的行

行的字节偏移量

行的内容

KeyValueInputFormat

把行解析为键值对

第一个tab字符前的所有字符

行剩下的内容

SequenceFileInputFormat

Hadoop定义的高性能二进制格式

用户自定义

用户自定义

SequenceFileAsTextInputFormat

是SequenceFileInputFormat的变体,它将键和值转换为Text对象。转换的时候会调用键和值的toString方法。这个格式可以是顺序文件作为流操作的输入。

  

SequenceFileAsBinaryInputFormat

SequenceFileAsBinaryInputFormat是SequenceFileInputFormat的另一种变体,它将顺序文件的键和值作为二进制对象,它们被封装为BytesWritable对象,因而应用程序可以任意地将这些字节数组解释为他们想要的类型。

  

DBInputForma

DBInputForma是一个使用JDBC并且从关系数据库中读取数据的一种输入格式。由于它没有任何碎片技术,所以在访问数据库的时候必须非常小心,太多的mapper可能会事数据库受不了。因此DBInputFormat最好在加载小量数据集的时候用。
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->

  

二 、几个关键字的理解

 1 输入块(inputSplit): 即2中提到的分片 ,它决定了执行速度

 2 记录读取器(RecordReader):定义了如何加载数据,并把数据转换为Mapper能够使用的key/value值,它会根据FileInputFormat将数据进行分隔然后传到Map中

 3 Mapper :每个Mapper实例在单独的进程中执行并初始化,不同map之间不能通信,使得mapper不受其他maper任务影响。

 4 combiner :将相同的key进行合并,value整合成集合,传送给reduce 

 5 partition& shuffle 

   shuffle: 将map数据输出到reduce的过程

    partition:是reduce的输入分片,相同的key包含一个集合的值,这个key和value在什么位置是有这个决定的,默认的分类器是基于哈希的

 6 排序和规约(还不知道具体作用)

 7 输出:

  part-nnnnn,nnnnn是关联到某个reduce任务的partition的id 

输出格式

描述

TextOutputFormat

默认的输出格式, 以 "key \t value" 的方式输出行

SequenceFileOutputFormat

输出二进制文件,适合于读取为子MapReduce作业的输入

NullOutputFormat

忽略收到的数据,即不做输出 

SequenceFileAsBinaryOutputFormat

与SequenceFileAsBinaryInputFormat相对应,它将键/值对当作二进制数据写入一个顺序文件

MapFileOutputFormat

MapFileOutputFormat将结果写入一个MapFile中。MapFile中的键必须是排序的,所以在reducer中必须保证输出的键有序。

  7 Hadoop提供了一些OutputFormat实例用于写入文件,基本的(默认的)实例是TextOutputFormat,它会以一行一个键值对的方式把数据写入一个文本文件里。这样后面的MapReduce任务就可以通过KeyValueInputFormat类简单的重新读取所需的输入数据了,而且也适合于人的阅读。还有一个更适合于在MapReduce作业间使用的中间格式,那就是SequenceFileOutputFormat,它可以快速的序列化任意的数据类型到文件中,而对应SequenceFileInputFormat则会把文件反序列化为相同的类型并提交为下一个Mapper的输入数据,方式和前一个Reducer的生成方式一样。NullOutputFormat不会生成输出文件并丢弃任何通过OutputCollector传递给它的键值对,如果你在要reduce()方法中显式的写你自己的输出文件并且不想Hadoop框架输出额外的空输出文件,那这个类是很有用的。

RecordWriter:这个跟InputFormat中通过RecordReader读取单个记录的实现很相似,OutputFormat类是RecordWriter对象的工厂方法,用来把单个的记录写到文件中,就像是OuputFormat直接写入的一样。

Reducer输出的文件会留在HDFS上供你的其它应用使用,比如另外一个MapReduce作业,或一个给人工检查的单独程序。

相关推荐