Hadoop学习总结(使用Java API操作HDFS)

      使用Java API操作HDFS,是在安装和配置Maven、IDEA中配置Maven成功情况下进行的,如果Maven安装和配置不完全将不能进行Java API操作HDFS。

      由于Hadoop是使用Java语言编写的,因此可以使用Java API操作Hadoop文件系统。使用HDFS提供的Java API构造一个访问客户端对象,然后通过客户端对象对HDFS上的文件进行操作(增、删、改、查)。

      可以使用单元测试法操作HDFS。这里不使用单元测试法。

一、创建HDFS_CRUD.java文件

二、初始化客户端对象

      通过 main() 方法调用进行HDFS增、删、改、查

public class HDFS_CRUD {public static void main(String[] args) throws IOException {// 初始化客户端对象//构造一个配置对象,设置一个参数:访问的 HDFS 的 URLConfiguration conf = new Configuration();//这里指定使用的是 HDFSconf.set("fs.defaultFS", "hdfs://hadoop00:9000");//通过如下的方式进行客户端身份的设置System.setProperty("HADOOP_USER_NAME", "root");//通过 FileSystem 的静态方法获取文件系统客户端对象fs = FileSystem.get(conf);  //抛出异常System.out.println("hdfs连接成功");}}

三、本地上传文件到HDFS

static FileSystem fs = null;

      声明了一个静态的FileSystem对象fs,并将其初始化为null。FileSystem是Java中用于操作Hadoop分布式文件系统(HDFS)的类。通过这个对象,可以执行一些与HDFS相关的操作,如创建文件、删除文件、读取文件等。在这段代码中,fs被声明为静态的,意味着它可以在整个类中被共享和访问。初始值为null,可能是因为在代码的其他部分会对其进行初始化。

      下面对上传功能进行编译

// 完成上传功能public static void upload(String path_str,String path_str1) throws IOException {//上传文件到HDFS//path_str本地文件路径  path_str1是上传到HDFS文件路径fs.copyFromLocalFile(new Path(path_str),new Path(path_str1));// 关闭资源fs.close();System.out.println("文件上传成功");}
//main()方法中调用upload("D:/大数据/word.txt","/input");  //上传

四、从HDFS下载文件到本地

// 完成下载文件public static void downloal(String path_str,String path_str1) throws IOException {//从 HDFS 下载文件到本地//path_str是HDFS文件路径  path_str1本地文件路径fs.copyToLocalFile(new Path(path_str),new Path(path_str1));// 关闭资源fs.close();System.out.println("文件下载成功");}
​
//main()方法中调用downloal("/data.txt","D:/大数据/文件");  //下载

五、创建目录

    // 创建目录public static void mkdir(String path_str) throws IOException {//path_str所要创建目录路径fs.mkdirs(new Path(path_str));// 关闭资源fs.close();System.out.println("创建目录成功");}
        //main()方法中调用mkdir("/input");  //创建目录

六、重命名文件或文件夹

    // 重命名文件夹public static void rename(String old_name,String new_path) throws IOException {//old_name原文件名路径  //new_path新文件名路径fs.rename(new Path(old_name),new Path(new_path));fs.close();System.out.println("重命名文件夹成功");}
    //main()方法中调用rename("/aa","/aa2");  //重命名文件夹

七、删除文件

    // 删除文件 ,如果是非空文件夹,参数2必须给值truepublic static void delete(String path_str) throws IOException {//ture表示递归删除 可以用来删除目录 rm -rf//false表示非递归删除fs.delete(new Path(path_str),true);// 关闭资源fs.close();System.out.println("删除文件夹成功");}
        //main()方法中调用delete("/aa2");  //删除文件

八、查看文件信息

1、查看文件信息

    // 查看文件信息public static void  listFiles(String path_str) throws IOException {//获取迭代器对象RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path(path_str),true);//遍历while (listFiles.hasNext()){LocatedFileStatus fileStatus = listFiles.next();//打印当前文件名System.out.println(fileStatus.getPath().getName());//打印当前文件块大小System.out.println(fileStatus.getBlockLocations());//打印当前文件权限System.out.println(fileStatus.getPermission());//打印当前文件内容长度System.out.println(fileStatus.getLen());//获取该文件块信息(包含长度、数据块、datanode的信息)
//            BlockLocation[] blockLocations = fileStatus.getBlockLocations();
//            for (BlockLocation bl : blockLocations){
//                System.out.println("block-length:" + bl.getLength()+"--"+"block-offset:"+bl.getOffset());
//                String[] hosts = bl.getHosts();
//                for (String host : hosts){
//                    System.out.println(host);
//                }
//            }}System.out.println("--------分割线---------");fs.close();}
        //main()方法中调用listFiles("/data.txt");  //查看文件信息

2、统计目录下所有文件(包括子目录)

    // 1、统计目录下所有文件(包括子目录)// 1、统计某个路径(由main方法决定哪个路径),下所有的文件数里,例如:输出:该路径下共有 3 个文件public static void count(String path_str) throws IOException {//获取迭代器对象RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path(path_str),true);//遍历int count = 0;while (listFiles.hasNext()) {LocatedFileStatus fileStatus = listFiles.next();count++;}System.out.println("路径:【"+ path_str +"】下,文件数量为"+count);fs.close();}
        //main()方法中调用count("/");  //统计

 3、列出某个路径下所有的文件数里

    // 2、列出某个路径(由main方法决定哪个路径),下所有的文件数里,例如:文件1,文"路径:【"+ path_str +"】下,文件有:"+件2,....public static void fileList(String path_str) throws IOException {//获取迭代器对象RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path(path_str),true);String res = "";//遍历while (listFiles.hasNext()) {LocatedFileStatus fileStatus = listFiles.next();res += fileStatus.getPath().getName() + ", ";}if (res.equals("")){res = "没有文件";}else {res = res.substring(0,res.length() - 2);}System.out.println("路径:【"+ path_str +"】下的文件:" + res);
//        fs.close();}
        //main()方法中调用fileList("/"); //查看有什么文件fileList("/input"); //查看有什么文件

4、查看所有文件

/*    路径【/】下共有 7 子文件文件数量:1,文件列表:data.txt目录数量:6,文件列表:a, exp, input, output, test, tmp*/public static void list(String path) throws IOException {FileStatus[] fileStatuses = fs.listStatus(new Path(path));String res = "路径【" + path + "】下共有 " + fileStatuses.length + " 子文件";int file_num = 0;String file_list = "";int dir_num = 0;String dir_list = "";for (FileStatus fileStatus:fileStatuses){if (fileStatus.isFile()){file_num ++;file_list += fileStatus.getPath().getName() + ", ";}else {dir_num ++;dir_list += fileStatus.getPath().getName() + ", ";}}if (file_num != 0) res += "\n\t文件数量:" + file_num + ",文件列表:" + file_list.substring(0,file_list.length()-2);if (dir_num != 0) res += "\n\t目录数量:" + dir_num + ",文件列表:" + dir_list.substring(0,dir_list.length()-2);System.out.println(res);}
        //main()方法中调用list("/"); //查看所有

5、判断是文件还是目录

    // 检查路径是目录还是文件public static void mulu(String path_str) throws IOException {Path path = new Path(path_str);// 判断路径是否存在if (fs.exists(path)) {// 获取指定路径的详细信息FileStatus status = fs.getFileStatus(path);if (status.isDirectory()) {System.out.println(path + "这是一个目录");} else if (status.isFile()) {System.out.println(path + "这是一个文件");} else {System.out.println("这是一个未知类型");}} else {System.out.println("路径不存在");}//关闭资源fs.close();}
        //main()方法中调用mulu("/exp/word.txt"); //检查路径是目录还是文件

九、源代码

package com.itcast.hdfsdemo;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.yarn.webapp.hamlet.Hamlet;
import sun.tracing.dtrace.DTraceProviderFactory;import java.io.IOException;
import java.util.Arrays;public class HDFS_CRUD {static FileSystem fs = null;// 完成上传功能public static void upload(String path_str,String path_str1) throws IOException {//上传文件到HDFS//path_str本地文件路径  path_str1是上传到HDFS文件路径fs.copyFromLocalFile(new Path(path_str),new Path(path_str1));// 关闭资源fs.close();System.out.println("文件上传成功");}// 完成下载文件public static void downloal(String path_str,String path_str1) throws IOException {//从 HDFS 下载文件到本地//path_str是HDFS文件路径  path_str1本地文件路径fs.copyToLocalFile(new Path(path_str),new Path(path_str1));// 关闭资源fs.close();System.out.println("文件下载成功");}// 创建目录public static void mkdir(String path_str) throws IOException {//path_str所要创建目录路径fs.mkdirs(new Path(path_str));// 关闭资源fs.close();System.out.println("创建目录成功");}// 重命名文件夹public static void rename(String old_name,String new_path) throws IOException {//old_name原文件名路径  //new_path新文件名路径fs.rename(new Path(old_name),new Path(new_path));// 关闭资源fs.close();System.out.println("重命名文件夹成功");}//main()方法中调用
//    rename("/aa","/aa2");  //重命名文件夹// 删除文件 ,如果是非空文件夹,参数2必须给值truepublic static void delete(String path_str) throws IOException {//ture表示递归删除 可以用来删除目录 rm -rf//false表示非递归删除fs.delete(new Path(path_str),true);// 关闭资源fs.close();System.out.println("删除文件夹成功");}// 查看文件信息public static void  listFiles(String path_str) throws IOException {//获取迭代器对象RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path(path_str),true);//遍历while (listFiles.hasNext()){LocatedFileStatus fileStatus = listFiles.next();//打印当前文件名System.out.println(fileStatus.getPath().getName());//打印当前文件块大小System.out.println(fileStatus.getBlockLocations());//打印当前文件权限System.out.println(fileStatus.getPermission());//打印当前文件内容长度System.out.println(fileStatus.getLen());//获取该文件块信息(包含长度、数据块、datanode的信息)
//            BlockLocation[] blockLocations = fileStatus.getBlockLocations();
//            for (BlockLocation bl : blockLocations){
//                System.out.println("block-length:" + bl.getLength()+"--"+"block-offset:"+bl.getOffset());
//                String[] hosts = bl.getHosts();
//                for (String host : hosts){
//                    System.out.println(host);
//                }
//            }}System.out.println("--------分割线---------");fs.close();}//把查看文件信息分解为下面几个方法// 1、统计目录下所有文件(包括子目录)// 1、统计某个路径(由main方法决定哪个路径),下所有的文件数里,例如:输出:该路径下共有 3 个文件public static void count(String path_str) throws IOException {//获取迭代器对象RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path(path_str),true);//遍历int count = 0;while (listFiles.hasNext()) {LocatedFileStatus fileStatus = listFiles.next();count++;}System.out.println("路径:【"+ path_str +"】下,文件数量为"+count);fs.close();}// 2、列出某个路径(由main方法决定哪个路径),下所有的文件数里,例如:文件1,文"路径:【"+ path_str +"】下,文件有:"+件2,....public static void fileList(String path_str) throws IOException {//获取迭代器对象RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path(path_str),true);String res = "";//遍历while (listFiles.hasNext()) {LocatedFileStatus fileStatus = listFiles.next();res += fileStatus.getPath().getName() + ", ";}if (res.equals("")){res = "没有文件";}else {res = res.substring(0,res.length() - 2);}System.out.println("路径:【"+ path_str +"】下的文件:" + res);
//        fs.close();}/*    路径【/】下共有 7 子文件文件数量:1,文件列表:data.txt目录数量:6,文件列表:a, exp, input, output, test, tmp*/public static void list(String path) throws IOException {FileStatus[] fileStatuses = fs.listStatus(new Path(path));String res = "路径【" + path + "】下共有 " + fileStatuses.length + " 子文件";int file_num = 0;String file_list = "";int dir_num = 0;String dir_list = "";for (FileStatus fileStatus:fileStatuses){if (fileStatus.isFile()){file_num ++;file_list += fileStatus.getPath().getName() + ", ";}else {dir_num ++;dir_list += fileStatus.getPath().getName() + ", ";}}if (file_num != 0) res += "\n\t文件数量:" + file_num + ",文件列表:" + file_list.substring(0,file_list.length()-2);if (dir_num != 0) res += "\n\t目录数量:" + dir_num + ",文件列表:" + dir_list.substring(0,dir_list.length()-2);System.out.println(res);}// 检查路径是目录还是文件public static void mulu(String path_str) throws IOException {Path path = new Path(path_str);// 判断路径是否存在if (fs.exists(path)) {// 获取指定路径的详细信息FileStatus status = fs.getFileStatus(path);if (status.isDirectory()) {System.out.println(path + "这是一个目录");} else if (status.isFile()) {System.out.println(path + "这是一个文件");} else {System.out.println("这是一个未知类型");}} else {System.out.println("路径不存在");}//关闭资源fs.close();}//调用public static void main(String[] args) throws IOException {// 初始化客户端对象//构造一个配置对象,设置一个参数:访问的 HDFS 的 URLConfiguration conf = new Configuration();//这里指定使用的是 HDFSconf.set("fs.defaultFS","hdfs://hadoop00:9000");//通过如下的方式进行客户端身份的设置System.setProperty("HADOOP_USER_NAME","root");//通过 FileSystem 的静态方法获取文件系统客户端对象fs = FileSystem.get(conf);  //抛出异常System.out.println("hdfs连接成功");//main()方法中调用
//        list("/"); //查看所有//main()方法中调用
//          fileList("/"); //查看有什么文件
//          fileList("/input"); //查看有什么文件//main()方法中调用
//        count("/");  //统计//main()方法中调用
//        mulu("/exp/word.txt"); //检查路径是目录还是文件//main()方法中调用
//        listFiles("/data.txt");  //查看文件信息//main()方法中调用
//        delete("/aa2");  //删除文件//main()方法中调用
//        rename("/aa","/aa2");  //重命名文件夹//main()方法中调用
//        upload("D:/大数据/word.txt","/input");  //上传//main()方法中调用
//        mkdir("/input");  //创建目录//main()方法中调用
//        downloal("/data.txt","D:/大数据/文件");  //下载}
}

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

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

相关文章

Linux centos系统中添加磁盘

为了学习与训练文件系统或磁盘的分区、格式化和挂载/卸载&#xff0c;我们需要为虚拟机添加磁盘。根据需要&#xff0c;可以添加多块不同大小的磁盘。具体操作讨论如下&#xff0c;供参考。 一、添加 1.开机前 有两个地方&#xff0c;可选择打开添加硬盘对话框 (1)双击左侧…

Linux常用命令——bzmore命令

在线Linux命令查询工具 bzmore 查看bzip2压缩过的文本文件的内容 补充说明 bzmore命令用于查看bzip2压缩过的文本文件的内容&#xff0c;当下一屏显示不下时可以实现分屏显示。 语法 bzmore(参数)参数 文件&#xff1a;指定要分屏显示的.bz2压缩包。 在线Linux命令查询…

同城跑腿服务预约小程序的作用如何

无论是互联网服务化加快还是前几年疫情冲击&#xff0c;在同城生活服务场景中出现了很多商机&#xff0c;如外卖跑腿、校园跑腿、代买代送等&#xff0c;无论公司还是个人都借势不断提升自己品牌的影响力&#xff0c;并且依赖朋友圈不断提升生意营收。 同城跑腿品牌不少&#…

vue项目pdf文件的预览

1.下载 您可以在以下网址下载pdfjsLib&#xff1a;https://github.com/mozilla/pdf.js pdfjsLib是一个开源项目&#xff0c;您可以在GitHub上找到其源代码和相关资源。 2.放置文件位置 3.进入 在index.html引入 <script src"<% BASE_URL %>static/pdfjs-dist/b…

Linux系统编程——文件操作原理

文件描述符 1.文件描述符是文件的索引&#xff1a; 对于内核而言&#xff0c;所有打开文件都由文件描述符引用。文件描述符是一个非负整数。当打开一个现存文件或者创建一个新文件时&#xff0c;内核向进程返回一个文件描述符。 int fd1 open("./file1",O_RDWR);…

【中间件篇-Redis缓存数据库04】Redis底层原理持久化、分布式锁

Redis底层原理 持久化 Redis虽然是个内存数据库&#xff0c;但是Redis支持RDB和AOF两种持久化机制&#xff0c;将数据写往磁盘&#xff0c;可以有效地避免因进程退出造成的数据丢失问题&#xff0c;当下次重启时利用之前持久化的文件即可实现数据恢复。 RDB RDB持久化是把当…

TortoiseSVN 状态图标不显示的两种解决办法

文章目录 TortoiseSVN 方式解决注册表方式解决 TortoiseSVN 方式解决 在桌面或者资源管理器中鼠标右键打开 TortoiseSVN 设置选择 Icon Overlays (图标覆盖)Status cache&#xff08;状态缓存&#xff09; 选择 ‘Shell’ 选择 Icon Overlays&#xff08;图标覆盖&#xff09;…

Run highlighted commands using IDE

背景 有时候在 IEDE 的命令行中输入命令&#xff0c;会弹出如下提示&#xff0c;或者命令被着了背景色了&#xff0c;是怎么回事&#xff1f; 其实就是提示你可以使用 IDEA 的功能替代命令行。比如使用ctrlenter或cmdenter之后使用的就是 IDEA 里的功能 直接enter运行&#x…

3 分钟看完 NVIDIA GPU 架构及演进

近期随着 AI 市场的爆发式增长&#xff0c;作为 AI 背后技术的核心之一 GPU&#xff08;图形处理器&#xff09;的价格也水涨船高。GPU 在人工智能中发挥着巨大的重要&#xff0c;特别是在计算和数据处理方面。目前生产 GPU 主流厂商其实并不多&#xff0c;主要就是 NVIDIA、AM…

MySQL最新2023年面试题及答案,汇总版(4)【MySQL最新2023年面试题及答案,汇总版-第三十四刊】

文章目录 MySQL最新2023年面试题及答案&#xff0c;汇总版(4)01、一个6亿的表a&#xff0c;一个3亿的表b&#xff0c;通过外键tid关联&#xff0c;你如何最快的查询出满足条件的第50000到第50200中的这200条数据记录&#xff1f;02、SQL语句优化的一些方法有哪些&#xff1f;03…

免费小程序HTTPS证书

随着互联网的快速发展&#xff0c;小程序已经成为人们日常生活中不可或缺的一部分。然而&#xff0c;在小程序的开发和使用过程中&#xff0c;安全问题一直是开发者们关注的重点。其中&#xff0c;HTTPS 证书是保障小程序安全的重要工具之一。在这方面&#xff0c;免费的小程序…

C++使用线程池模拟异步事件处理机制

在C很多框架中都有异步事件处理机制&#xff0c;这导致我们在看源码时经常很疑惑&#xff0c;难以理解&#xff0c;而其中包含的编程套路可能是一些成熟的技术&#xff0c;只是我们不熟悉&#xff0c;比如WebRTC中类似于Qt的信号槽机制&#xff0c;线程事件处理, 或者使用系统异…

c语言,将奇数和偶数分类

题目&#xff1a;输入一个整数数组&#xff0c;实现一个函数&#xff0c;来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分&#xff0c;所有偶数位于数组的后半部分。 思路&#xff1a;像冒泡排序那样&#xff0c;相邻两个数比较&#xff0c;两个都是偶数则不…

2023年加氢工艺证考试题库及加氢工艺试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年加氢工艺证考试题库及加氢工艺试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人员上岗证考试大纲随机出的加氢…

外部访问K8S集群内部的kafka集群服务

不许转载 kafka 部署 把 kafka 部署到 k8s 后&#xff0c;我们肯定是通过 service 从 k8s 外部访问 kafaka。这里的 service 要么是 NodePort&#xff0c; 要么是 LoadBalancer 类型。我们使用的方式是 LoadBalancer。 我们先看下面这张图&#xff0c;这是 kafka 在集群中的网…

万能在线预约小程序系统源码 适合任何行业在线预约小程序+预约到店模式 带完整的搭建教程

大家好啊&#xff0c;源码小编又来给大家分享啦&#xff01;随着互联网的发展和普及&#xff0c;越来越多的服务行业开始使用在线预约系统以方便客户和服务管理。例如&#xff0c;美发店、健身房、餐厅等都可以通过在线预约系统提高服务效率&#xff0c;减少等待时间&#xff0…

C++入门篇3(类和对象【重点】)

文章目录 C入门篇3&#xff08;类和对象【重点】&#xff09;1、面向过程和面向对象2、类的引入3、类的定义4、类的访问限定符及封装4.1、访问限定符4.2、封装 5、类的作用域6、类的实例化&#xff08;对象&#xff09;7、类对象模型7.1、类对象的存储方式7.2、结构体&#xff…

VR虚拟现实:VR技术如何进行原型制作

VR虚拟现实原型制作 利用VR虚拟现实软件进行原型制作可以用于增强原型测试期间的沉浸感&#xff0c;减少产品设计迭代次数&#xff0c;并将与产品原型制作相关的成本降低40-65%。 VR虚拟现实原型制作市场规模 用于原型制作的虚拟现实 (VR) 市场在 2017 年估计为 2.104 亿美元…

主题模型LDA教程:一致性得分coherence score方法对比(umass、c_v、uci)

文章目录 主题建模潜在迪利克雷分配&#xff08;LDA&#xff09;一致性得分 coherence score1. CV 一致性得分2. UMass 一致性得分3. UCI 一致性得分4. Word2vec 一致性得分5. 选择最佳一致性得分 主题建模 主题建模是一种机器学习和自然语言处理技术&#xff0c;用于确定文档…

合同审查---财务条款、合同形式与生效审查

1.合同主体 1人 廖 2.财务条款、合同形式与生效 1人 黄 3.履行、验收、知识产权、不可抗力 1人 詹 4.违约责任、争议解决、保密、法律引用 1人 王 代码规范&#xff1a; 1.代码函数的层级 各审查点在json中分为3级层级&#xff0c;但用python写规则的时候&#xff0c;1级层级为…