zoukankan      html  css  js  c++  java
  • Mapreduce(6)----OutputforMat格式设置

    MapReduce中的输入输出控制(转)

    —— InputFormat、OutputFormat、MultipleOutputs、GroupingComparator

    1.InputFormat概述

    MapReduce开始阶段,InputFormat类用来产生InputSplit,并基于RecordReader把它切分成record,形成Mapper的输入。

    ——MR内置的InputFormat

    1)TextInputFormat

    作为默认的文件输入格式,用于读取纯文本文件,文件被分为一系列以LF或者CR结束的行,key是每一行的位置偏移量,是LongWritable类型的,value是每一行的内容,为Text类型。

    2)KeyValueTextInputFormat

    同样用于读取文本文件,如果行被分隔符(缺省是tab)分割为两部分,第一部分为key,剩下的部分为value;如果没有分隔符,整行作为 key,value为空。

    3)SequenceFileInputFormat

    用于读取sequence file

    sequence file是Hadoop用于存储数据自定义格式的binary文件。它有两个子类:SequenceFileAsBinaryInputFormat,将 key和value以BytesWritable的类型读出;SequenceFileAsTextInputFormat,将key和value以Text类型读出。

    4)SequenceFileInputFilter

    根据filter从sequence文件中取得部分满足条件的数据,通过 setFilterClass指定Filter,内置了三种 Filter:

    • RegexFilter取key值满足指定的正则表达式的记录;
    • PercentFilter通过指定参数f,取记录行数%f==0的记录;
    • MD5Filter通过指定参数f,取MD5(key)%f==0的记录。

    5)NLineInputFormat

    0.18.x新加入,可以将文件以行为单位进行split,比如文件的每一行对应一个mapper。得到的key是每一行的位置偏移量(LongWritable类型),value是每一行的内容,Text类型。

    6)CompositeInputFormat

    用于多个数据源的join

     

    ——为MR设置指定的InputFormat

    job.setInputFormatClass(XXXInputFormat.class);

     

    ——也可以自定义InputFormat

    自己写一个类直接或间接的继承InputFormat抽象类即可

     

    2.MR中的输出控制-OutputFormat

    MapReduce结束阶段,OutputFormat类决定了Reducer如何产生输出。

    https://blog.csdn.net/zhanglh046/article/details/78557453

    • 2.1DBOutputFormat: 发送Reduce结果到SQL表中
    • 2.2FileOutputFormat: 将Reduce结果写入文件中

    2.2.1MapFileOutputFormat: 主要是处理MapFile(特殊的SequenceFile)的输出

    2.2.2SequenceFileOutputFormat: 主要是处理SequenceFile的输出

    2.2.3TextFileOutputFormat: 主要是处理普通文本的输出,也是默认实现

    • 2.3FilterOutputFormat:主要就是方便包装其他OutputFromat(没用过)
    • 2.4NullOutputFormat: 把所有的输出放到/dev/null(没用过)

    ——MR内置的OutputFormat

    1)TextOutputFormat

    以行分隔、包含制表符定界的键值对的文本文件格式

    2)SequenceFileOutputFormat

    二进制键值数据的压缩格式

    3)SequenceFileAsBinaryOutputFormat

    原生二进制数据的压缩格式

    4)MapFileOutputFormat

    一种使用部分索引键的格式

    ——为MR设置指定的OutputFormat

    job.setOutputFormatClass(SequenceFileOutputFormat.class);

    ——同理也可以自定义输出格式化器

    所有的OutputFormat都要直接或间接的继承OutputFormat抽象类

    // 要控制不同的内容写往不同的目标路径,可以采用自定义outputformat的方法
    job.setOutputFormatClass(LogEnhanceOutputFormat.class);
    
    // 尽管我们用的是自定义outputformat,但是它是继承制fileoutputformat
    // 在fileoutputformat中,必须输出一个_success文件,所以在此还需要设置输出path
    
    FileOutputFormat.setOutputPath(job, new Path("H:/out/"));

    原文链接:https://blog.csdn.net/zhou920786312/java/article/details/87031643

    OutputFormat抽象类中定义了如下的抽象方法:

    public abstract RecordWriter<K, V> getRecordWriter(TaskAttemptContext context) 
    public abstract void checkOutputSpecs(JobContext context )
    public abstract OutputCommitter getOutputCommitter(TaskAttemptContext context) 

    我们可以直接继承OutputFormat,但更多的时候我们会选择继承他的一个实现子类,比如FileOutputFormat -- 此类是所有目的地为文件的OutputFormat的基类,例如默认的TextOutputFormat就继承自它。

    FileOutputFormat实现了OutputFormat接口,默认实现了checkOutputSpecs和getOutputCommitter方法,并将getRecordWriter()设置为抽象方法要求我们去实现。

    如果想要更精细的改变逻辑可以自己去编写getOutputCommitter和checkOutputSpecs方法。

    而更多的时候,我们直接使用父类中的方法而将精力放置在getRecordWriter上,决定如何产生输出。

  • 相关阅读:
    .NET Core部署到linux(CentOS)最全解决方案,常规篇
    C#规则引擎RulesEngine
    Angular—都2019了,你还对双向数据绑定念念不忘
    HTTP Error 500.30
    ConsoleUDPServer与ConsoleUDP
    基于WMI获取USB设备信息(即获取插即用设备信息)System.Management.ManagementObjectSearcher--ManagementObjectCollection
    基于WMI获取USB设备信息(即获取插即用设备信息)----WMI使用的WIN32_类库名
    基于WMI获取USB设备信息(即获取插即用设备信息)System.Management.ManagementObjectSearcher--ManagementObjectCollection
    C#使用Emgu.CV.dll进行图像处理---使用EmguCV获取摄像头和读取视频
    Windows 10系统“家庭版”到“专业版”的转换
  • 原文地址:https://www.cnblogs.com/Lee-yl/p/13345469.html
Copyright © 2011-2022 走看看