未完待续 HDFS中使用hadoop url来读取数据

一、使用hadoop url读取数据

从hadoop中的hdfs分布式文件系统中来读取数据,最简单的方法是通过使用java.net.URL对象来打开一个数据流,并从中读取数据,因此,一般的调用格式如下:

InputStream in = null;
try
{
      in = new URL("hfs:///文件路径").openStream();   
}
finally
{
      IOUtils.closeStream(in);
}

这里需要注意的是,通过FsUrlStreamHandlerFactory实例来调用url中的setURLStreamHandlerFactory方法。这种方法在一个java虚拟机中只能调用一次,因此放在一个静态方法中来执行。因此如果程序的其他部分也设置了同样的这个对象,那么就会导致无法从hadoop读取数据。

接下来从hdfs上读取/data/input/test.log中的数据,采用如下代码实现:

public class URLCat
{
    static
    {
        URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory()); //放在static中
    }
    public static void main(String[] args) throws Exception
    {
        InputStream in = null;
        try
        {
            in = new URL(args[0]).openStream();     //其中args[0]表示的就是在命令行中输入的要访问的url的地址
            IOUtils.copyBytes(in,System.out,4096,false); //使用hadoop中简洁的IOUtils类来关闭finally子句中的数据流,同时复制了输出流之间的字节(System.out),用到了copyBytes方法,其中4096参数表示的是复制缓冲区的大小,false表示的是复制后关闭数据流。
        }
        finally
        {
            IOUtils.closeStream(in);
        }
    }
}


上述代码通过打jar包后,放在hadoop运行,且第一个参数表示的是需要查看的文件的url地址,注意要使用hdfs:///表示


二、使用FileSystem API读取数据


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值