HDFS的javaAPI操作

目标:掌握如何使用API对HDFS上的目录和数据进行增、删、改、查操作。

1.idea创建maven工程

2.修改pom.xml文件如下:

(需要下载jar包,时间可能稍长)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com</groupId>           <!-- 自己的组名 --><artifactId>aa</artifactId>      <!-- 自己的项目名 --><version>1.0-SNAPSHOT</version><repositories><repository><id>cloudera</id><url>https://repository.cloudera.com/artifactory/cloudera-repos/</url></repository></repositories><dependencies><dependency><groupId>org.apache.Hadoop</groupId><artifactId>Hadoop-client</artifactId><version>2.6.0-mr1-cdh5.14.0</version></dependency><dependency><groupId>org.apache.Hadoop</groupId><artifactId>Hadoop-common</artifactId><version>2.6.0-cdh5.14.0</version></dependency><dependency><groupId>org.apache.Hadoop</groupId><artifactId>Hadoop-hdfs</artifactId><version>2.6.0-cdh5.14.0</version></dependency><dependency><groupId>org.apache.Hadoop</groupId><artifactId>Hadoop-mapreduce-client-core</artifactId><version>2.6.0-cdh5.14.0</version></dependency><!-- https://mvnrepository.com/artifact/junit/junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><dependency><groupId>org.testng</groupId><artifactId>testng</artifactId><version>RELEASE</version></dependency><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.9</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.0</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding><!--    <verbal>true</verbal>--></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>2.4.3</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><minimizeJar>true</minimizeJar></configuration></execution></executions></plugin></plugins></build></project>

3.下载完成后编写java类     可一个一个尝试

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;import java.net.URI;public class HDFSDemo {public static void main(String[] args) throws Exception {/*//创建文件夹Configuration configuration = new Configuration();FileSystem fs=FileSystem.get(new URI("hdfs://192.168.10.101:8020"),configuration);boolean b = fs.mkdirs(new Path("/003"));if (b){System.out.println("成功!");}else {System.out.println("失败!");}*//*//删除文件夹Configuration configuration = new Configuration();configuration.set("fs.defaultFS","hdfs://192.168.10.101:8020");FileSystem fs = FileSystem.newInstance(new URI("/"), configuration);boolean b = fs.delete(new Path("/003"), true);if (b){System.out.println("成功!");}else {System.out.println("失败!");}*//*//修改文件夹Configuration configuration = new Configuration();FileSystem fs= FileSystem.get(new URI("hdfs://192.168.10.101:8020"),configuration);boolean b = fs.rename(new Path("/002"),new Path("/003"));if (b){System.out.println("成功!");}else {System.out.println("失败!");}*//*//查看文件夹Configuration configuration = new Configuration();FileSystem fs= FileSystem.get(new URI("hdfs://192.168.10.101:8020"),configuration);FileStatus[] fi = fs.listStatus(new Path("/"));for (FileStatus f : fi) {System.out.println("path:"+f.getPath());System.out.println("name:"+f.getPath().getName());}*//*//上传数据Configuration configuration = new Configuration();FileSystem fs= FileSystem.get(new URI("hdfs://192.168.10.101:8020"),configuration);fs.copyFromLocalFile(new Path(""),new Path("/"));fs.close();*///下载数据Configuration configuration = new Configuration();FileSystem fs = FileSystem.get(new URI("hdfs://192.168.10.101:8020"), configuration);fs.copyToLocalFile(new Path(""), new Path("/"));fs.close();}
}

如果执行出现以下错误,也可以不用理会,不会影响程序的执行。配置hadoo环境变量之后重启开发工具就可以了

获取FileSystem的几种方式

  1. 第一种:

    @Test
    public void getFileSystem() throws URISyntaxException, IOException {Configuration configuration = new Configuration();FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.52.100:8020"), configuration);System.out.println(fileSystem.toString());
    }
    
  2. 第二种:
    @Test
    public void getFileSystem2() throws URISyntaxException, IOException {Configuration configuration = new Configuration();configuration.set("fs.defaultFS","hdfs://192.168.52.100:8020");FileSystem fileSystem = FileSystem.get(new URI("/"), configuration);System.out.println(fileSystem.toString());
    }
    

    3. 第三种:

    @Test
    public void getFileSystem3() throws URISyntaxException, IOException {Configuration configuration = new Configuration();FileSystem fileSystem = FileSystem.newInstance(new URI("hdfs://192.168.52.100:8020"), configuration);System.out.println(fileSystem.toString());
    }
    

    4.第四种:

    @Test
    public void getFileSystem4() throws  Exception{Configuration configuration = new Configuration();configuration.set("fs.defaultFS","hdfs://192.168.52.100:8020");FileSystem fileSystem = FileSystem.newInstance(configuration);System.out.println(fileSystem.toString());
    }
    

    递归遍历文件系统当中的所有文件

通过递归遍历hdfs文件系统

@Test
public void listFile() throws Exception{FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.52.100:8020"), new Configuration());FileStatus[] fileStatuses = fileSystem.listStatus(new Path("/"));for (FileStatus fileStatus : fileStatuses) {if(fileStatus.isDirectory()){Path path = fileStatus.getPath();listAllFiles(fileSystem,path);}else{System.out.println("文件路径为"+fileStatus.getPath().toString());}}
}
public void listAllFiles(FileSystem fileSystem,Path path) throws  Exception{FileStatus[] fileStatuses = fileSystem.listStatus(path);for (FileStatus fileStatus : fileStatuses) {if(fileStatus.isDirectory()){listAllFiles(fileSystem,fileStatus.getPath());}else{Path path1 = fileStatus.getPath();System.out.println("文件路径为"+path1);}}
}

官方提供的API直接遍历

/*** 递归遍历官方提供的API版本* @throws Exception*/
@Test
public void listMyFiles()throws Exception{//获取fileSystem类FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.52.100:8020"), new Configuration());//获取RemoteIterator 得到所有的文件或者文件夹,第一个参数指定遍历的路径,第二个参数表示是否要递归遍历RemoteIterator<LocatedFileStatus> locatedFileStatusRemoteIterator = fileSystem.listFiles(new Path("/"), true);while (locatedFileStatusRemoteIterator.hasNext()){LocatedFileStatus next = locatedFileStatusRemoteIterator.next();System.out.println(next.getPath().toString());}fileSystem.close();
}

HDFS java API操作相关推荐

  1. HDFS Java API 操作

    文章目录 HDFS Java API操作 零.启动hadoop 一.HDFS常见类接口与方法 1.hdfs 常见类与接口 2.FileSystem 的常用方法 二.Java 创建Hadoop项目 1. ...

  2. 分布式文件系统—HDFS—Java API操作

    原文作者:jiangw-Tony 原文地址:HDFS基础使用 hdfs 在生产应用中主要是客户端的开发,其核心步骤是从 hdfs 提供的 api 中构造一个 HDFS的访问客户端对象,然后通过该客户端 ...

  3. Hadoop详解(四):HDFS shell操作和Java API操作

    1. HDFS环境准备 1.1 HDFS的格式化与启动 HDFS配置完之后就可以对其进行格式化操作.在NameNode所在机器上执行如下命令进行HDFS的格式化操作: hadoop namenode ...

  4. Windows下使用Java API操作HDFS的常用方法

    场景 Windows下配置Hadoop的Java开发环境以及用Java API操作HDFS: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/det ...

  5. Windows下配置Hadoop的Java开发环境以及用Java API操作HDFS

    场景 HDFS的访问方式之HDFS shell的常用命令: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/119351218 在上 ...

  6. Hadoop读书笔记(三)Java API操作HDFS

    Hadoop读书笔记(一)Hadoop介绍:http://blog.csdn.net/caicongyang/article/details/39898629 Hadoop读书笔记(二)HDFS的sh ...

  7. 2021年大数据Hadoop(十二):HDFS的API操作

    2021大数据领域优质创作博客,带你从入门到精通,该博客每天更新,逐渐完善大数据各个知识体系的文章,帮助大家更高效学习. 有对大数据感兴趣的可以关注微信公众号:三帮大数据 目录 HDFS的API操作 ...

  8. HDFS的API操作-获取FileSystem方式

    HDFS 的 API 操作 导入 Maven 依赖 <repositories><repository><id>cloudera</id><url ...

  9. 使用 Java API 操作 HBase

    使用 Java API 操作 HBase 数据库,就类似HBase Shell,本质上一个是Java 代码,一个是Shell 命令.(hadoop 的文件系统莫不如此,可用Java API 的方式操作 ...

最新文章

  1. SQL Server 2005 的版本和组件[转载]
  2. 【学习笔记】JS基础语法一小时通
  3. SRTP参数及数据包处理过程
  4. JEECG整合JXLS步骤与开发
  5. 阿里线上bug排查命令
  6. MFC下如何定义全局变量和全局函数
  7. linux shell网卡,Shell脚本查看LINUX系统 网卡实时流量
  8. web项目嵌入Jetty运行的两种方式(Jetty插件和自制Jetty服务器)
  9. 基于遥感图像的船舶目标识别技术
  10. MAC下安装配置Tomcat
  11. powerbi嵌入到HTML5,如何把Power BI嵌入到Web应用中
  12. 单片机C51继电器控制C语言,51单片机对继电器的控制
  13. 内网环路怎么解决_利用生成树协议巧妙解决局域网二层环路
  14. 数据库课程设计【5】-----答辩总结
  15. 程序员必备的20多种开发工具
  16. Android使用阿里云接口实现身份证识别功能
  17. 3月16日—3月20日三年级课程
  18. 好工具推荐系列:Linux远程连接,终端工具,SSH和SFTP
  19. 大话设计模式——策略模式
  20. FPGA PLL时钟经 ODDR送到管脚

热门文章

  1. 六、网络加速原理-CDN
  2. Unity_MegaFiers_Hump
  3. 电脑软件系统等保2.0 二级安全要求
  4. 2 java基础知识+数据结构
  5. 邮箱伪造之搭建匿名SMTP服务器
  6. 状态和特质焦虑之间的区别?
  7. Android端与服务端基于TCP/IP协议的Socket通讯
  8. Unity实现游戏中坦克运动控制(一)
  9. 【硬件设备】CPU 高速缓存知识
  10. AI绘画 Midjourney