• MapReduce学习笔记(3)


    三、读和写

      mapreduce的输入数据一般来自较大的文件,通常为GB或TB级。MapReduce的基本处理原则是将输入数据分割成块,这些块可以在计算机上并行处理。块的大小需要权衡,如果太大,则并行粒度就会较大,如果太小,则启动和停止处理每个块所需时间就会占去很大部分执行时间。

      1、InputFormat

      Hadoop分割与读取输入文件的方式被定义在InputFormat借口的一个实现中,TextInputFormat是InputFormat的默认实现,当你想要一次性读取一行数据,而且数据没有确定的键值时,这种数据结构会很有用。

      常用InputFormat类如下

      

      要设置相应的InputFormat 类可以用JobConf对象,如

    JobConf conf = new JobConf(*.class);
    conf.setInputFormat(KeyValueTextInputFormat);

      当我们期望采用与标准InputFormat类不同的方式读取数据时,我们可以自己定制InputFormat类。InputFormat是一个包含两个方法的接口:

      这个方法总结了InputFormat需要执行的两个功能:

    public interface InputFormat<K, V> {
        InputSplit[] getSplits(JobConf job, int numSplits) throws IOException;
        RecordReader<K, V> getRecordReader(InputSplit split,JobConf job,Reporter reporter) throws IOException;
    }

      · 确定所有要输入数据的文件,并将之分割为分片。每个map任务分配一个分片。

      · 提供一个对象(RecordReader),循环提取给定分片中的记录,并解析每个记录为预定义类型的健和值。

     因为考虑将文件划分为分片是一项很繁重的工作,所以在创建自己的InputFormat类的时候,最好从负责文件分割的FiliInputFormat类中继承一个子类。

      2、OutputFormat

      与InputFormat相似。每个reducer将它的输出写入自己的文件中,输出无需分片。Hadoop提供了几个标准的FileOutputFormat实现,可以通过调用JobConf对象中的setOutputFormat()定制OutputFormat。

        

      默认的OutputFormat是TextOutputFormat,它将每个记录写为一行文本。每个记录的key和value通过toString()转化为字符串,并通过制表符 分割。

  • 相关阅读:
    软件工程讲义 3 两人合作(2) 要会做汉堡包
    创新 王屋村的魔方们
    IT 行业的创新 创新的迷思 (56)
    现代软件工程讲义 12 绩效管理
    校园招聘 比较容易的面试题
    技能的反面 魔方和模仿
    现代软件工程讲义 2 工程师的能力评估和发展
    计算机知识体系的三个部分
    不鸣则已 一鸣惊人
    京城名流的聚会
  • 原文地址:https://www.cnblogs.com/conbein/p/3294834.html
Copyright © 2020-2023  润新知