Hadoop 原生态支持常用 InputFormat OutFormat 详解

标签: hadoop 生态 inputformat | 发表时间:2013-06-05 18:34 | 作者:xian0617
出处:http://blog.csdn.net
hadoop原生态支持的常用输入数据格式:

在jobconfig中设置mapred.input.format.class
=====================纯文本文件格式,以行为单位读入:
TextInputFormat(key:行首在文件的偏移量,value:行内容)
    全称: org.apache.hadoop.mapred.TextInputFormat
    
    对于输入数据中没有明确的key值时非常有效,TextInputFormat返回的key值为行首在文件的偏移量,value为这行的内容。
    
    Map个数的控制
    TextInputFormat没有实现自己的getSplits方法,它继承于FileInputFormat, 因此使用了FileInputFormat的.
    org.apache.hadoop.mapred.FileInputFormat的getSplits流程:
    两个配置
        mapred.min.split.size        (一个map最小输入长度),
        mapred.map.tasks             (推荐map数量)
    
    totalSize:是整个Map-Reduce job所有输入的总大小。
    numSplits:mapred.map.tasks设置的值,给M-R框架的Map数量的提示。
    goalSize:是输入总大小与提示Map task数量的比值,即期望每个Mapper处理多少的数据,仅仅是期望,具体处理的数据数由splitSize决定。
    minSplitSize:默认为1,mapred.min.split.size 重新设置。一般情况下,都为1,特殊情况除外。
    minSize:取的1和mapred.min.split.size中较大的一个。
    blockSize:HDFS的块大小,默认为64M,一般大的HDFS都设置成128M。
    splitSize:就是最终每个Split的大小 Math.max(minSize, Math.min(goalSize, blockSize))
    那么Map的数量基本上就是totalSize/splitSize。
    
    因此, 如果想增加map数, 可以把mapred.min.split.size调小(其实默认值即可), 另外还需要把mapred.map.tasks设置大.
    如果需要减少map数,可以把mapred.min.split.size调大, 另外把mapred.map.tasks调小.
    这里要特别指出的是FileInputFormat会让每个输入文件至少产生一个map任务, 因此如果你的输入目录下有许多文件, 而每个文件都很小, 例如几十kb, 那么每个文件都产生一个map会增加调度开销. 作业变慢.
    (可以通过配置 CombineFileInputFormat 处理大量小文件的输入,因为我不考虑这种输入,故这里不展开)
    
    参考资料: http://blog.csdn.net/strongerbit/article/details/7440111
    
KeyValueTextInputFormat(key:分隔符之前的文本,值:分隔符之后的文本)
    全称: org.apache.hadoop.mapred.KeyValueTextInputFormat
    可以通过key.value.separator.in.input.line 设置分隔符,默认为tab("\t")
    以分隔符出现的第一个位置进行切分,即使分隔符出现多次也是被切分一次,如果分隔符没有出现,则整行内容为key,value为空
    Map个数控制与TextInputFormat相同
    
NLineInputFormat(key:行首在文件的偏移量,value:行内容)
    全称: org.apache.hadoop.mapred.lib.NLineInputFormat
    主要用于控制每个map读取多少行记录的情况。 需要注意的事情是:当输入文件行数特别大时不建议使用这个输入格式,因为统计行数、需要启动多少个map的时间开销会非常大
    Map个数控制
    每个map处理多少行记录N: 默认为1, 通过mapred.line.input.format.linespermap重新设置


=====================二进制文件格式:
SequenceFileInputFormat<K,V>(键和值都是由用户定义,根据写入时key、value确定)
    全称: org.apache.hadoop.mapred.SequenceFileInputFormat
    key,value的类型在SequenceFile的头中已有记录,不可更换,参考 SequenceFileOutputFormat
    
    Map个数控制与 TextInputFormat 相同,不同之处是  mapred.min.split.size 默认为2000,而不是1



输出文件格式:
TextOutputFormat是默认的输入格式
    全称: org.apache.hadoop.mapred.TextOutputFormat
    key,value 用mapred.textoutputformat.separator分开,默认是"\t",也可以自行设置
    TextOutputFormat的输出格式可以被KeyValueTextInputFormat接受
    
    如果输出的key类型为NullWritable的输出格式可以被TextInputFormat接受。在这中情况下key没有被输出来,也没有分割符。
    
NullOutputFormat
    全称: org.apache.hadoop.mapred.lib.NullOutputFormat
    如果不想让reduce程序有任何输出我们可以把输出格式设置为NullOutputFormat。阻止hadoop的输出在reducer用自己的方式输出文件而不许要hadoop框架些任何额外文件是十分有用。

SequenceFileOutuputFormat<K,V>
    全称:org.apache.hadoop.mapred.SequenceFileOutuputFormat
    K 的类型可以通过  mapred.mapoutput.key.class 或者 mapred.output.key.class 设定 ,默认是 org.apache.hadoop.io.Text
    V 的类型可以通过  mapred.mapoutput.value.class 或者 mapred.output.value.class 设定,默认是 org.apache.hadoop.io.Text
   
作者:xian0617 发表于2013-6-5 18:34:00 原文链接
阅读:81 评论:0 查看评论

相关 [hadoop 生态 inputformat] 推荐:

Hadoop 原生态支持常用 InputFormat OutFormat 详解

- - CSDN博客云计算推荐文章
hadoop原生态支持的常用输入数据格式:. 在jobconfig中设置mapred.input.format.class. =====================纯文本文件格式,以行为单位读入:. TextInputFormat(key:行首在文件的偏移量,value:行内容).     全称: org.apache.hadoop.mapred.TextInputFormat.

Hadoop生态图谱

- - NoSQLFan
当下Hadoop已经成长为一个庞大的体系,貌似只要和海量数据相关的,没有哪个领域缺少Hadoop的身影,下面是一个Hadoop生态系统的图谱,详细的列举了在Hadoop这个生态系统中出现的各种数据工具. 这一切,都起源自Web数据爆炸时代的来临. 海量数据怎么存,当然是用分布式文件系统 -. 数据怎么用呢,分析,处理.

从问题域出发认识Hadoop生态系统

- - 董的博客
Dong | 新浪微博: 西成懂 | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及 版权声明. 网址: http://dongxicheng.org/mapreduce-nextgen/rethinking-hadoop-from-problems-solved/. 本博客的文章集合: http://dongxicheng.org/recommend/.

基于Hadoop生态圈的数据仓库实践 —— ETL(一)

- - CSDN博客推荐文章
一、使用Sqoop抽取数据.         Sqoop是一个在Hadoop与结构化数据存储(如关系数据库)之间高效传输大批量数据的工具. 它在2012年3月被成功孵化,现在已是Apache的顶级项目. Sqoop有Sqoop1和Sqoop2两代,Sqoop1最后的稳定版本是1.4.6,Sqoop2最后版本是1.99.6.

比较Apache Hadoop 生态系统中不同的文件格式和存储引擎的性能

- - IT瘾-bigdata
这篇文章提出了在Apache Hadoop 生态系统中对比一些当前流行的数据格式和可用的存储引擎的性能:Apache Avro, Apache Parquet, Apache HBase 和 Apache Kudu 空间效率, 提取性能, 分析扫描以及随机数据查找等领域. 这有助于理解它们中的每一个如何(何时)改善你的大数据工作负载的处理能力.

Hadoop Streaming 编程

- - 学着站在巨人的肩膀上
Hadoop Streaming是Hadoop提供的一个编程工具,它允许用户使用任何可执行文件或者脚本文件作为Mapper和Reducer,例如:. 采用shell脚本语言中的一些命令作为mapper和reducer(cat作为mapper,wc作为reducer). 本文安排如下,第二节介绍Hadoop Streaming的原理,第三节介绍Hadoop Streaming的使用方法,第四节介绍Hadoop Streaming的程序编写方法,在这一节中,用C++、C、shell脚本 和python实现了WordCount作业,第五节总结了常见的问题.

Hadoop使用(一)

- Pei - 博客园-首页原创精华区
Hadoop使用主/从(Master/Slave)架构,主要角色有NameNode,DataNode,secondary NameNode,JobTracker,TaskTracker组成. 其中NameNode,secondary NameNode,JobTracker运行在Master节点上,DataNode和TaskTracker运行在Slave节点上.

Hadoop MapReduce技巧

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

Hadoop TaskScheduler浅析

- - kouu&#39;s home
TaskScheduler,顾名思义,就是MapReduce中的任务调度器. 在MapReduce中,JobTracker接收JobClient提交的Job,将它们按InputFormat的划分以及其他相关配置,生成若干个Map和Reduce任务. 然后,当一个TaskTracker通过心跳告知JobTracker自己还有空闲的任务Slot时,JobTracker就会向其分派任务.

HADOOP安装

- - OracleDBA Blog---三少个人自留地
最近有时间看看hadoop的一些东西,而且在测试的环境上做了一些搭建的工作. 首先,安装前需要做一些准备工作. 使用一台pcserver作为测试服务器,同时使用Oracle VM VirtualBox来作为虚拟机的服务器. 新建了三个虚拟机以后,安装linux,我安装的linux的版本是redhat linux 5.4 x64版本.