大数据-十三

通过FileSystem API读取数据


hadoop文件系统中通过Hadoop
Path对象(而非java.io.File对象)代表文件,可以将路径视为一个hadoop文件系统URI,如hdfs://localhost/user/tom/quangle.txt


FileSystem是一个通用的文件兄台你API,所以第一步是检索我们需要使用的文件系统实例,这里是HDFS,获取FileSystem实例有以下几个静态工厂方法;

public static FileSystem get(Confuration conf)throws IOException

public static FileSystem get(URI url,Configuration conf)throws IOException

public static FIleSystem get(URI url, Configuration conf,String user)throws IOException

COnfiguration 对象封装了客户端或者服务器的配置,通过配置文件读取类路径来实现(etc/hadoop/core-site.xml)

获取本地文件系统可以使用getLcal()方法;

public static LocalFileSystem getLocal(Configuration conf) throws IOException

有了FileSystem实例之后,我们调用open()函数来获取文件的输入流;

public FSDataInputStream open(Path f) throws IOException

public abstract FSDataInputStream open(Paht f,int buferSize) throws IOException

第一个方法默认缓冲区大小4kB


总的来说就是选取路径,选取文件系统配置(何种文件系统),然后由此创建FileSystem对象,将此对象的open方法作为输入流读取;然后字节读取,输出;


直接使用FIleSystem以标准的格式显示Hadoop文件系统中的文件

public class FileSystemCat
{
    public static void main(String args[])
    {
        String uri=args[0];
        Configuration conf =new Configuration();
        FileSystem fs=new FileSystem(URI.create(uri),conf);
        InputStream in=null;
        in=fs.open(fs);
        try{
            IOUtil.copyBytes(in,System.out,4096,false)
        }finally{
            IOUtil.closeStream(in);
        }
    }
}


FSDataInputStream 对象不是标准的java.io类对象,而是继承了java.io.DataInputStream接口的一个特殊类,并支持随机访问,因此可以在流的任意位置读取数据;



该类支持了Seekable接口,所以可以通过文件的起始位置偏移量(getPos())来查询;定位位置的使用seek(long pos);
当调用seek()来定位大于文件长度的位置会引发IOException异常。与java.io.InputStream的skip()不同,seek可以移到文件中任意一个绝对位置,skip()则只能相对于当前位置定义另一个新位置;

public interface Seekable
{
    void seek(long pos) throws IOException;
    long getPos() throws IOException;
    boolean seekToNewSource(long targetPos) throws IOException;
}






youle 





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值