大数据学习案例——使用Java API操作HDFS

通过Java API演示如何操作HDFS分布式文件系统的文件和目录。

1.配置案例环境

1)打开IntelliJ IDEA

打开IntelliJ IDEA开发工具,进入到Welcome to IntelliJ IDEA窗口。
在这里插入图片描述

2)新建Maven项目

在New Project对话框,选择创建项目的类型为Maven项目。

在这里插入图片描述

3)配置Maven项目

在New Project对话框,对创建的Maven项目进行配置。
在这里插入图片描述

4)配置项目名称和存储目录

在New Project对话框,分别指定项目名称和项目存储目录。
在这里插入图片描述

2.添加Maven库依赖

在pom.xml文件中,添加Maven库依赖。

<dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>3.3.0</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>3.3.0</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.3.0</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency>

在这里插入图片描述
在这里插入图片描述

单击IntelliJ IDEA开发工具右侧的“Maven”→“Dependencies”按钮,即可查看到相关的jar包。

在这里插入图片描述

3.获取客户端对象

在HadoopDemo项目中创建cn.itcast.hdfsdemo包,在该包下创建HDFS_CURD类,构建HDFS的客户端实例。

第一步:创建init()方法

public void init() {  }  

第二步:指定HDFS配置信息

Configuration conf = new Configuration();  

第三步:指定HDFS中NameNode节点的通信地址,连接HDFS

conf.set("fs.defaultFS", "hdfs://hadoop1:9000");

第四步:指定具有操作HDFS权限的用户root。

System.setProperty("HADOOP_USER_NAME", "root");

第五步:调用FileSystem类的get()方法获取conf对象指定的配置信息,并创建操作HDFS的对象fs。

fs = FileSystem.get(conf); 

4.上传文件到HDFS

在HDFS_CURD类中添加方法testAddFileToHdfs(),用于将本地文件系统中,D:\upload\路径下的文件test.txt上传到HDFS的/testFile目录,且该目录必须存在。

 @Test
public void testAddFileToHdfs() throws IOException {
	Path src = new Path("D:\\upload\\test.txt");
	Path dst = new Path("/testFile");
	fs.copyFromLocalFile(src, dst);
	fs.close();
}

在这里插入图片描述

在HDFS_CURD类中添加方法testDownloadFileToLocal(),用于将HDFS中/testFile目录下的文件test.txt下载到本地文件系统的D:\downloadFile路径。

5.从HDFS下载文件

在HDFS_CURD类中添加方法testDownloadFileToLocal(),用于将HDFS中/testFile目录下的文件test.txt下载到本地文件系统的D:\downloadFile路径。

@Test
public void testDownloadFileToLocal() throws IllegalArgumentException,IOException {
    fs.copyToLocalFile(
new Path("/testFile/test.txt"), 
new Path("D:\\downloadFile"));
}

在这里插入图片描述

6.目录操作

在HDFS_CURD类中添加方法testMkdirAndDeleteAndRename(),用于对HDFS的目录进行操作,包括创建目录、重命名目录和删除目录。

@Test
public void testMkdirAndDeleteAndRename() throws Exception {
	fs.mkdirs(new Path("/a/b/c"));
	fs.mkdirs(new Path("/a2/b2/c2"));
	fs.rename(new Path("/a"), new Path("/a3"));
	fs.delete(new Path("/a2"), true);
}

在这里插入图片描述

7.查看文件中的目录信息

在HDFS_CURD类中添加方法testListFiles(),用户获取/car目录中所有文件的信息包括文件名、文件大小、文件权限等。在/car目录中包含文件car_prices.csv和子目录/other,并且在子目录中包含文件car_prices1.csv和car_prices2.csv。

第一步: 创建testListFiles() 方法。

public void testListFiles() {}

第二步:递归获取/car目录下文件的信息。

RemoteIterator<LocatedFileStatus> listFiles =fs.listFiles(new Path("/car"), true);

第三步:获取每个文件的名称、副本数、权限、大小和Block所在服务器的主机名。

while (listFiles.hasNext()) {
        LocatedFileStatus fileStatus = listFiles.next();
       System.out.println("文件名:" + fileStatus.getPath().getName());
       System.out.println("文件的副本数:" + fileStatus.getReplication());
       System.out.println("文件的权限:" + fileStatus.getPermission());
       System.out.println("文件大小:" + fileStatus.getLen() + "字节");
       BlockLocation[] blockLocations =fileStatus.getBlockLocations();
         for (BlockLocation bl : blockLocations) {
            String[] hosts = bl.getHosts();
            System.out.println("文件的Block所在虚拟机的主机名:");
            for (String host : hosts) {
                System.out.println(host);
            }
        System.out.println("----------------------------");
    }

如果此时你报了: java.io.FileNotFoundException: java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset. -see https://wiki.apache.org/hadoop/WindowsProblems的错误,说明,你没有在Windows中配置Hadoop的运行环境,详细解决方案请看https://blog.csdn.net/2301_76901778/article/details/144332904?spm=1001.2014.3001.5501

8.运行HDFS_CURD类

选中HDFS_CURD类,右键选择“Run HDFS_CURD”选项运行。
在这里插入图片描述

9.查看HDFS下载到本地文件系统的文件

在本地文件系统的D:\downloadFile路径查看从HDFS的/testFile目录下载的文件。

在这里插入图片描述

10.查看HDFS的目录

在虚拟机Hadoop1执行命令查看HDFS根目录的内容,以及查看/testFile目录的内容。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值