Dream------Hadoop--FSDataInputStream和FSDataOutputStream

一、FSDataInputStream

   FileSystem中的open()方法实际上返回的是一个FSDataInputStream,而不是标准的java.io类。这个类是java.io.DataInputStream

   的一个子类,支持随机访问,这样就可以从流的任何位置读取数据了

  public class FSDataInputStream extends DataInputStream

       implements Seekable, PositionedReadable,

       ByteBufferReadable, HasFileDescriptor, CanSetDropBehind, CanSetReadahead,

       HasEnhancedByteBufferAccess {。。。。。}

  

   Seekable接口允许在文件中定位,并提供一个查询方法,用于查询当前位置相对于文件开始处的偏移量(getpos())

   public interfence Seekable{

   void seek(long pos) throws IOException;

    long getPos() throws IOException;

    boolean seekToNewSource(long targetPos) throws IOException;

   }

   调用seek() 来定位大于文件长度的位置会导致IOException异常。与java.io.InputStream 中的skip() 不同,seek()并

  没有指出数据流当前位置之后的一点,它可以移到文件中任意一个绝对位置。

  应用程序开发人员并不常用seekToNewSource()方法。此方法一般倾向于切换到数据的另一个副本并在新的副本中寻找targetPos指定的位置。

  HDFS内部就采用这样的方法在数据节点故障时为客户端提供可靠的数据输入流。

   

  FSDataInputStream也实现了PositionedReadable接口,从一个指定位置读取一部分数据

 

 

二、FSDataOutputStream

Hadoop 的FileSystem中的create()方法返回了一个FSDataOutputStream,与FSDataInputStream类似,

它也有一个查询文件当前位置的方法:

public class FSDataOutputStream extends DataOutputStream

    implements Syncable, CanSetDropBehind {

............

...........

 public long getPos() throws IOException {

      return position;                            // return cached position

    }

 

}

 

 

但是,与FSDataInputStream不同,FSDataOutputStream不允许定位。这是因为HDFS只允许对一个打开的文件

顺序写入,或向一个已有文件添加。换句话说,它不支持文件尾部的其他位置的写入,这样一来,写入时的定位就没有什么意义。

 -------------------引自Hadoop权威指南第三版

时间: 2024-10-31 21:41:18

Dream------Hadoop--FSDataInputStream和FSDataOutputStream的相关文章

hadoop文件系统浅析

1.什么是分布式文件系统? 管理网络中跨多台计算机存储的文件系统称为分布式文件系统. 2.为什么需要分布式文件系统了? 原因很简单,当数据集的大小超过一台独立物理计算机的存储能力时候,就有必要对它进行分区(partition)并存储到若干台单独计算机上. 3.分布式系统比传统的文件的系统更加复杂 因为分布式文件系统架构在网络之上,因此分布式系统引入了网络编程的复杂性,所以分布式文件系统比普通文件系统更加复杂. 4.Hadoop的文件系统 很多童鞋会把hdfs等价于hadoop的文件系统,其实ha

hadoop2.5.2学习及实践笔记(六)—— Hadoop文件系统及其java接口

文件系统概述 org.apache.hadoop.fs.FileSystem是hadoop的抽象文件系统,为不同的数据访问提供了统一的接口,并提供了大量具体文件系统的实现,满足hadoop上各种数据访问需求,如以下几个具体实现(原表格见<hadoop权威指南>): 文件系统 URI方案 Java实现 (org.apache.hadoop) 定义 Local file fs.LocalFileSystem 支持有客户端校验和本地文件系统.带有校验和的本地系统文件在fs.RawLocalFileS

hadoop学习笔记:hadoop文件系统浅析

1.什么是分布式文件系统? 管理网络中跨多台计算机存储的文件系统称为分布式文件系统. 2.为什么需要分布式文件系统了? 原因很简单,当数据集的大小超过一台独立物理计算机的存储能力时候,就有必要对它进行分区(partition)并存储到若干台单独计算机上. 3.分布式系统比传统的文件的系统更加复杂 因为分布式文件系统架构在网络之上,因此分布式系统引入了网络编程的复杂性,所以分布式文件系统比普通文件系统更加复杂. 4.Hadoop的文件系统 很多童鞋会把hdfs等价于hadoop的文件系统,其实ha

hadoop文件系统与I/O流

本文地址:http://www.cnblogs.com/archimedes/p/hadoop-filesystem-io.html,转载请注明源地址. hadoop借鉴了Linux虚拟文件系统的概念,引入了hadoop抽象文件系统,并在此基础上,提供了大量的具体文件系统的实现,满足构建于hadoop上应用的各种数据访问需求 hadoop文件系统API hadoop提供一个抽象的文件系统,HDFS只是这个抽象文件系统的一个具体的实现.hadoop文件系统的抽象类org.apache.hadoop

【大数据系列】使用api修改hadoop的副本数和块大小

package com.slp.hdfs; import org.apache.commons.io.output.ByteArrayOutputStream; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.F

大数据学习---Hadoop的深入学习

Hadoop生态圈 存储数据HDFS(Hadoop Distributed File System),运行在通用硬件上的分布式文件系统.具有高度容错性.高吞吐量的的特点. 处理数据MapReduce,它是一种编程模型,Map(映射)和Reduce(归约),它极大地方便了分布式并行编程,与hdfs的高度融合,它是基于java来进行编程的. 数据仓库工具Hive,处理结构化SQL查询功能,将sql语句解释为MapReduce编程进行数据的处理,只能进行结构化的查询. Pig MapReduce之上的

Hadoop之HDFS(客户端操作) 2 HDFS的API操作 3 HDFS的I/O流操作

2 HDFS的API操作 2.1 HDFS文件上传(测试参数优先级) 1.编写源代码 // 文件上传 @Test public void testPut() throws Exception { Configuration conf = new Configuration(); conf.set("dfs.replication", "2"); // 1.获取fs对象 FileSystem fs = FileSystem.get(new URI("hdfs

Java API操作HDFS

HDFS是存储数据的分布式文件系统,对HDFS的操作,就是对文件系统的操作,除了用HDFS的shell命令对文件系统进行操作,我们也可以利用Java API对文件系统进行操作,比如文件的创建.删除.修改权限等等,还有文件夹的创建.删除.重命名等等. 使用Java API对文件系统进行操作主要涉及以下几个类: 1.Configuration类:该类的对象封装了客户端或者服务端的配置. 2.FileSystem类:该类的对象是一个文件系统对象,可以利用该对象的一些方法来对文件进行操作,FileSys

HDFS中JAVA API的使用

转自:http://www.cnblogs.com/liuling/p/2013-6-17-01.html 相关源代码:http://www.cnblogs.com/ggjucheng/archive/2013/02/19/2917020.html HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的文件进行操作的过程. 对分HDFS中的文件操作主要涉及一下几个类: Configurat

设计模式-装饰器模式(Decrator Model)

文 / vincentzh 原文连接:http://www.cnblogs.com/vincentzh/p/6057666.html 目录 1.概述 2.目的 3.结构组成 4.实现 5.总结 1.概述 装饰器模式在不改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.通常给一个对象添加功能,要么在类中直接进行修改,要么通过子类继承来扩展对象的功能,又或者使用装饰模式将相应的功能进行任意的组合,使功能的扩展变的具有灵活性和动态性.装饰模式是通过创建一个包装对象,也就是装饰来包裹真实的对象,