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

🌌 注册office365邮箱 ⏱️ 2025-10-03 23:10:02 👤 admin 👁️ 1270 ⭐ 234
IDEA如何导入hadoop源码和HDFS的目录结构分析

1.HDFS源码结构分析

1.1 IDEA导入hadoop源码

hadoop源码的下载地址为(https://archive.apache.org/dist/hadoop/common/)

这个网站给出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的分布式环境已经搭建好了。

🛸 相关文章

中国的马拉松名人排名第几,10个最有名的跑步运动员
注册office365邮箱

中国的马拉松名人排名第几,10个最有名的跑步运动员

📅 07-11 👁️ 827
问心肺复苏机器叫什么
365提款多久到账

问心肺复苏机器叫什么

📅 08-11 👁️ 2088