Hadoop入门1-输入输出流

来源:互联网 发布:软件产品质量缺陷等级 编辑:程序博客网 时间:2024/05/22 17:14

输入流读取目录数据

通过FileSystem类的open方法可以返回一个FSDataInputStream对象,该对象从DataInpuStream继承而来,一下是他的继承结构图:
继承结构图
获得输入流对象后调用IOUtils.copyBytes方法读取,代码如下

//读取给定路径文件数据并打印public static void main(String[] args){    String uri = args[0];//文件路径    Configuration conf = new Configuration();    FileSystem fs = FileSystem.get(URI.create(uri),conf);    InputStream in = null;    try{        in = fs.open(new Path(uri));        IOUtils.copyBytes(in,System.out,4096,false);        }finally{        IOUtils.closeStream(in);//一定要关闭输入流    }}

写入数据

写入数据通过create()方法返回FSDataOutputStream输出流,这种方式是创建一个新的文件,hdfs中支持追加写操作,需要使用append()方法来获取追加写的输出流,以创建的方式展示写数据的代码

public static void main(String[] args) throws Exception {        String localSrc = args[0];        String dist = args[1];        InputStream in = new BufferedInputStream(new FileInputStream(localSrc));        Configuration conf = new Configuration();        FileSystem fs = FileSystem.get(URI.create(dist),conf);        OutputStream out = fs.create(new Path(dist));        IOUtils.copyBytes(in,out,4096,true);    }

create()可以加入第二个参数,为Progressable接口对象,可以传递数据写入的进度,使用匿名内部类来完成传参:

fs.create(new Path(dist),new Progressable(){    public void progress(){        System.out.println('.');    }});