HDFS(四)——Hadoop文件系统

173 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情

前言

HDFS是Hadoop生态中的一个文件系统之一,Hadoop有一个抽象的文件系统概念,HDFS只是其中的一个实现,Hadoop在org.apache.hadoop.fs.FileSystem的类中定义了一个文件系统需要的客户端接口。今天我们的主题就是介绍Hadoop的文件系统的概念以及如果使用Java接口操作HDFS

Hadoop文件系统

FileSystem类下有许多的实现类,主要有以下几种实现类:

  • Local。这是使用客户端校验和的本地磁盘文件系统。
  • HDFS。Hadoop的分布式文件系统,与Hadoop生态组件进行交互,实现高性能的文件存取操作。
  • WebHDFS。基于HTTP的文件系统,提供HDFS的认证读/写访问。
  • Secure WebHDFS。WebHDFS的HTTPS版本。
  • FTP。由FTP服务器支持的文件系统。

Hadoop一般使用URI方案选取合适的文件系统实例进行交互。每个文件系统都会有自己的文件URI协议,比如HDFS使用的就是hdfs://,FTP使用的就是ftp://。这里存在一个注意点就是Hadoop HTTP接口比原生的Java客户端接口要慢,不到万不得已,不要使用它来传输大数据量。

Java接口

在我们的大数据开发的过程中,都是使用Java的API接口来进行操作数据的。通过Hadoop的Path对象我们可以将路径视为一个Hadoop文件系统的URI。默认的Configuration获取/etc/hadoop/core-site.xml中的配置。

现在我们来通过Java接口的形式来获取文件的数据。使用URLStreamHandler实例以标准输出方式显示Hadoop文件系统的文件,具体代码如下:

public class URLCat {

    static {
        URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
    }

    public static void main(String[] args) throws Exception {
        InputStream in = null;
        try {
        // 可以指定HDFS的文件路径
//            in = new URL("hdfs://localhost/user/jackpan/sample_mnm.txt").openStream();
            // 可以通过参数传递
            in = new URL(args[0]).openStream();
            IOUtils.copyBytes(in, System.out, 4096, false);
        } finally {
            IOUtils.closeStream(in);
        }
    }
}

总结

今天我们了解Hadoop的文件系统的多种类型,不只是只有HDFS一种,也通过一个Java API接口的案例获取文件数据并进行输出展示。