开发者社区> wuyudong> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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]);
        }
    }

}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
hadoop3自学入门笔记(3)-java 操作hdfs
hadoop3自学入门笔记(3)-java 操作hdfs
0 0
HDFS的客户端操作及常用命令
HDFS的客户端操作及常用命令
0 0
uiu
带你快速进阶:HDFS架构与操作
带你快速进阶:HDFS架构与操作
0 0
hadoop之操作window下HDFS API编程(8)
hadoop之操作window下HDFS API编程(8)
0 0
Hadoop中HDFS的API操作、客户端环境准备、配置HADOOP_HOME环境变量
Hadoop中HDFS的API操作、客户端环境准备、配置HADOOP_HOME环境变量
0 0
Hadoop中HDFS的Shell操作(开发重点)、启动Hadoop集群、基本语法、常用命令实操、命令大全、-help、-mkdir、-moveFromLocal、-copyFromLocal
Hadoop中HDFS的Shell操作(开发重点)、启动Hadoop集群、基本语法、常用命令实操、命令大全、-help、-mkdir、-moveFromLocal、-copyFromLocal
0 0
HDFS的Shell操作
HDFS的Shell操作
0 0
+关注
wuyudong
我的个人博客地址:http://wuyudong.com/
文章
问答
文章排行榜
最热
最新
相关电子书
更多
海量数据分布式存储——Apache HDFS之最新进展
立即下载
API 平台的安全实践
立即下载
API平台的安全实践
立即下载