学习 HDFS(三):写文件

写流程

HDFS 客户端写流程:

  1. 客户端连接 NameNode 请求打开写入文件,NameNode 创建文件元数据。此时,并没有与文件元数据相对应的数据块。

  2. 客户端向 NameNode 请求复制管道(Replication Pipeline),并向管道中的第一个 DataNode 写入数据。

  3. 复制管道中的第一个 DataNode 又将数据复制到管道下一个 DataNode。

  4. 关闭文件。

HDFS Write Path

Java API

public static void write(String path, String content) {  
    Configuration conf = new Configuration();
    try (FileSystem fs = FileSystem.get(new URI("hdfs://nameservice1"), conf, "hdfs")) {
        Path p = new Path(path);

        if (!fs.exists(p)) {
            try (FSDataOutputStream out = fs.create(p)) {
                out.write(content.getBytes(Charsets.UTF_8));
            }
        } else {
            // 文件已存在
            logger.warn("文件 {} 已存在", path);
        }
    } catch (URISyntaxException | InterruptedException | IOException e) {
        logger.error("写文件错误", e);
        throw new RuntimeException(e);
    }
}