Hadoop数据输入输出格式

2019-03-28 13:48|来源: 网络

MapReduce处理的基本原则之一是将输入数据分割成块,这些快可以在多台计算机上并行处理。
FSDataInputStream类扩展了java中的DataInputStream类,以达到随机读的特性,避免了从同开始读到分片的位置,从而提高了效率。

输入格式:InputFormat类定义了如何分割和读取输入文件,其中一个子类是FileInputFormat抽象类。

当开启Hadoop作业时,FileInputFormat会得到一个路径参数,这个路径内包含了所需要处理的文件,FileInputFormat会读取这个文件夹内的所有文件(译注:默认不包括子文件夹内的),然后它会把这些文件拆分成一个或多个的InputSplit。你可以通过JobConf对象的setInputFormat()方法来设定应用到你的作业输入文件上的输入格式。下表给出了一些标准的输入格式:

输入格式

描述

键类型

值类型

TextInputFormat

默认格式,读取文件的行

行的字节偏移量 (LongWriable

行的内容(Text

KeyValueInputFormat

把行解析为键值对

第一个tab字符前的所有字符Text

行剩下的内容Text

SequenceFileInputFormat

Hadoop定义的高性能二进制格式

用户自定义

用户自定义

    数据格式类的继承关系如图:
    

输入块(InputSplit):一个输入块描述了构成MapReduce程序中单个map任务的一个单元。默认的大小为64M

记录读取器(RecordReader):InputSplit定义了如何切分工作,但是没有描述如何去访问它。 RecordReader类则是实际的用来加载数据并把数据转换为适合mapper读取的键值对。

相关问答

更多
  • 这个easy 您是要在控制台输入的吧? 代码: import java.io.BufferedReader; import java.io.File; import java.io.FileWriter; import java.io.InputStreamReader; public class Write { public static void main(String[] args) throws Exception { String path = "C:\\my.txt"; InputStreamR ...
  • st=(类型)System.in.read();只读了一个字节。可以和CHAR转换。但不能转成string 所以第1个能运行,第3个不行,第2个是转换成int形。是把输入的字节转换成ASC码了。输出不一样 Scanner in=new Scanner(System.in) String str= in.nextLine(); 读一行以字符串保存的, int temp=Integer.parseInt(str);就把字符串转成int了 public class hello { public static vo ...
  • 概述 java程序输入需要用到Scanner工具类,输出则使用println 解析 1、输入: 从键盘输入需要用到java的Scanner这个util包下的工具类 Scanner中输入是需要对输入的字符进行分类,int类型为nextint()方法,double类型为nextDouble()方法,字符串类型为next()方法。 #code: #out: 2、输出: java常用的输出为println #code: #out: 除了println()方法之外,java还有print()和printf()两种输出 ...
  • public class Test{ public static void main(String [] args){ Scanner in = new Scanner(System.in); int number = in.nextInt(); System.out.println("输入的数为:" + number); } }
  • JAVA 输入输出[2021-09-21]

    这个是我随便写的,功能都实现了 不过你可以拿去简化一下,比如用switch case 之类 的 import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.Scanner; public class HttpClientTutorial{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); S ...
  • import java.util.*; import java.io.*; class Student { private String name; private int age; private int javaScore; private int cScore; public Student(String name,int age) { this.name = name; this.age = age; } public void setJavaScore(int java) { if(java < ...
  • LINUX默认输入是键盘,输出是显示器。你可以用重定向来改变这些设置。比如用wc命令的时候本来是要手动输入一篇文字来计算字符数的,用了重定向后可以直接把一个已经写好的文件用‘<’指向这条命令,就直接可以统计这个文件的字符数等了。输出也是一样,你可以把屏幕输出重定向到一个文件里,再到文件里去看结果。
  • “<”和“>”
  • 你写一个程序, 在命令行上 EXE>out.txt 只要EXE里面的任何输出都在out.txt里面 EXE 评论0 11 0 加载更多
  • 我已经弄清楚了这个问题,我知道我正在回答我自己的问题,但这只是因为我想让其他人知道他们是否有同样的问题。 这个问题即将到来,因为我已经提到我的组合器类与reducer类相同,但是根据这个问题,mapper的输入/输出与reducer的输入/输出不同,而组合器应该具有与mapper相同的输入/输出。 所以我删除了我设置组合器的行,它工作正常。 I have figure out this question, I know I am replying to my own question but this is ...