hadoop hdfs的java操作

访问hdfs上的文件并写出到输出台

   /**
     * 访问hdfs上的文件并写出到输出台
     * @param args
     */
    public static void main(String[] args) {
        try {
            //将hdfs格式的url转换成系统能够识别的
            URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
            URL url = new URL("hdfs://hadoop1:9000/hello");
            InputStream in = url.openStream();
            /**
             * 将读取到的数据写入到文件,不需要自己控制缓冲区,也不需要自己去读取输入流
             * @param in 输入流
             * @param out 输出流
             * @param bufferSize 换成区大小
             * @param close 是否关闭流,如果是false,需要在finally中关闭
             *           IOUtils.closeStream(in);
             */
            IOUtils.copyBytes(in, System.out, 1024, true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

获取FileSystem

   /**
     * 获取FileSystem
     * 使用Hadoop的fileSystem读取文件
     */
    public static FileSystem getFileSystem() throws IOException,
            URISyntaxException {
        FileSystem fileSystem = FileSystem.get(new URI("hdfs://hadoop1:9000"), new Configuration());
        return fileSystem;
    }

创建文件夹

   /**
     * 创建文件夹
     * @throws URISyntaxException
     */
    public static void mkdir() throws IOException, URISyntaxException {
        FileSystem fileSystem = getFileSystem();
        //在hdfs上创建文件夹,并返回创建是否成功的标示
        boolean successful = fileSystem.mkdirs(new Path("/dir1"));
        if(successful){
            System.out.println("创建文件夹成功");
        }
    }

上传

   /**
     * 上传
     * @throws URISyntaxException
     */
    public static void putdata() throws IOException,
            FileNotFoundException, URISyntaxException {
        FileSystem fileSystem = getFileSystem();
        //创建一个上传路径,返回输出流
        FSDataOutputStream os = fileSystem.create(new Path("/dir1/readme"));
        FileInputStream in = new FileInputStream("D:\\Program Files\\others\\2345Soft\\HaoZip\\2345好压免责声明.txt");
        IOUtils.copyBytes(in, os, 1024, true);
    }

下载

   /**
     * 下载
     * @throws URISyntaxException
     */
    public static void download() throws IOException, URISyntaxException {
        FileSystem fileSystem = getFileSystem();
        FSDataInputStream in = fileSystem.open(new Path("hdfs://hadoop1:9000/hello"));
        //关闭流需要手动关闭,System.out也是一个输出流,如果是true 下面就不会输出了
        IOUtils.copyBytes(in, System.out, 1024, false);
        in.close();
    }

删除文件或文件夹

   /**删除文件或文件夹
     * true:表示是否递归删除,如果是文件,这里是true,false都是无所谓,
     *         文件夹必须是true,否则报错
     * @throws URISyntaxException
     */
    public static void delete() throws IOException, URISyntaxException {
        FileSystem fileSystem = getFileSystem();
        boolean isDeleted = fileSystem.delete(new Path("/dir1"), true);
        if(isDeleted){
            System.out.println("删除成功");
        }
    }

遍历目录

    /**遍历目录
     * 调用FileSystem的listStatus方法
     * 查看file的状态 使用FileStatus
     * @throws URISyntaxException
     */
    public static void list() throws IOException, URISyntaxException {
        FileSystem fileSystem = getFileSystem();
        FileStatus[] listStatus = fileSystem.listStatus(new Path("/"));
        for (FileStatus fileStatus : listStatus) {
            String isDir = fileStatus.isDir()?"目录":"文件";
            String name = fileStatus.getPath().getName().toString();
            System.out.println(isDir+"-->"+name);
        }
    }
时间: 2024-10-03 13:12:17

hadoop hdfs的java操作的相关文章

Hadoop HDFS文件常用操作及注意事项

1.Copy a file from the local file system to HDFS The srcFile variable needs to contain the full name (path + file name) of the file in the local file system. The dstFile variable needs to contain the desired full name of the file in the Hadoop file s

Hadoop HDFS (3) JAVA访问HDFS

现在我们来深入了解一下Hadoop的FileSystem类.这个类是用来跟Hadoop的文件系统进行交互的.虽然我们这里主要是针对HDFS,但是我们还是应该让我们的代码只使用抽象类FileSystem,这样我们的代码就可以跟任何一个Hadoop的文件系统交互了.在写测试代码时,我们可以用本地文件系统测试,部署时使用HDFS,只需配置一下,不需要修改代码了. 在Hadoop 1.x以后的版本中引入了一个新的文件系统接口叫FileContext,一个FileContext实例可以处理多种文件系统,而

[0014] HDFS 常用JAVA 操作实战

目的: 学习用java进行的常用hdfs操作 参考: [0002] Hadoop HDFS cmd常用命令练手 环境: hadoop2.6.4 win7 下的eclipse环境调试已经配置好,参考前面的文章 代码: 1. 创建文件夹 1 package hdfs; 2 3 import java.io.IOException; 4 5 import org.apache.hadoop.conf.Configuration; 6 import org.apache.hadoop.fs.FileSy

Hadoop HDFS的Shell操作实例

本文发表于本人博客. 我们知道HDFS是Hadoop的分布式文件系统,那既然是文件系统那最起码会有管理文件.文件夹之类的功能吧,这个类似我们的Windows操作系统一样的吧,创建.修改.删除.移动.复制.修改权限等这些操作. 那我们现在来看看hadoop下是怎么操作的. 先输入hadoop fs命令,会看到如下输出: Usage: java FsShell [-ls <path>] [-lsr <path>] [-du <path>] [-dus <path>

HDFS的Java操作

实验环境: Windows 10 Eclipse Mars.2 Release (4.5.2) CentOS 7 Hadoop-2.7.3 先决条件: 1) Windows上各环境变量已配置OK.  如: PATH, HADOOP_HOME; 2) 与Hadoop版本及Windows平台(x86或x64)对应的 hadoop.dll, winutils.exe工具已配置OK. 1.新建Java项目,如图: 2.导入外部JAR包,即HDFS jar包: 3.Java代码: package hdfs

Hadoop HDFS (3) JAVA访问HDFS之二 文件分布式读写策略

先把上节未完成的部分补全,再剖析一下HDFS读写文件的内部原理 列举文件 FileSystem(org.apache.hadoop.fs.FileSystem)的listStatus()方法可以列出一个目录下的内容. public FileStatus[] listStatus(Path f) throws FileNotFoundException, IOException; public FileStatus[] listStatus(Path[] files) throws FileNot

hadoop2.5.2学习及实践笔记(六)—— Hadoop文件系统及其java接口

文件系统概述 org.apache.hadoop.fs.FileSystem是hadoop的抽象文件系统,为不同的数据访问提供了统一的接口,并提供了大量具体文件系统的实现,满足hadoop上各种数据访问需求,如以下几个具体实现(原表格见<hadoop权威指南>): 文件系统 URI方案 Java实现 (org.apache.hadoop) 定义 Local file fs.LocalFileSystem 支持有客户端校验和本地文件系统.带有校验和的本地系统文件在fs.RawLocalFileS

HDFS的JAVA客户端编写

HDFS的shell操作很简单,直接查看文档就可以,和Linux指令类似,下面简单总结一下HDFS的JAVA客户端编写. 如图建立工程,其中客户端放在hdfs包下面: 需要导包,在hadoop的share文件夹下面,里面会找到不同的jar包.我把我的贴出来供大家参考: 剩下的就是编写客户端代码了.在Linux下面编写不会有那么多问题,但是在windows下面会莫名其妙各种错误,下面会提到. 首先看core-site.xml文件: <?xml version="1.0" encod

Hadoop2.4.1 HDFS的Java客户端开发

我是在linux的环境下的Eclipse中开发这个程序的,如果你是在windows环境下写这个程序,请自行调整. 第一步:首先我们确定自己的hadoop的hdfs的环境是好的,我们在linux中启动hdfs,然后在web页面上通过URL测试:http://uatciti:50070 第二步:在Linux下打开Eclipse, 写我们的客户端代码. 说明:我们在Linux系统的/usr/local/devtool/java文件下,有JDK的文件.我们希望把这个文件上传到hdfs系统的根目录下的jd