HDFS API操作实践

简介:

1.上传本地文件到HDFS

通过FileSystem.copyFromLocalFile(Path src, Path dst)可将本地文件上传到HDFS指定的位置上,其中src和dst均为文件的完整路径

在《hadoop实战--搭建开发环境及编写Hello World》一文中的myHelloWorld项目下新建一个文件CopyFile.java,添加代码:

import java.util.*;
import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class CopyFile {
    public static void main(String[] args) throws Exception {
         Configuration conf = new Configuration();
         FileSystem hdfs = FileSystem.get(conf);
         
         Path src =new Path("/home/wu/copy.txt");  //完整路径
         Path dst =new Path("hdfs://localhost:9000/user/wu/in/");
         hdfs.copyFromLocalFile(src, dst);
         System.out.println("Upload to" + conf.get("fs.default.name"));
        
         FileStatus files[] = hdfs.listStatus(dst);
         for(FileStatus file : files) {
             System.out.println(file.getPath());
         }
    }
}

copy.txt为自己新建的一个测试文件,关于dst路径,可以双击in文件中的test1.txt,就会出现完整路径名(hdfs://localhost:9000/user/wu/in)

注意:main后面加上throws Exception,否则会报错

运行结果可以在控制台和文件夹中验证,控制台显示:

Upload tohdfs://localhost:9000/
hdfs://localhost:9000/user/wu/in/copy.txt
hdfs://localhost:9000/user/wu/in/test1.txt
hdfs://localhost:9000/user/wu/in/test2.txt

刷新项目,可以看到in文件下夹多了一个copy.txt文件

2.创建HDFS文件 

通过FileSystem.creat(Path f)可在HDFS上创建文件,其中f为文件的完整路径。

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class CreateFile {
    public static void main(String[] args) throws Exception{
        Configuration conf = new Configuration();
        byte[] buff = "hello world, hello wu!".getBytes();
        FileSystem hdfs = FileSystem.get(conf);
        Path dfs = new Path("hdfs://localhost:9000/user/wu/in/copy.txt");
        FSDataOutputStream outputStream = hdfs.create(dfs);
        outputStream.write(buff,0, buff.length);
    }
}

双击查看in文件夹中的copy.txt文件,内容如预期所示:

3.重命名HDFS文件

通过FileSystem.rename(Path src, Path dst)可为指定的HDFS文件重命名,其中src和dst均为文件的完整路径。

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class RenameFile {
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        Configuration conf = new Configuration();
        FileSystem hdfs = FileSystem.get(conf);
        Path frPath = new Path("hdfs://localhost:9000/user/wu/in/copy.txt");
        Path toPath = new Path("hdfs://localhost:9000/user/wu/in/RenameFile.txt");
        boolean isRenameFile = hdfs.rename(frPath, toPath);
    }
}

运行后的结果如下图:

4.删除HDFS上的文件

通过FileSystem.delete(Path f,Boolean recursive)可删除指定的HDFS文件,其中f为需要删除文件的完整路径,recursive用来确定是否进行递归删除。

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class RenameFile {
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        Configuration conf = new Configuration();
        FileSystem hdfs = FileSystem.get(conf);
        Path delpath = new Path("hdfs://localhost:9000/user/wu/in/RenameFile.txt");
        
        boolean isDeleted = hdfs.delete(delpath, false);
        System.out.println("delete?" + isDeleted);
    }
}

运行后的结果如下图:

5.查看HDFS文件的最后修改时间

通过FileStatus.getModificationTime()可以查看指定HDFS文件的修改时间。

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.Path;
public class GetLTime {
    public static void main(String[] args) throws Exception{
        // TODO Auto-generated method stub
        Configuration conf = new Configuration();
        FileSystem hdfs = FileSystem.get(conf);
        Path fpath = new Path("hdfs://localhost:9000/user/wu/in/hdfstest.txt");
        FileStatus fileStatus = hdfs.getFileStatus(fpath);
        long modificationTime = fileStatus.getModificationTime();
        System.out.println("Modification time is " + modificationTime);
    }
}

运行结果如下:

Modification time is 1418719100449

6.查看某个HDFS文件是否存在

通过FileSystem.exists(Path f)可查看指定HDFS文件是否存在,其中f为文件的完整路径。

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.Path;
public class CheckFile {
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        Configuration conf = new Configuration();
        FileSystem hdfs = FileSystem.get(conf);
        Path findfile = new Path("hdfs://localhost:9000/user/wu/in/hdfstest.txt");
        boolean isExists = hdfs.exists(findfile);
        System.out.println("is exists? " + isExists);
    }
}

运行结果如下:

is exists? true

7.查看某个文件的HDFS集群位置

通过FileSystem.getFileBlockLocation(FileStatus file,long start,long len)可查找指定文件在HDFS集群上的位置,其中file为文件的完整路径,start和len来标识查找文件的路径。

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.BlockLocation;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.Path;
public class FileLoc {
    public static void main(String[] args) throws Exception{
        // TODO Auto-generated method stub
        Configuration conf = new Configuration();
        FileSystem hdfs = FileSystem.get(conf);
        Path fpath = new Path("hdfs://localhost:9000/user/wu/in");
        FileStatus filestatus = hdfs.getFileStatus(fpath);
        BlockLocation[] blkLocations = hdfs.getFileBlockLocations(filestatus, 0, filestatus.getLen());
        int blockLen = blkLocations.length;
        System.out.println(blockLen);
        for(int i = 0; i < blockLen; i++) {
            String[] hosts = blkLocations[i].getHosts();
            System.out.println("block " + i + "location:" + hosts[i]);
        }
    }

}
目录
相关文章
|
20天前
|
敏捷开发 负载均衡 监控
探索微服务架构下的API网关设计与实践
【5月更文挑战第31天】本文将深入剖析微服务架构中的关键组件——API网关,探讨其设计理念、核心功能以及在实际项目中的应用。我们将从API网关的基本概念出发,逐步展开对其路由、负载均衡、认证授权、监控日志等方面的详细讨论,并结合实际案例,分析如何高效地实现和管理一个稳定的API网关。
|
5天前
|
监控 负载均衡 安全
微服务架构下的API网关设计实践
【6月更文挑战第15天】本文将深入探讨在构建现代软件系统时,如何有效地设计和实现一个API网关。我们将从API网关的核心作用出发,分析其在不同场景下的应用,并结合实际案例,展示如何通过API网关提升系统的可扩展性、安全性和性能。文章旨在为后端开发人员提供一套清晰的指南,帮助他们在微服务架构中实现高效且可靠的API管理策略。
|
9天前
|
缓存 安全 API
构建高效API:RESTful设计原则与实践
【6月更文挑战第10天】在数字化时代,API作为不同软件组件之间通信的桥梁,其设计质量直接影响到应用的性能和用户体验。本文深入探讨了RESTful API的设计原则,并通过实际案例分析如何构建高效、可扩展且安全的API。我们将从资源定义、接口一致性、错误处理等方面入手,逐步揭示如何优化API设计,以满足不断变化的技术需求和业务目标。
|
9天前
|
负载均衡 监控 应用服务中间件
微服务架构下的API网关设计与实践
【6月更文挑战第11天】在现代软件开发中,微服务架构因其灵活性和可扩展性而受到青睐。作为微服务系统的入口,API网关承担着请求路由、负载均衡、安全认证等关键职责。本文将深入探讨API网关的设计要点与实践策略,旨在为读者提供构建高效、稳定API网关的实用指南。
|
10天前
|
分布式计算 DataWorks API
DataWorks操作报错合集之如何解决API调用报400,文件夹找不到的错误
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
8天前
|
Java 大数据 API
【大数据】HDFS、HBase操作教程(含指令和JAVA API)
【大数据】HDFS、HBase操作教程(含指令和JAVA API)
49 0
【大数据】HDFS、HBase操作教程(含指令和JAVA API)
|
10天前
|
JavaScript 关系型数据库 Serverless
Serverless 应用引擎操作报错合集之在调用stable Diffusion函数计算api接口返回,报错:"Not Found"一般是什么原因
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
11天前
|
设计模式 安全 API
深入理解RESTful API设计原则与实践
本文深入探讨了RESTful API设计的原则与实践,从HTTP方法的选择、资源的命名、状态码的运用以及安全性等方面进行了详细分析。通过对常见的设计模式和最佳实践的解读,读者将能够更好地理解和应用RESTful API设计,提升自身的技术水平。
|
14天前
|
安全 Java API
JavaSE——常用API进阶一(3/3)-StringBuilder(构造器、拼接内容、反转操作、其他操作),StringBuffer,StringJoiner
JavaSE——常用API进阶一(3/3)-StringBuilder(构造器、拼接内容、反转操作、其他操作),StringBuffer,StringJoiner
14 1
|
16天前
|
负载均衡 安全 API
微服务架构下的API网关设计与实践
【6月更文挑战第4天】在微服务架构中,API网关作为系统的统一入口,承担着请求路由、负载均衡、安全校验等关键职责。本文将深入探讨API网关的设计原则与实现技术,通过案例分析,展示如何在现代后端开发中构建高效、可靠的API网关。

热门文章

最新文章