Hadoop中MapReduce的一些关键词理解

标签: hadoop mapreduce 关键词 | 发表时间:2014-11-24 18:33 | 作者:username2
出处:http://www.iteye.com

 

 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 partition& shuffle 

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

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

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

 6 输出:

  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作业,或一个给人工检查的单独程序。

 

 

 

 

 



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [hadoop mapreduce 关键词] 推荐:

Hadoop中MapReduce的一些关键词理解

- - 企业架构 - ITeye博客
 Map-Reduce几个输入格式的理解:. 1 当执行hadoop任务的时候FileInputFormat会得到一个文件夹的路径(需要分析的文件在这个路径中,hadoop默认不会读取子目录). 2 把这些文件进行分片(input split),分片的个数决定Map执行对象的个数,Map越多消耗资源越多.

Hadoop MapReduce技巧

- - 简单文本
我在使用Hadoop编写MapReduce程序时,遇到了一些问题,通过在Google上查询资料,并结合自己对Hadoop的理解,逐一解决了这些问题. Hadoop对MapReduce中Key与Value的类型是有要求的,简单说来,这些类型必须支持Hadoop的序列化. 为了提高序列化的性能,Hadoop还为Java中常见的基本类型提供了相应地支持序列化的类型,如IntWritable,LongWritable,并为String类型提供了Text类型.

下一代Hadoop MapReduce

- Jia - NoSQLFan
本文来自Hadoop Summit大会的一个演讲稿,主讲是Hadoop核心开发团队的Arun C Murthy (@acmurthy),同时他也是Yahoo!刚刚剥离的Hadoop独立公司Hortonworks的 Founder和架构师. 演讲中他讲述了现在的Hadoop存在的一些问题和集群上限,并展望了下一代Hadoop和其MapReduce将会得到的巨大提升.

"Hadoop/MapReduce/HBase"分享总结

- - ITeye博客
此分享是关于hadoop生态系统的简单介绍包括起源到相对应用. Hadoop和HBase.pdf (2.1 MB). 已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.

Hadoop之MapReduce单元测试

- - ITeye博客
通常情况下,我们需要用小数据集来单元测试我们写好的map函数和reduce函数. 而一般我们可以使用Mockito框架来模拟OutputCollector对象(Hadoop版本号小于0.20.0)和Context对象(大于等于0.20.0). 下面是一个简单的WordCount例子:(使用的是新API).

Hadoop MapReduce高级编程

- - 互联网 - ITeye博客
•combine函数把一个map函数产生的对(多个key, value)合并成一个新的. 将新的作为输入到reduce函数中,其格式与reduce函数相同. •这样可以有效的较少中间结果,减少网络传输负荷. •什么情况下可以使用Combiner.

[转]基于mapreduce的Hadoop join实现

- -
对于一个大数据的分析应用,join是必不可少的一项功能.现在很多构建与hadoop之上的应用,如Hive,PIG等在其内部实现了join程序,可以通过很简单的sql语句或者数据操控脚本完成相应的Join工作.那么join应该如何实现呢?今天我们就对join做一个简单的实现. 我们来看一个例子,现在有两组数据:一组为单位人员信息,如下:.

【Hadoop】MapReduce使用combiner优化性能

- - CSDN博客云计算推荐文章
当MapReduce模型中,reduce执行的任务为统计分类类型的值总量或去重后的数量,或最大值最小值时,可以考虑在Map输出后进行combine操作;这样可以减少网络传输带来的开销,同时减轻了reduce任务的负担. Combine操作是运行在每个节点上的,只会影响本地Map的输出结果;Combine的输入为本地map的输出结果(一般是数据在溢出到磁盘之前,可以减少IO开销),其输出则作为reduce的输入.

hadoop的IO和MapReduce优化参数

- - CSDN博客系统运维推荐文章
           在MapReduce执行过程中,特别是Shuffle阶段,尽量使用内存缓冲区存储数据,减少磁盘溢写次数;同时在作业执行过程中增加并行度,都能够显著提高系统性能,这也是配置优化的一个重要依据.            下面分别介绍I/O属性和MapReduce属性这两个类的部分属性,并指明其优化方向.

Hadoop MapReduce编程入门案例

- - CSDN博客云计算推荐文章
Hadoop入门例程简析中. (下面的程序下载地址: http://download.csdn.net/detail/zpcandzhj/7810829). (1)Hadoop新旧API的区别. 新的API倾向于使用虚类(抽象类),而不是接口,因为这更容易扩展. 例如,可以无需修改类的实现而在虚类中添加一个方法(即用默认的实现).