Hadoop——HDFS的Java API操作(文件上传、下载、删除等)

news2024/11/27 22:32:53

1、创建Maven项目

2、修改pom.xml文件

<dependencies>
        <!-- Hadoop所需依赖包 -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.7.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>2.7.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>2.7.0</version>
        </dependency>

        <!-- junit测试依赖,因为我只想测试HDFS是否能正常使用 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
</dependencies>

3、添加四个配置文件

为避免运行的一些错误,我们将Hadoop的四个重要配置文件添加到resources中

4、创建测试文件JavaAPI

5、初始化

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;

public class JavaAPI {
    // 可操作HDFS文件系统的对象
    FileSystem hdfs = null;

    // 测试方法执行前执行,用于初始化操作,避免频繁初始化
    @Before
    public void init() throws IOException {
        // 构造一个配置参数对象,设置一个参数:要访问的HDFS的URI
        Configuration conf = new Configuration();
        // 指定使用HDFS访问
        conf.set("fs.defaultFS","hdfs://localhost:9000");
        // 进行客户端身份的设置(root为虚拟机的用户名,hadoop集群节点的其中一个都可以)
        System.setProperty("HADOOP_USER_NAME","root");
        // 通过FileSystem的静态get()方法获取HDFS文件系统客户端对象
        hdfs = FileSystem.get(conf);
    }

    // 测试方法执行后执行,用于处理结尾的操作,关闭对象
    @After
    public void close() throws IOException {
        // 关闭文件操作对象
        hdfs.close();
    }
}

因为对文件的操作我们都需要获取hdfs对象和关闭对象,所以为避免重复编写,将两个操作对立成单独方法,分别在文件相应操作执行前和执行后执行。

这里"hdfs://localhost:9000"对应core-site.xml的配置

6、文件操作

可以在浏览器访问http://localhost:50070/,点击Browse the file system 查看HDFS文件系统的目录

文件上传

我提前在本地E:\hadoop下创建一个HDFSTest.txt文件

    // 上传文件到HDFS文件系统
    @Test
    public void testUploadFileToHDFS() throws IOException {
        // 待上传的文件路径(windows)
        Path src = new Path("E:/hadoop/HDFSTest.txt");
        // 上传之后存放的路径(HDFS)
        Path dst = new Path("/HDFSTest.txt");
        // 上传
        hdfs.copyFromLocalFile(src, dst);
        System.out.println("上传成功");
    }

文件下载

    // 从HDFS下载文件到本地
    @Test
    public void testDownFileToLocal() throws IOException {
        // 待下载的路径(HDFS)
        Path src = new Path("/HDFSTest.txt");
        // 下载成功之后存放的路径(windows)
        Path dst = new Path("E:/hadoop/HDFSTest1.txt");
        // 下载
        hdfs.copyToLocalFile(false,src,dst,true);
        System.out.println("下载成功");
    }

创建目录

    // 创建目录
    @Test
    public void testMkdirFile() throws IOException {
        // 待创建目录路径
        Path src = new Path("/HDFS");
        // 创建目录
        hdfs.mkdirs(src);
        System.out.println("创建成功");
    }

目录重命名

    // 重命名
    @Test
    public void testRenameFile() throws IOException {
        // 重命名之前的名字
        Path src = new Path("/HDFS");
        // 重命名之后的名字
        Path dst = new Path("/HDFS1");
        // 重命名
        hdfs.rename(src,dst);
        System.out.println("重命名成功");
    }

删除目录

    // 删除目录
    @Test
    public void testDeleteFile() throws IOException {
        // 待删除目录路径(HDFS)
        Path src = new Path("/HDFS1");
        // 删除
        hdfs.delete(src, true);
        System.out.println("删除成功");
    }

查看文件信息

    // 查看HDFS目录中的文件信息
    @Test
    public void testCheckFile() throws IOException {
        // 获取迭代器对象("/"表示获取全部目录下的文件)
        RemoteIterator<LocatedFileStatus> listFiles = hdfs.listFiles(new Path("/"), true);
        while (listFiles.hasNext()) {
            LocatedFileStatus fileStatus = listFiles.next();
            // 打印当前文件名
            System.out.println("文件名:" + fileStatus.getPath().getName());
            // 打印当前文件块大小
            System.out.println("文件块大小:" + fileStatus.getBlockSize());
            // 打印当前文件权限
            System.out.println("文件权限:" + fileStatus.getPermission());
            // 打印当前文件内容的长度
            System.out.println("文件内容长度:" + fileStatus.getLen());
            // 获取该文件块的信息(包含长度,数据块,DataNodes的信息)
            BlockLocation[] blockLocations = fileStatus.getBlockLocations();
            for (BlockLocation bl : blockLocations) {
                System.out.println("block-length:" + bl.getLength());
                System.out.println("block-offset:" + bl.getOffset());
                // 获取DataNodes的主机名
                String[] hosts = bl.getHosts();
                for (String host : hosts) {
                    System.out.println(host);
                }
            }
            System.out.println("-----------------分割线-----------------");
        }
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/769617.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux之Ubuntu系列(四)用户管理 用户和权限 chmod 超级用户root, R、W、X、T、S

r(Read&#xff0c;读取)&#xff1a;对文件而言&#xff0c;具有读取文件内容的权限&#xff1b;对目录来说&#xff0c;具有浏览目 录的权限。 w(Write,写入)&#xff1a;对文件而言&#xff0c;具有新增、修改文件内容的权限&#xff1b;对目录来说&#xff0c;具有删除、移…

DNS基础知识(前端工程师必备知识)

DNS 在工作中&#xff0c;经常切换本地和服务器&#xff0c;添加各种解析。遇到DNS引起的一些问题。发现网上资料很混乱&#xff0c;用心整理写了下&#xff0c;希望对大家有帮助。 DNS&#xff08;Domain Name System&#xff0c;域名系统&#xff09;&#xff0c;最初&…

ipad可以使用其他品牌的手写笔吗?平价ipad手写笔推荐

我是一个拥有多年数码经验的爱好者&#xff0c;我知道一些关于电容笔的知识。我认为&#xff0c;苹果原装的电容笔与普通的电容笔最大的不同之处&#xff0c;就是其所带来的压感不同。由于“重力压感”的特殊性&#xff0c;我们能很快地把色彩填充到画面中。除此之外&#xff0…

tql!红队批量脆弱点信息搜集工具

功能如下 指纹识别:调用“三米前有香蕉皮“前辈工具&#xff0c;他的工具比finger好用 寻找资产中404&#xff0c;403&#xff0c;以及网页中存在的其他薄弱点&#xff0c;以及需要特定路径访问的资产 后续会把nuclei加进来 目前只有windows可以用 关注【Hack分享吧】公众号&a…

6款好用的在线原型图设计工具推荐

在线原型图的核心功能是可视化需求&#xff0c;因此一个易于使用的在线原型图工具对原型图设计至关重要。对于熟悉的Photoshop和iIlustrator来说&#xff0c;虽然它们功能强大&#xff0c;但界面太复杂&#xff0c;初学者很难快速启动&#xff0c;面对批量调整的在线原型图&…

模型驱动的深度学习方法

本篇文章是博主在人工智能等领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅解。文章分类在学习摘录和笔记专…

MySQL高阶语句之一

目录 模版表 一、ORDER BY语法 1.1语法 1.2升序 1.3降序 1.4多高字段排序 二、AND/OR--且/或 2.1AND 2.2OR 2.3嵌套/多条件 三、distinct 查询不重复记录 3.1语法 四、GROUP BY语法 4.1语法 五、限制结果条目&#xff08;limit&#xff09; 5.1语法 5.2实验 五、设…

mac怎么转换音频格式为mp3

mac怎么转换音频格式为mp3&#xff1f;熟悉音频文件的人都知道&#xff0c;音频格式有许多不同种类。尽管有多种音频格式&#xff0c;但最受欢迎且最通用的是MP3格式。无论在哪个播放器上&#xff0c;MP3格式的音频都能轻松打开。而其他格式可能会出现不兼容无法打开的情况。因…

高斯误差线性单元激活ReLU以外的神经网络

高斯误差线性单位&#xff08;GELU&#xff09;激活函数由加州大学伯克利分校的Dan Hendrycks和芝加哥丰田技术研究所的Kevin Gimpel于2018年引入。激活函数是触发神经元输出的“开关”&#xff0c;随着网络的深入&#xff0c;其重要性也随之增加。最近几周&#xff0c;机器学习…

如何在Microsoft Excel中使用SORT函数

虽然 Microsoft Excel 提供了一个内置的数据排序工具,但你可能更喜欢函数和公式的灵活性。 使用 SORT 函数的好处是,你可以在不同的位置对数据进行排序。如果你想在不干扰原始数据集的情况下操作项目,你会喜欢 Excel 中的 SORT 函数。但是,如果你喜欢对项目进行原位排序,…

Path Finder for Mac:提升你的文件管理效率

作为一名 Mac 用户&#xff0c;你可能已经意识到原生的 Finder 文件管理器在某些方面存在一些限制。如果你正在寻找一个更强大、更灵活的文件管理工具&#xff0c;那么 Path Finder for Mac 是一个值得考虑的选择。 Path Finder for Mac是一款专为 Mac 设计的高级文件管理工具…

p2p大豆计数模型

前面学习了一下论文&#xff1a;Improved Field-Based Soybean Seed Counting and Localization with Feature Level Considered 论文链接&#xff1a;https://spj.science.org/doi/10.34133/plantphenomics.0026 解读链接&#xff1a;论文阅读--考虑特征水平的改进的基于田间…

SQL语句GROUP BY、HAVING、EXISTS、SQL函数(Null判断、日期相关、计算数值和字符串操作 )

目录 GROUP BY HAVING EXISTS SQL函数 Null判断函数 日期数据类型及函数 计算数值和字符串操作函数 AVG(平均值) COUNT(数据条数) FIRST/LAST(第一条数据) MAX/MIN(最大值) SUM(列总和) UCASE/ LCASE (转换大小写) MID(截取字符串) LEN(字符值的长度) ROUND(数…

Java版知识付费-轻松拥有知识付费平台

Java版知识付费-轻松拥有知识付费平台 多种直播形式&#xff0c;全面满足直播场景需求 公开课、小班课、独立直播间等类型&#xff0c;满足讲师个性化直播场景需求&#xff1b;低延迟、双向视频&#xff0c;亲密互动&#xff0c;无论是互动、答疑&#xff0c;还是打赏、带货、…

开放式耳机别人能听到吗?开放式蓝牙耳机的优缺点?

​开放式耳机在近几年越来越受欢迎&#xff0c;而市面上的不入耳开放式耳机就分为气传导和骨传导两大类。开放式耳机不入耳设计&#xff0c;佩戴上耳更加稳固舒适&#xff0c;长时间没有压力&#xff0c;而传统入耳式耳机则在封闭情况下听音会容易闷耳&#xff0c;长时间佩戴还…

Linux中文件系统详解——关于loop

都是nvme0n1p3——第三分区的内存分出去的&#xff0c;第二分区为微软的保留分区。 -------------------------------------------------------------------------------------------------------------------------------- 1&#xff0c;4&#xff0c;5&#xff0c;6分区已经…

Windows下 创建 FTP 服务器及相关设置

Windows 创建 FTP 服务器 1. 示例功能说明 FTP 服务器根路径下的目录&#xff1a; C:\USERS\SQQIAN\DESKTOP\FTP └─localuser├─FTP1 # 只有用户名为FTP1可以访问&#xff0c;读写均可│ FTP11.txt│├─FTP2 # 只有用户名为FTP2…

排序算法第四辑——归并排序与计数排序

目录 一&#xff0c;归并排序算法 二&#xff0c;归并排序的非递归版本 三&#xff0c;计数排序 一&#xff0c;归并排序算法 归并排序算法是一个特别经典的算法了。这个算法采用的思想就是一个分治的思想&#xff0c;也就是将大问题化为子问题的思想。这个思想其实我们经常…

如何用双指针法解决力扣“反转单词前缀”问题

本篇博客会讲解力扣“2000. 反转单词前缀”的解题思路&#xff0c;这是题目链接。 本题的思路是&#xff1a;先调用strchr函数&#xff0c;在字符串word中查找字符ch&#xff0c;若找到了&#xff0c;则会返回一个非空指针p&#xff0c;指向ch在word中的位置。为了反转从word到…

下一个更大元素 I 力扣 HashMap + Deque栈 JAVA

nums1 中数字 x 的 下一个更大元素 是指 x 在 nums2 中对应位置 右侧 的 第一个 比 x 大的元素。 给你两个 没有重复元素 的数组 nums1 和 nums2 &#xff0c;下标从 0 开始计数&#xff0c;其中nums1 是 nums2 的子集。 对于每个 0 < i < nums1.length &#xff0c;找出…