读Hadoop3.2源码,深入了解java调用HDFS的常用操作和HDFS原理

本文深入探讨了使用Java调用HDFS的常见操作,包括环境搭建、文件操作,并通过源码分析揭示了HDFS的写文件流程和核心原理,如文件系统、HDFS架构、租约机制、RPC和高可用特性。同时,介绍了如何访问云存储系统,以及Hadoop3.x引入的纠删码等新特性。
摘要由CSDN通过智能技术生成

本文将通过一个演示工程来快速上手java调用HDFS的常见操作。接下来以创建文件为例,通过阅读HDFS的源码,一步步展开HDFS相关原理、理论知识的说明。
说明:本文档基于最新版本Hadoop3.2.1

目录
一、java调用HDFS的常见操作
1.1、演示环境搭建
1.2、操作HDFS
1.3、java文件操作常用方法
二、深入了解HDFS写文件的流程和HDFS原理
2.1、Hadoop3.2.1 源码下载及介绍
2.2、文件系统:FileSystem
2.3、HDFS体系结构:namenode、datanode、数据块
2.4、如何访问阿里云OSS等文件系统
2.5、文件租约机制
2.6、RPC机制
2.7、HDFS客户端写流程总结
2.8、Hadoop3.x新特性:纠删码
2.9 文件透明加密处理和目录树
2.10、HDFS客户端写流程总结


一、java调用HDFS的常见操作

首先我们搭建一个简单的演示工程(演示工程使用的gradle,Maven项目也同样添加以下依赖),本次使用的是Hadoop最新的3.2.1。

1.1、演示环境搭建

新增一个普通的java工程即可,过程略,添加hdfs相关依赖jar包

implementation ('org.apache.hadoop:hadoop-common:3.2.1')
implementation ('org.apache.hadoop:hadoop-hdfs:3.2.1')
implementation ('org.apache.hadoop:hadoop-mapreduce-client-core:3.2.1')
implementation ('org.apache.hadoop:hadoop-client:3.2.1')

在实际运行过程中,可能会发现日志Jar包冲突问题,排除掉即可

exclude group:'org.slf4j',module: 'slf4j-log4j12'

1.2、操作HDFS

以创建文件为例,代码如下。可以看到java操作hdfs就是这么简单、丝滑,so easy!

    public static void main(String[] args) throws IOException {
   
        // 配置对象
        Configuration configuration = new Configuration();
        configuration.set("fs.defaultFS", "hdfs://172.22.28.202:9000");
        // HDFS文件系统的操作对象
        FileSystem fileSystem = FileSystem.get(configuration);
        // 创建文件。
        FSDataOutputStream outputStream =
            fileSystem.create(new Path("/hdfs/madashu/test"));
        // 写入文件内容
        outputStream.write("你好Hadoop,我是码大叔".getBytes());
        outputStream.flush();
        IOUtils.closeStream(outputStream);
    }

1.3、java文件操作常用方法

参照第2步文件创建的操作,我们可以预定义好Configuration和FileSystem,然后提取出HDFSUtil的工具类出来。涉及到文件方面的操作基本只需要hadoop-common包下的FileSystem就足够了,一些常用方法的说明:

//文件是否存在
fileSystem.exists(new Path(fileName));
//创建目录
fileSystem.mkdirs(new Path(directorName));
//删除目录或文件,第二个参数表示是否要递归删除
fileSystem.delete(new Path(name), true);
//获取当前登录用户在HDFS文件系统中的Home目录
fileSystem.getHomeDirectory();
//文件重命名
fileSystem.rename(new Path(oldName), new Path(newName));
//读取文件,返回的是FSDataInputStream
fileSystem.open(new Path(fileName));
//创建文件,第二个参数表示文件存在时是否覆盖
fileSystem.create(new Path(fileName), false);
//从本地目录上传文件到HDFS
fileSystem.copyFromLocalFile(localPath, hdfsPath);
//获取目录下的文件信息,包含path,length,group,blocksize,permission等等
fileSystem.listStatus(new Path(directorName));
//释放资源
fileSystem.close();
//设置HDFS资源权限,其中FsPermission可以设置user、group等
fileSystem.setPermission(new Path(resourceName), fsPermission);
//设置HDFS资源的Owner和group
fileSystem.setOwner(new Path(resourceName), ownerName, groupName);
//设置文件的副本
fileSystem.setReplication(new Path(resourceName), count);

二、深入了解HDFS写文件的流程和HDFS原理

文件操作的方法比较多,本期我们以create方法为例,来通过阅读源码深入了解下hdfs写文件的流程和原理,代码参见1.2 。

2.1、Hadoop3.2.1 源码下载及介绍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值