IDEA如何导入hadoop源码和HDFS的目录结构分析

1.HDFS源码结构分析

1.1 IDEA导入hadoop源码

hadoop源码的下载地址为(https://archive.apache.org/dist/hadoop/common/)
这个网站给出hadoop的所有发行版本可以根据自己的需求下载。
hadoop下载地址
我在这里下载的hadoop 3.1.4,下载后解压到本地。
在这里插入图片描述
然后打开idea导入项目就行了,这里要注意配置maven,而且maven的存放目录不要和hadoop放在一起,而且要根据hadoop的版本来下载对象的maven,我这里下载的maven-3.9.4,关于maven的下载和配置可以自行搜索相关文章进行配置。(注意版本不会下载依赖时会报错,这时个大坑,下载依赖报错一下弄了一天!)
然后在idea中配置maven的本地路径。
在这里插入图片描述然后打开maven刷新下载依赖,只需要静静等待就行,可能会需要十几分钟的时间,如果爆红就代表相关的插件和依赖没导进来,关闭重启再试几次,不行就下载其他的maven版本。
在这里插入图片描述

1.2 HDFS工程结构和作用

1.2.1 hadoop-hdfs-project模块

这个模块主要实现了网络、传输协议、JN、安全、server服务、数据块的存储策略等相关功能。是 hdfs 的核心模块。并且提供了 hdfs web UI 页面功能的支撑。
在这里插入图片描述

1.2.2 haoop-hdfs-client模块

在hadoop-hdfs-client模块中,主要定义实现了和 hdfs 客户端相关的功能逻辑,比如创建文件夹、写数据和读数据,都是通过这个模块和datanode和namenode进行交互的,底层使用的是RPC协议。
在这里插入图片描述

1.2.3 hadoop-hdfs-httpfs模块

hadoop-hdfs-httpfs模块主要实现了通过HTTP协议操作访问hdfs文件系统的相关功能。HttpFS 是一种服务器,它提供到 HDFS 的 REST HTTP 网关,具有完整的文件系统读写功能。
  HttpFS 可用于在运行不同Hadoop版本的群集之间传输数据(克服 RPC 版本问题),例如使用 Hadoop DistCP。
在这里插入图片描述

1.2.4 hadoop-hdfs-native-client模块

这个模块定义了hdfs访问本地库的相关功能和逻辑。该模块主要是使用 C 语言进行编写,用于和本地库进行交互操作。
在这里插入图片描述

1.2.5 hadoop-hdfs-nfs模块

这模块是Hadoop HDFS的NFS实现。
在这里插入图片描述

1.2.6 hadoop-hdfs-rbf

这个模块是 hadoop3.0 之后的一个新的模块。主要实现了 RBF 功能。RBF 是 Router-based Federation 简称,翻译中文叫做:基于路由的 Federation 方案。
  简单来说就是:HDFS 将路由信息放在了服务端来处理,而不是在客户端。以此完全做到对于客户端的透明。
在这里插入图片描述

1.3 编写Java API 来执行读写流程

具体的Java代码如下:

#写操作
package com.atguigu.hdfs;

import org.apache.commons.io.IOUtils;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;

import java.io.FileInputStream;

import org.apache.hadoop.fs.*;

public class HDFSWriteDemo {
    public static void main(String[] args)throws Exception {
        //设置客户用户身份:root 具备在hdfs读写权限
        System.setProperty("HADOOP_USER_NAME","root");
        //创建conf对象
        Configuration conf= new Configuration();
        //设置操作的文件系统是HDFS默认是file:///
        conf.set("fs.defaultFS","hdfs://hadoop102:8020");
        //创建FileSystem对象,是一个通用的文件系统的抽象基类
        FileSystem fs = FileSystem.get(conf);
        //设置文件输出的路径
        Path path = new Path("/helloworld.txt");
        //调用create方法创建文件
        FSDataOutputStream out = fs.create(path);
        //创建本地文件输入流
        FileInputStream in = new FileInputStream("D:\\datasets");
        //IO工具类实现流对拷贝
        IOUtils.copy(in,out);
        //关闭连接
        fs.close();
    }
}
#读操作
package com.atguigu.hdfs;

import org.apache.commons.io.IOUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class HDFSReadDemo {
    public static void main(String[] args) throws Exception {
        //设置客户用户身份:root 具备在hdfs读写权限
        System.setProperty("HADOOP_USER_NAME","root");
        //创建conf对象
        Configuration conf= new Configuration();
        //设置操作的文件系统是HDFS默认是file:///
        conf.set("fs.defaultFS","hdfs://hadoop102:8020");
        //创建FileSystem对象,是一个通用的文件系统的抽象基类
        FileSystem fs = FileSystem.get(conf);
        //设置文件输出的路径
        Path path = new Path("/helloworld.txt");
        //调用open方法创建文件
        FSDataInputStream in = fs.open(path);
        //创建本地文件输输出流
        FileOutputStream out = new FileOutputStream("D:\\datasets");
        //IO工具类实现流对拷贝
        IOUtils.copy(in,out);
        //关闭连接
        fs.close();
    }
}

注意要分析源码首先hadoop的分布式环境已经搭建好了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值