HDFS的api

本文详细介绍如何使用Java API进行HDFS的基本操作,包括获取文件系统句柄、创建目录、上传及下载文件、目录浏览和删除目录等核心功能。

获取文件系统句柄


    public static FileSystem getFileSystem() throws Exception{

        Configuration conf = new Configuration();

        URI uri = new URI("hdfs://cdh2:9000");  //active,不能是standby

        FileSystem  hdfs = FileSystem.get(uri, conf);    

        return hdfs ;

       

    }


创建文件目录

	public static void mkdir() throws Exception{
 
		FileSystem  hdfs = getFileSystem();	
		hdfs.mkdirs(new Path("hdfs://cdh2:9000/test2")); 
        //active,不能是standby
		hdfs.close();		
	}

上传文件


    public static void copyToHDFS() throws Exception{

         

        FileSystem  hdfs = getFileSystem();

        Path srcPath =  new Path("D:\\data\\wc.txt");

        Path descPath =  new Path("hdfs://cdh2:9000/test2/");

        hdfs.copyFromLocalFile(srcPath, descPath);

        hdfs.close();    

    }


下载文件

	public static void getFileFromHDFS() throws Exception{
		FileSystem  hdfs = getFileSystem();	
		Path srcPath =  new Path("hdfs://cdh2:9000/test2/wc.txt");
		Path descPath =  new Path("D:\\data\\target");
		hdfs.copyToLocalFile(srcPath, descPath);
		hdfs.close();		
	}

目录浏览


    public static void listAllFile() throws Exception{

         

        FileSystem  hdfs = getFileSystem();

        FileStatus[] liststatus = hdfs.listStatus(new Path("hdfs://cdh2:9000/"));

        for(FileStatus fs :  liststatus){

            System.out.println(fs);

        }

       

        Path[] path =FileUtil.stat2Paths(liststatus);

        for(Path p :  path){

            System.out.println(p);

        }  

        hdfs.close();    

    }

删除目录

	public static void deleteDir() throws Exception{
		 
		FileSystem  hdfs = getFileSystem();	
		
		hdfs.delete(new Path("hdfs://cdh2:9000/test2"), true);
 
		hdfs.close();		
	}

 

03-26
### HDFS API 使用说明 HDFS(Hadoop Distributed File System)提供了丰富的API用于管理和操作分布式文件系统中的数据。以下是关于HDFS API的一些核心功能及其用法: #### 1. 客户端环境准备 为了能够使用HDFS API,首先需要配置好客户端开发环境。这通常包括设置Maven依赖以及指定Hadoop的配置文件路径[^3]。 ```xml <dependencies> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>3.2.1</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-hdfs</artifactId> <version>3.2.1</version> </dependency> </dependencies> ``` #### 2. 初始化FileSystem对象 通过`Configuration`类加载Hadoop配置并初始化`FileSystem`实例来连接到HDFS集群[^1]。 ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; public class FileSystemExample { public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://namenode-host:port"); FileSystem fs = FileSystem.get(conf); // 执行其他操作... fs.close(); } } ``` #### 3. 基本操作示例 ##### (1) 创建目录 可以通过调用`mkdirs()`方法在HDFS上创建一个新的目录结构。 ```java Path path = new Path("/example/directory"); boolean isCreated = fs.mkdirs(path); System.out.println("Directory created? " + isCreated); ``` ##### (2) 上传文件 利用`copyFromLocalFile()`方法可以从本地文件系统向HDFS上传文件[^4]。 ```java Path localSrc = new Path("/path/to/local/file.txt"); Path hdfsDst = new Path("/path/in/hdfs/"); fs.copyFromLocalFile(localSrc, hdfsDst); ``` ##### (3) 下载文件 同样地,也可以通过`copyToLocalFile()`实现从HDFS下载文件至本地磁盘的操作。 ```java Path hdfsSrc = new Path("/path/in/hdfs/file.txt"); Path localDst = new Path("/local/path/"); fs.copyToLocalFile(hdfsSrc, localDst); ``` ##### (4) 删除文件/目录 要移除某个文件或者整个目录,则可采用`delete()`函数完成此任务。 ```java Path deleteTarget = new Path("/target/to/delete"); boolean recursiveDelete = true; // 是否递归删除子项 boolean result = fs.delete(deleteTarget, recursiveDelete); System.out.println("Deletion successful? " + result); ``` ##### (5) 更改名称或位置 对于已存在的资源,支持对其进行重新命名或是迁移至另一处位置。 ```java Path oldName = new Path("/old/name"); Path newName = new Path("/new/name"); boolean renameResult = fs.rename(oldName, newName); System.out.println("Rename success? " + renameResult); ``` #### 4. RESTful 风格访问——WebHDFS 除了传统的Java API之外,HDFS还提供了一种基于HTTP协议的标准接口形式即WebHDFS[^2]。它允许任何具备网络通信能力的应用程序无需额外部署JVM即可轻松存取存储于其中的数据集。 例如,如果想查看特定路径下的内容列表,可以直接发送GET请求给对应的URL地址: ``` http://<NAMENODE>:<PORT>/webhdfs/v1/<PATH>?op=LISTSTATUS ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值