HDFS API编程

3.1常用类

       3.1.1Configuration

Hadoop配置文件的管理类,该类的对象封装了客户端或者服务器的配置(配置集群时,所有的xml文件根节点都是configuration)

创建一个Configuration对象时,其构造方法会默认加载hadoop中的两个配置文件,分别是hdfs-site.xml以及core-site.xml,这两个文件中会有访问hdfs所需的参数值,主要是fs.default.name,指定了hdfs的地址,有了这个地址客户端就可以通过这个地址访问hdfs了。即可理解为configuration就是hadoop中的配置信息。

 

     3.1.2 FileSystem

该类的对象是一个文件系统对象,对HDFS中的文件进行的一系列操作,如创建等

 

      3.1.3FileStatus

获取文件或者文件夹的元信息!比如:文件路径,文件大小,文件所有者,所在的块大小,文件修改时间,备份数量,权限等!

 

       3.1.4FSDataInputStream

输入流对象! 可以将HDFS中的文件或者文件夹读取到本地!

 

     3.1.5FSDataOutputStream

输出流对象! 可以将本地的文件或者文件夹上传到HDFS中!

 

     3.1.6构建工程

指定工程路径

框架结构

导入依赖节点

<dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.8.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>2.8.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>2.8.0</version>
</dependency>

查询文件信息

// 查询文件信息
    private static void catFile() throws IOException, FileNotFoundException {
        // TODO Auto-generated method stub
        // 指定集群当中主机的IP+端口
        String uri = "hdfs://192.168.77.99:9000";
        // 加载Hadoop的配置文件
        Configuration con = new Configuration();
        // 创建一个可以操作的HDFS对象
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
        FileStatus[] listStatus = fileSystem.listStatus(new Path("/input/"));
        for (FileStatus fileStatus : listStatus) {
            /**
             * 快捷键Syso
             */
            System.out.print("file文件信息------》" + fileStatus);
        }

        /**
         * 获取单个文件
         */

        /**
         * FileStatus fileStatus = fileSystem.getFileStatus(new Path(
         * "input/file1.txt")); System.out.println(fileStatus);
         */
    }

查询文件内容

public static void getFile(String fileName) throws Exception {
        // 指定集群中的主机IP+端口号
        String uri = "hdfs://192.168.77.99:9000";
        // 加载Hadoop的配置文件
        Configuration con = new Configuration();
        // 创建一个可以操作的HDFS对象
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
        // 获取指定的文件
        FSDataInputStream open = fileSystem.open(new Path(fileName));
        // 将文件的内容装载到BufferedReader对象中去
        BufferedReader reader = new BufferedReader(new InputStreamReader(open));
        String line = "";
        // 循环读取文件内容
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
        // 关闭资源
        reader.close();
        open.close();
        fileSystem.close();
    }

创建一个空的文件

public static void createNewFile(String fileName) throws Exception {
        // 指定集群中的主机IP+端口号
        String uri = "hdfs://192.168.77.99:9000";
        // 加载Hadoop的配置文件
        Configuration con = new Configuration();
        // 创建一个可以操作的HDFS对象
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
        if (fileSystem.exists(new Path(fileName))) {
            System.out.println("文件已经存在");
        } else {
            boolean createNewFile = fileSystem
                    .createNewFile(new Path(fileName));
            if (createNewFile) {
                System.out.println("成功");
            } else {
                System.out.println("失败");
            }
        }
        fileSystem.close();
    }

在新创建的文件夹写入内容

public static void createFile(String fileName) throws Exception {
        // 指定集群中的主机IP+端口号
        String uri = "hdfs://192.168.77.99:9000";
        // 加载Hadoop的配置文件
        Configuration con = new Configuration();
        // 创建一个可以操作的HDFS对象
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
        if (fileSystem.exists(new Path(fileName))) {
            System.out.println("文件已经存在");
        } else {
            FSDataOutputStream create = fileSystem.create(new Path(fileName));
            String str = "老黑今天又黑了";
            create.write(str.getBytes());
            create.flush();
            create.close();
        }
        fileSystem.close();
    }

 创建文件夹

public static void mkdirFile(String fileName) throws Exception {
        // 指定集群中的主机IP+端口号
        String uri = "hdfs://192.168.77.99:9000";
        // 加载Hadoop的配置文件
        Configuration con = new Configuration();
        // 创建一个可以操作的HDFS对象
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
        boolean mkdirs = fileSystem.mkdirs(new Path(fileName));
        if (mkdirs) {
            System.out.println("成功!");
        } else {
            System.out.println("失败!");
        }
        fileSystem.close();
    }

重名文件的名字

public static void renameFile(String ordername, String newname)
            throws Exception {
        // 指定集群中的主机IP+端口号
        String uri = "hdfs://192.168.77.99:9000";
        // 加载Hadoop的配置文件
        Configuration con = new Configuration();
        // 创建一个可以操作的HDFS对象
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
        boolean rename = fileSystem.rename(new Path(ordername), new Path(
                newname));
        if (rename) {
            System.out.println("成功!");
        } else {
            System.out.println("失败!");
        }
        fileSystem.close();
    }

删除文件夹

@SuppressWarnings("deprecation")
    public static void deleteFile(String filename) throws Exception {
        // 指定集群中的主机IP+端口号
        String uri = "hdfs://192.168.77.99:9000";
        // 加载Hadoop的配置文件
        Configuration con = new Configuration();
        // 创建一个可以操作的HDFS对象
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);

        boolean delete = fileSystem.delete(new Path(filename));
        if (delete) {
            System.out.println("成功!");
        } else {
            System.out.println("失败!");
        }
        fileSystem.close();
    }

上传文件 Windows上传到HDFS上

public static void fromFile(String localName, String fromName)
            throws Exception {
        // 指定集群中的主机IP+端口号
        String uri = "hdfs://192.168.77.99:9000";
        // 加载Hadoop的配置文件
        Configuration con = new Configuration();
        // 创建一个可以操作的HDFS对象
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
        fileSystem.copyFromLocalFile(new Path(localName), new Path(fromName));
        fileSystem.close();
    }

从hdfs下载到Windows

    public static void downLoad(String defsFile,String localFile) throws Exception {
        String uri = "hdfs://192.168.77.99:9000";
        // 加载hadoop配置文件
        Configuration con = new Configuration();
        // 创建一个可以操作HDFS对象
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
         fileSystem.copyToLocalFile(new Path(defsFile),new Path (localFile));
        fileSystem.close();
        
    }

注意:要记得调用方法

完整的代码结构--各种操作的方法

package com.hdfs;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class HDFS {

    public static void main(String[] args) throws Exception {
        // catFile();

        // getFile("/input/file1.txt");// 查询单个文件信息

        // createNewFile("/input/file3.txt");
        // createFile("/input/file4.txt");
        // mkdirFile("/MKDIRS");//创建文件夹
        // renameFile("/input/file5.txt","/input/file4.txt");//重命名文件的名字
        //deleteFile("/MKDIRS");// 删除文件夹
        //fromFile("C:\\Users\\70424\\Desktop\\1.txt","/input");//上传文件Windows到HDFS上
        downLoad("/input/file1.txt","C:\\Users\\70424\\Desktop");//从hdfs下载到Windows
    }

    // 查询文件信息
    private static void catFile() throws IOException, FileNotFoundException {
        // TODO Auto-generated method stub
        // 指定集群当中主机的IP+端口
        String uri = "hdfs://192.168.77.99:9000";
        // 加载Hadoop的配置文件
        Configuration con = new Configuration();
        // 创建一个可以操作的HDFS对象
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
        FileStatus[] listStatus = fileSystem.listStatus(new Path("/input/"));
        for (FileStatus fileStatus : listStatus) {
            /**
             * 快捷键Syso
             */
            System.out.print("file文件信息------》" + fileStatus);
        }

        /**
         * 获取单个文件
         */

        /**
         * FileStatus fileStatus = fileSystem.getFileStatus(new Path(
         * "input/file1.txt")); System.out.println(fileStatus);
         */
    }

    // 查询文件内容
    public static void getFile(String fileName) throws Exception {
        // 指定集群中的主机IP+端口号
        String uri = "hdfs://192.168.77.99:9000";
        // 加载Hadoop的配置文件
        Configuration con = new Configuration();
        // 创建一个可以操作的HDFS对象
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
        // 获取指定的文件
        FSDataInputStream open = fileSystem.open(new Path(fileName));
        // 将文件的内容装载到BufferedReader对象中去
        BufferedReader reader = new BufferedReader(new InputStreamReader(open));
        String line = "";
        // 循环读取文件内容
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }
        // 关闭资源
        reader.close();
        open.close();
        fileSystem.close();
    }

    // 创建一个空的文件
    public static void createNewFile(String fileName) throws Exception {
        // 指定集群中的主机IP+端口号
        String uri = "hdfs://192.168.77.99:9000";
        // 加载Hadoop的配置文件
        Configuration con = new Configuration();
        // 创建一个可以操作的HDFS对象
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
        if (fileSystem.exists(new Path(fileName))) {
            System.out.println("文件已经存在");
        } else {
            boolean createNewFile = fileSystem
                    .createNewFile(new Path(fileName));
            if (createNewFile) {
                System.out.println("成功");
            } else {
                System.out.println("失败");
            }
        }
        fileSystem.close();
    }

    // 在新创建的文件夹写入内容
    public static void createFile(String fileName) throws Exception {
        // 指定集群中的主机IP+端口号
        String uri = "hdfs://192.168.77.99:9000";
        // 加载Hadoop的配置文件
        Configuration con = new Configuration();
        // 创建一个可以操作的HDFS对象
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
        if (fileSystem.exists(new Path(fileName))) {
            System.out.println("文件已经存在");
        } else {
            FSDataOutputStream create = fileSystem.create(new Path(fileName));
            String str = "老黑今天又黑了";
            create.write(str.getBytes());
            create.flush();
            create.close();
        }
        fileSystem.close();
    }

    // 创建文件夹
    public static void mkdirFile(String fileName) throws Exception {
        // 指定集群中的主机IP+端口号
        String uri = "hdfs://192.168.77.99:9000";
        // 加载Hadoop的配置文件
        Configuration con = new Configuration();
        // 创建一个可以操作的HDFS对象
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
        boolean mkdirs = fileSystem.mkdirs(new Path(fileName));
        if (mkdirs) {
            System.out.println("成功!");
        } else {
            System.out.println("失败!");
        }
        fileSystem.close();
    }

    // 重名文件的名字
    public static void renameFile(String ordername, String newname)
            throws Exception {
        // 指定集群中的主机IP+端口号
        String uri = "hdfs://192.168.77.99:9000";
        // 加载Hadoop的配置文件
        Configuration con = new Configuration();
        // 创建一个可以操作的HDFS对象
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
        boolean rename = fileSystem.rename(new Path(ordername), new Path(
                newname));
        if (rename) {
            System.out.println("成功!");
        } else {
            System.out.println("失败!");
        }
        fileSystem.close();
    }

    // 删除文件夹
    @SuppressWarnings("deprecation")
    public static void deleteFile(String filename) throws Exception {
        // 指定集群中的主机IP+端口号
        String uri = "hdfs://192.168.77.99:9000";
        // 加载Hadoop的配置文件
        Configuration con = new Configuration();
        // 创建一个可以操作的HDFS对象
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);

        boolean delete = fileSystem.delete(new Path(filename));
        if (delete) {
            System.out.println("成功!");
        } else {
            System.out.println("失败!");
        }
        fileSystem.close();
    }

    // 上传文件 Windows上传到HDFS上
    public static void fromFile(String localName, String fromName)
            throws Exception {
        // 指定集群中的主机IP+端口号
        String uri = "hdfs://192.168.77.99:9000";
        // 加载Hadoop的配置文件
        Configuration con = new Configuration();
        // 创建一个可以操作的HDFS对象
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
        fileSystem.copyFromLocalFile(new Path(localName), new Path(fromName));
        fileSystem.close();
    }
    //从hdfs下载到Windows
    public static void downLoad(String defsFile,String localFile) throws Exception {
        String uri = "hdfs://192.168.77.99:9000";
        // 加载hadoop配置文件
        Configuration con = new Configuration();
        // 创建一个可以操作HDFS对象
        FileSystem fileSystem = FileSystem.get(URI.create(uri), con);
         fileSystem.copyToLocalFile(new Path(defsFile),new Path (localFile));
        fileSystem.close();
        
    }

}
View Code

猜你喜欢

转载自www.cnblogs.com/3020815dzq/p/10123120.html