继承FileInputFormat类和RecordReader类
2015-06-17 10:00
411 查看
FileInputFormat是一个处理文件的InputFormat类,当要继承该类时,需要覆盖三个方法:
1.
判断文件是否可分割,通常是可分割的,以换行符进行分割,但如果文件是压缩的,将不可分割是否分割,可以自行重写FileInputFormat的isSplitable来控制
2.
getSplits方法会根据输入目录产生InputSplit数组, 每个InputSplit会相应产生一个map任务, map的输入定义在InputSplit中,其中,Split中不包含实际的分片内容,而只是对实际信息的分片信息(即分片的元数据)。具体的说,每个分片中包含当前分片对应的文件路径,当前分片在该文件中起始位置,当前分片的长度以及对应的实际数据所在的节点列表。
3.
这是InputFormat类的方法,该方法返回RecordReader,来决定如何读取每个分片内容
RecordReader类告诉hadoop以哪种方式从分片中读取一条记录record,每读取一条记录都会调用RecordReader类;系统默认的RecordReader是LineRecordReader,如TextInputFormat;LineRecordReader是用每行的偏移量作为map的key,每行的内容作为map的value;重写该类是要重新定义如何进行读取分片,以什么为key,什么为value
其中比较重要的方法如下:
1.
初始化工作
2.
获取当前的key
3.
获取当前的value
4.
获取当前的处理进度
5.
读取下一个key/value,返回读取结果
6.
关闭工作
其中context的nextKeyValue、getCurrentKey、getCurrentValue都是该方法封装的
这个RecordReader将在自定义的inputFormat中的createRecordReader方法中返回
1.
protected boolean isSplitable(JobContext context,Path filename)
判断文件是否可分割,通常是可分割的,以换行符进行分割,但如果文件是压缩的,将不可分割是否分割,可以自行重写FileInputFormat的isSplitable来控制
2.
public List<InputSplit> getSplits(JobContext job) throws IOException
getSplits方法会根据输入目录产生InputSplit数组, 每个InputSplit会相应产生一个map任务, map的输入定义在InputSplit中,其中,Split中不包含实际的分片内容,而只是对实际信息的分片信息(即分片的元数据)。具体的说,每个分片中包含当前分片对应的文件路径,当前分片在该文件中起始位置,当前分片的长度以及对应的实际数据所在的节点列表。
3.
public RecordReader<K,V> createRecordReader(InputSplit split ,TaskAttemptContext context) throws IOException,InterruptedException
这是InputFormat类的方法,该方法返回RecordReader,来决定如何读取每个分片内容
RecordReader类告诉hadoop以哪种方式从分片中读取一条记录record,每读取一条记录都会调用RecordReader类;系统默认的RecordReader是LineRecordReader,如TextInputFormat;LineRecordReader是用每行的偏移量作为map的key,每行的内容作为map的value;重写该类是要重新定义如何进行读取分片,以什么为key,什么为value
其中比较重要的方法如下:
1.
public abstract void initialize(InputSplit split, TaskAttemptContext context) throws IOException, InterruptedException;
初始化工作
2.
public Text getCurrentKey() throws IOException,InterruptedException
获取当前的key
3.
public BytesWritable getCurrentValue() throws IOException, InterruptedException
获取当前的value
4.
public float getProgress() throws IOException, InterruptedException
获取当前的处理进度
5.
public boolean nextKeyValue() throws IOException
读取下一个key/value,返回读取结果
6.
public void close() throws IOException
关闭工作
其中context的nextKeyValue、getCurrentKey、getCurrentValue都是该方法封装的
这个RecordReader将在自定义的inputFormat中的createRecordReader方法中返回
相关文章推荐
- Telerik RadGrid Demo
- Android应用--QR的生成(二维码)
- QQ三方登录步骤详解
- 引入源码
- win10预览版10136更新了什么?win10手机预览版10136更新内容大全
- C#中Decimal类型截取保留N位小数并且不进行四舍五入操作
- Mac 忘记密码
- Java Too many open files Linux
- 对别人的理解
- iOS开发 UIDatePicker的创建与使用
- 关于Weblogic线程数的几点使用
- 120011111111QEMU中启动单虚拟机并已TAP/TUN方式联网的方法请参见:QEMU中启动单虚拟机并已TAP/TUN方式联网的方法请参见:QEMU中启动单虚拟机并已TAP/TUN方式联网的方
- UI设计:Android Wear - Design Principles for Android Wear(设计准则)
- Android 屏幕实现水龙头事件
- IOs 推送
- 深入浅出MyBatis-MapperBuilder
- MyCAT监控命令
- 安卓登陆矿记住密码和自动登录的实现
- (转)完整java开发中JDBC连接数据库代码和步骤
- 二个硬盘对拷系统的方法