登录
首页精彩阅读从HadoopURL中读取数据
从HadoopURL中读取数据
2017-06-06
收藏

HadoopURL中读取数据

要从Hadoop文件系统中读取文件,最简单的方法是使用java.net.URL对象打开数据流,进而从中读取数据。具体格式如下。

InputStreamin=null;
  try{
    in=new URL(“hdfs://host/path”).openStream();
    //process in
  } finally{
    IOUtils.closeStream(in);
  }

让Java程序能够识别Hadoop的hdfs URL方案还需要一些额外的工作。这里采用的方法是通过FsUrlStreamHandlerFactory实例调用URL中的setURLStreamHandlerFactory方法。由于Java虚拟机只能调用一次上述方法,因此通常在静态方法中调用上述方法。这个限制意味着如果程序的其他组件(如不受你控制的第三方组件)已经声明了一个URLStreamHandlerFactory实例,将无法再使用上述方法从Hadoop中读取数据。例5-1展示的程序以标准输出方式显示Hadoop文件系统中的文件,类似于Unix中的cat命令。

例5-1 以标准输出方式显示Hadoop文件系统中的文件。

public classURLCat{
static{
    URL.setURLStreamHandlerFactory(newFsUrlStreamHandlerFactory());
}
public static void main(String[] args) throws Exception{
    InputStream in=null;
    try{
       in=new URL(args [0] ).openStream();
       IOUtils.copyBytes(in, System.out.4096, false);
    } finally{
        IOUtils. closeStream(in);
    }

}

}

可以调用Hadoop中简洁的IOUtils类,并在finally子句中关闭数据流,同时也可以在输入流和输出流之间复制数据(本例中为System. out)。copyBytes方法的最后两个参数,第一个用于设置复制的缓冲区大小,第二个用于设置复制结束后是否关闭数据流。这里选择自行关闭输入流,因而System.out不关闭输入流。

运行结果如下:


数据分析咨询请扫描二维码

客服在线
立即咨询