Hadoop内置的数据输入\输出格式与RecordReader\RecordWriter(九)

理论和源代码分析:

一,数据输入格式(InputFormat)用于描述MapReduce的作业
  数据输入规范。MapReduce框架依靠数据输入格式完成输入
  规范检查(比如输入文件的目录的检查),对数据文件进行
输入分块(InputSplit),以及提供从输入分块中 将数据逐一
读出,并转换为,Map过程的输入键值对等功能。

最常用的数据输入格式:TextInputFormat和KeyValueTextInputFormat
   1,TextInputFormat是系统默认的数据输入格式,可以
   将文本文件分块并逐行读入以便Map节点进行处理。读入一行时
   所产生的主键key就是当前在整个文本文件中的字节偏移位置,
   而value就是该行的内容。
   KeyValueTextInputFormat是可将一个按照<key,value>格式逐行
   存放的文本文件逐行读出,并自动解析生产相应的的key和value.

   对于一个数据输入格式(TextInputFormat和KeyValueTextInputFormat)
   ,都需要有一个对应的RecordReader方法。RecordReader主要用于将一个
   文件中的数据记录分拆成具体的键值对,传送给Map过程作为键值对
   输入参数。每个数据输入格式都有输入格式有一个默认的RecordReader。
   1,TextInputFormat的默认RecordReader是LineRecordReader。
   2,KeyValueTextInputFormat的默认RecordReader是KeyValueLineRrcordReader

二,数据输出格式(OutputFormat)用于描述MapReduce作业的数据输出规范。
MapReduce框架依靠数据格式完成输出规范检查(如检查输出目录是否存在)
以及提供作业数据输出等功能。

    最常用的数据输出格式是TextOutputFormat,也是系统默认的数据输出格式
    可以将计算结果以"key+\t+value"的形式输出到文本文件中。

    数据输出格式也提供一个对应的RecordWriter,以便系统明确输出结果写入到
    文件中的具体格式。TextInputFormat的默认RecordWriter是lineRecordWriter
    也是将计算结果以"key+\t+value"的形式输出到文本文件中。

查看KeyValueTextInputFormat源码:
1,点击KeyValueTextInputFormat.class进入源码:
Hadoop内置的数据输入\输出格式与RecordReader\RecordWriter(九)_第1张图片

2,在KeyValueTextInputFormat类中找到RecordReader方法点击
KeyValueLineRecordReader进入到KeyValueLineRecordReader类
Hadoop内置的数据输入\输出格式与RecordReader\RecordWriter(九)_第2张图片

3,查看具体的KeyValueLineRecordReader方法:
Hadoop内置的数据输入\输出格式与RecordReader\RecordWriter(九)_第3张图片

输出数据格式的源码也类似以上的查看,可以根据源码的内容自定义,自己的输入输出格式。

你可能感兴趣的:(mapreduce,hadoop)