HDFS的Java API 操作

本文详细介绍了如何在Windows环境下使用eclipse连接Hadoop集群,包括配置环境变量、搭建开发环境、获取FileSystem实例及利用Java API进行HDFS文件操作的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HDFS的JavaAPI操作

1.Windows 下 eclipse 远程连接 Hadoop 集群
(1)下载 eclipse 开发工具,解压并安装。
下载网址:https://www.eclipse.org/downloads/
(2)下载Hadoop Eclipse 插件 hadoop-eclipse-plugin-2.6.5.jar,将其放入 eclipse 安装目录 plugins 文件夹中。
在这里插入图片描述
(3)解压安装windows平台编译hadoop2.6.5安装包windows-hadoop-2.6.5.zip,解压路径最好不要带中文。

(4)在Windows系统中配置Hadoop环境变量。
HADOOP_HOME:windows-hadoop-2.6.5.zip的解压路径
PATH:%HADOOP_HOME%\bin;%HADOOP_HOME%\sbin;
在这里插入图片描述
(5)启动eclipse,在 eclipse 的左侧“Project Explorer”下会看到“DFS Locations”。

(6)“Window”->“Preferences” -> “Hadoop Map/Reduce”,配置hadoop2.6.5 解压的路径,配置完成,点击“Apply”->“OK”。

在这里插入图片描述
注:如果不行把步骤2安装目录改为dropins下的plugin,没有的话新建一个plugin放入

(7)“Window”->“Show View”->“Other”-> “Map/Reduce Locations”-> “OK”。
在这里插入图片描述
(8)在 eclipse 的下端出现一个显示框,点击图中蓝色的小象图标。
在这里插入图片描述
(9)根据对话框的提示修改相应的信息,如图所示。
在这里插入图片描述
(10)修改完成,点击“Finish”。在 eclipse 的下端会出现如图信息。
在这里插入图片描述
(11)在 eclipse 的左侧“Project Explorer”的“DFS Locations”下会看到如图信息。
在这里插入图片描述

2.搭建开发环境(建立普通 Java 工程,加入操作 HDFS 的 jar 包)

先创建一个工程:
在这里插入图片描述
(1) 在项目名称上右键单击“Build Path”,然后单击右边出现的“Configure Build Path”,选择“Libraries”,单击“Add Library…”,如图所示:
在这里插入图片描述
(2) 选择“User Library”->“Next”,如图所示:
在这里插入图片描述
(3) 之后单击“User Libraries…”,如图所示:
在这里插入图片描述
(4) 点击“New…”,如图所示:
在这里插入图片描述
(5) 在弹出的对话框中输入 User library name,这里我输入的是“HDFSLib”,之后点击“OK”,如图所示
在这里插入图片描述

(6) 选择“HDFSLib”,点击“Add External JARs…”,如图所示:
在这里插入图片描述

(7) 将“hadoop-2.6.5.tar.gz”解压到一个文件夹下,我这里解压的目录是D:\software\hadoop-2.6.5。在弹出的对话框中选择D:\software\hadoop-2.6.5\share\hadoop\common下的3个jar包和lib下所有的jar包,如图所示:
在这里插入图片描述

(8) 再继续添加D:\software\hadoop-2.6.5\share\hadoop\hdfs下的3个jar包和lib下所有的jar包,如图所示:
在这里插入图片描述
(9) 添加完毕之后,点击“OK”,再点击“Finish”,再点击“OK” ,看到 eclipse 左侧“Project Explorer”项目名称下出现我们添加的依赖库,如图所示:
在这里插入图片描述

3.FileSystem 实例获取讲解

1.引入

在Java中操作HDFS,首先要获取一个客户端实例:
Configuration conf=new Configuration();
FileSystem fs=FileSystem.get(conf);
get 方法是从何处判断具体实例化哪种客户端类呢?
从 conf 中的一个参数 fs.defaultFS 的配置值判断。

2.获取fs对象
第一种:通过配置获取fs对象

代码中没有设置“fs.defaultFS”参数;工程 classpath 下没有相应的配置文件
读取hadoop jar包core-default.xml的默认值 file:///,获取的是本地文件系统的实例
配置信息:

第二种:直接获取fs对象

Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(new URI(“hdfs://hadoop01:9000”), conf, “shiny”);
不需要配置“fs.defaultFS”参数,直接传入URI和用户身份

4.利用Java API操作HDFS文件

配置信息:

Configuration conf = null;
FileSystem fs = null;
@Before
public void setup() throws IOException, InterruptedException, URISyntaxException {
//获取配置信息类
conf = new Configuration();
//获取fs对象
fs = FileSystem.get(new URI("hdfs://master:9000"), conf, "theone");
}

创建目录:

fs.mkfirs(Path f)
示例: boolean mkdirs=fs.mkdirs(new Path("/1213"));
	  System.out.println(mkdirs);

上传文件:

src:源路径;dst:目标路径
fs.copyFromLocalFile(path src, path dst) //默认不删除本地源文件,覆盖HDFS同名文件
示例:Path src=new Path("D:/software/hadoop-2.6.1/README.txt");
	 Path dst=new Path("/");
	 fs.copyFromLocalFile(src, dst);

下载文件:

fs.copyTpLocalFile(Path src,Path dst)
示例:
Path src=new Path("/hi.txt");
Path dst=new Path("D:/");
fs.copyToLocalFile(src, dst);

重命名文件或者文件夹

 //重命名文件
fs.rename(new Path("/hi.txt"), new Path("/hello.txt"));

//重命名文件夹
fs.rename(new Path("/123"), new Path("/456"));

删除文件或者文件夹

	fs.delete(Path f, boolean recursive); 
	 recursive:是否递归,若是文件或空文件夹则为false,非空文件夹则为true

//删除文件夹

fs.delete(new Path("/456"), true);

查看指定路径中文件状态和块信息
文件信息

文件路径:.getPath();
文件名称:.getPath().getName();
文件父目录:.getPath().getParent();
文件拥有者:.getOwner();
文件所属组:.getGroup();
文件块的大小:.getBlockSize();
文件长度:.getLen();
文件权限:.getPermission();
文件副本个数:.getReplication();

块信息

//数据块信息
BlockLocation[] blockLocations = next.getBlockLocations();
//遍历数组
for (BlockLocation block : blockLocations) {
    System.out.println("数据块的大小:" + block.getLength() + "\t偏移量" + block.getOffset());
    //获取数据块所在的DataNode信息
String[] hosts = block.getHosts();
System.out.println("所在DataNode信息");
for (String datanode : hosts){
    System.out.println(datanode + "");
}

查看指定路径中文件/目录的状态
 fs.listStatus(Path f);
 是否是目录:.isDirectory();  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值