数据小站
数据科学成长之路

eclipse通过api接口操作hdfs

hdfs的操作,主用是获取文件系统、文件的上传下载、文件夹的创建删除、名称变更及信息查看。操作hdfs用到的class对象主用有 :

Configuration: 配置文件对象,操作hdfs的桥梁

FileSystem : 文件系统对象,操作hdfs的载体

获取文件信息 fSystem.toString()

public void getFileSystem() throws Exception {
    //创建配置信息对象
    Configuration configuration = new Configuration();
    //获取文件系统
    FileSystem fSystem =  FileSystem.get(new URI("hdfs://192.168.31.100:9000"), configuration, "yibin");
    System.out.println(fSystem.toString());

    fSystem.close();
}

文件上传.copyFromLocalFile()方法

public void putFileToHDFS() throws Exception {
//获取配置信息
    Configuration configuration = new Configuration();
//获取文件信息
    FileSystem fs = FileSystem.get(new URI("hdfs://192.168.31.100:9000"), configuration, "yibin");
//执行上传命令
    fs.copyFromLocalFile(new Path("C:/Users/Administrator/Desktop/统计学.txt"), new Path("/yibin"));
//关闭资源
    fs.close();
}

文件下载.copyToLocalFile()方法

public void putFileToHDFS() throws Exception {
   //如果有在eclipse里配置core-site.xml信息,在代码里就可以不用配置hdfs地址和用户名,配置信息优先级: 
   //代码 > core-site.xml配置, 优先采用代码配置,代码没有配置时采用core文件
   Configuration configuration = new Configuration();
   FileSystem fs =  FileSystem.get(configuration);    
   fs.copyToLocalFile(new Path("/yibin/统计学.txt"), new Path("C:\Users\Administrator\Desktop\ab"));
   fs.close();
}

创建路径.mkdirs()

...
Configuration configuration = new Configuration();
FileSystem fs =  FileSystem.get(configuration);
fs.mkdirs(new Path("/test/abc"))
...
fs的mkdir支持多级目录

删除文件.delete()

...
fs.delete(new Path("/test/abc"),True)
...

文件改名.rename()

...
fs.rename(new Path("/test/abc"),new Path( "/test/def" ))
...

查看文件详情

public static void main(String[] args) throws Exception {
    Configuration configuration = new Configuration();
    FileSystem fs =  FileSystem.get(configuration); 
     
    //深度遍历,列出文件
    RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"), true);
    while (listFiles.hasNext()) {
        LocatedFileStatus status = listFiles.next();
        //打印文件名
        System.out.println(status.getPath().getName());
        //打印文件块大小
        System.out.println(status.getBlockSize());
        //打印文件内容长度
        System.out.println(status.getLen());
        //打印文件在hdfs中存储的信息
        System.out.println(status.toString());

       //文件块的具体信息
       BlockLocation[] blockLocations = status.getBlockLocations();
       for (BlockLocation block:blockLocations) {
	     System.out.println(block.getOffset());
	     System.out.println(block.toString());
    }
    fs.close();
}
文件信息的get方法
文件块信息方法

获取文件夹信息

Configuration configuration = new Configuration();
FileSystem fs =  FileSystem.get(configuration);     
FileStatus[] listStatus = fs.listStatus(new Path("/"));
    for(FileStatus status:listStatus) {
        if(status.isFile()) {
            System.out.println("文件---"+status.getPath().getName());
        }else {
            System.out.println("文件夹+++"+status.getPath().getName());
        }
    }
赞(0) 打赏
未经允许不得转载:技术文档分享 » eclipse通过api接口操作hdfs

评论 抢沙发