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.rhkb.cn/news/189834.html

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

相关文章

C语言进阶

数组 在基础篇说过&#xff0c;数组实际上是构造类型之一&#xff0c;是连续存放的。 一维数组 定义 定义格式&#xff1a;[存储类型] 数据类型 数组名标识符[下标]; 下面分模块来介绍一下数组的定义部分的内容。 1、初始化和元素引用&#xff1a; 可以看到数组是连续存储…

Linux--gcc/g++

一、gcc/g是什么 gcc的全称是GNU Compiler Collection&#xff0c;它是一个能够编译多种语言的编译器。最开始gcc是作为C语言的编译器&#xff08;GNU C Compiler&#xff09;&#xff0c;现在除了c语言&#xff0c;还支持C、java、Pascal等语言。gcc支持多种硬件平台 二、gc…

数据结构 队列(C语言实现)

目录 1.队列的概念及结构2.队列的代码实现 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。 点击跳转到网站。 1.队列的概念及结构 队列&#xff1a;只允许在…

Java Web——TomcatWeb服务器

目录 1. 服务器概述 1.1. 服务器硬件 1.2. 服务器软件 2. Web服务器 2.1. Tomcat服务器 2.2. 简单的Web服务器使用 1. 服务器概述 服务器指的是网络环境下为客户机提供某种服务的专用计算机&#xff0c;服务器安装有网络操作系统和各种服务器的应用系统服务器的具有高速…

【2011年数据结构真题】

41题 41题解答&#xff1a; &#xff08;1&#xff09;图 G 的邻接矩阵 A 如下所示&#xff1a; 由题意得&#xff0c;A为上三角矩阵&#xff0c;在上三角矩阵A[6][6]中&#xff0c;第1行至第5行主对角线上方的元素个数分别为5, 4, 3, 2, 1 用 “ 平移” 的思想&#xff0c;…

vmware workstation 与 device/credential guard 不兼容

VM虚拟机报错 vmware虚拟机启动时报错&#xff1a;vmware workstation 与 device/credential guard 不兼容&#xff1a; 系统是win10专业版&#xff0c;导致报错原因最终发现是安装了docker&#xff0c;docker自带下载虚拟机Hyper-V&#xff0c;而导致vmware workstation 与 …

FPGA高端项目:图像采集+GTX+UDP架构,高速接口以太网视频传输,提供2套工程源码加QT上位机源码和技术支持

目录 1、前言免责声明本项目特点 2、相关方案推荐我这里已有的 GT 高速接口解决方案我这里已有的以太网方案 3、设计思路框架设计框图视频源选择OV5640摄像头配置及采集动态彩条视频数据组包GTX 全网最细解读GTX 基本结构GTX 发送和接收处理流程GTX 的参考时钟GTX 发送接口GTX …

MSF图形化工具Viper快速安装

简介 Viper(炫彩蛇)是一款图形化内网渗透工具,将内网渗透过程中常用的战术及技术进行模块化及武器化. Viper(炫彩蛇)集成杀软绕过,内网隧道,文件管理,命令行等基础功能. Viper(炫彩蛇)当前已集成70个模块,覆盖初始访问/持久化/权限提升/防御绕过/凭证访问/信息收集/横向移动等…

Python的基础语句大全

以下是Python的基础语句大全&#xff1a; 变量定义语句&#xff1a; var_name var_value输出语句&#xff1a; print(var_name)输入语句&#xff1a; var_name input()条件语句&#xff1a; if condition:// do something if condition is True elif condition:// do somethi…

STM32F407: CMSIS-DSP库的移植(基于库文件)

目录 1. 源码下载 2. DSP库源码简介 3.基于库的移植(DSP库的使用) 3.1 实验1 3.2 实验2 4. 使用V6版本的编译器进行编译 上一篇&#xff1a;STM32F407-Discovery的硬件FPU-CSDN博客 1. 源码下载 Github地址&#xff1a;GitHub - ARM-software/CMSIS_5: CMSIS Version 5…

Golang 字符串处理汇总

1. 统计字符串长度&#xff1a;len(str) len(str) 函数用于统计字符串的长度&#xff0c;按字节进行统计&#xff0c;且该函数属于内置函数也不用导包&#xff0c;直接用就行&#xff0c;示例如下&#xff1a; //统计字符串的长度,按字节进行统计: str : "golang你好&qu…

【开源】基于Vue.js的智能停车场管理系统的设计和实现

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容A. 车主端功能B. 停车工作人员功能C. 系统管理员功能1. 停车位模块2. 车辆模块3. 停车记录模块4. IC卡模块5. IC卡挂失模块 三、界面展示3.1 登录注册3.2 车辆模块3.3 停车位模块3.4 停车数据模块3.5 IC卡档案模块3.6 IC卡挂…

Linux中字符设备的打开、写入

一个内核模块应该由以下几部分组成。 第一部分&#xff0c;头文件部分。一般的内核模块&#xff0c;都需要 include 下面两个头文件&#xff1a; #include <linux/module.h> #include <linux/init.h> 第二部分&#xff0c;定义一些函数&#xff0c;用于处理内核…

【论文】利用移动性的比例公平蜂窝调度测量和算法

&#xff08;一支笔一包烟&#xff0c;一节论文看一天 &#xff09;&#xff08;一张纸一瓶酒&#xff0c;一道公式推一宿&#xff09; 摘要1. 引言2. 相关工作3. 模型和问题公式4. 预测FPF调度 &#xff08; P F &#xff09; 2 S &#xff08;PF&#xff09;^2S &#xff08;…

软件测试下的AI之路(3)

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;【Austin_zhai】 &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xff0c;分享行业相关最新信息。…

Adobe ME下载、Media Encoder下载

Media Encoder 2021 是一款可以帮助Adobepremiere pro和Adobe After Effects的用户使用集成视频编码器进行创作的视频和音频编码软件。Media Encoder 2021 mac新版本中针对上一个版本进行了多方面的改进与优化&#xff0c;提升了软件的性能与支持文件格式提升&#xff0c;有需要…

redis的基本命令,并用netty操作redis(不使用springboot或者spring框架)就单纯的用netty搞。

大家如果对使用netty搞这些http请求什么的感兴趣的&#xff0c;可以参观我自己创建的这个项目。 nanshaws/nettyWeb: 复习一下netty&#xff0c;并打算做一个web项目出来 (github.com) Redis的基本命令包括&#xff1a; SET key value&#xff1a;设置指定key的值。 GET key…

基于51单片机篮球控制器12864显示仿真及源程序

一、系统方案 1、本设计采用51单片机作为主控器。 2、比分液晶12864显示。 3、主客队加减分、节数、24秒、复位等功能。 二、硬件设计 原理图如下&#xff1a; 三、单片机软件设计 1、首先是系统初始化 void Timer_0()interrupt 1 { TL0 0x00; TH0 0xDC; Count; if(Coun…

Kotlin系列之注解详解

目录 注解&#xff1a;file:JvmName 注解&#xff1a;JvmField 注解&#xff1a;JvmOverloads 注解&#xff1a;JvmStatic 注解&#xff1a;JvmMultifileClass 注解&#xff1a;JvmSynthetic 注解&#xff1a;file:JvmName file:JvmName(“XXX”) 放在类的最顶层&#x…

“艾迪-东软杯”第六届武汉理工大学新生程序设计竞赛

A.Capoos Acronym Zero 题目描述 yz 和他的朋友 ea 和 zech 一起养了一群 Capoo。 这些 Capoo 非常聪明&#xff0c;但不知道为什么&#xff0c;它们并没有从三人那里学到怎么写算法题&#xff0c;而是出于某种原因开始研究语言学&#xff0c;并发明了一套自己的暗语。这门暗语…