学习 HDFS(二):读文件

读流程

HDFS 客户端读流程:

  1. 客户端连接 NameNode 并指定读取文件所在路径。首先,NameNode 对客户端进行身份认证,通过用户名(弱)或者 Kerberos(强)。然后,NameNode 对客户端进行权限认证。如果文件存在且用户可以访问,NameNode 向客户端返回文件所有数据块的数据块 ID 和数据块所在的 DataNode 主机地址。

  2. 通过数据块 ID 和数据块所在的 DataNode 主机地址,客户端直接连接 DataNode 并读取数据块数据,直到读完文件所有数据块,客户端关闭文件流。

HDFS Read Path

Java API

public static String read(String path) {  
    String content = null;

    Configuration conf = new Configuration();
    try (FileSystem fs = FileSystem.get(new URI("hdfs://MASTER:8020"), conf, "dyingbleed")) {
        Path p = new Path(path);

        if (fs.exists(p)) {
            FSDataInputStream in = fs.open(p); // ①
            content = IOUtils.toString(in);
        } else {
            // 文件不存在
            logger.warn("文件 {} 不存在", path);
        }
    } catch (URISyntaxException | InterruptedException | IOException e) {
        logger.error("读文件错误", e);
    }

    return content;
}

① 打开文件,返回文件输入流